Initializers (생성자) 를 사용하는 이유 구조체 / 열거형 / 클래스와 같은 설계도를 기반으로 생성한 것을 ‘ 인스턴스’ 라고 합니다. 이 때 인스턴스의 초기화를 담당하는 것이 ‘생성자’ 입니다. 초기화를 사용하는 이유는 모든 속성을 기본값으로 초기화 해서 인스턴스를 기본값 상태를 만들기 위해서입니다. 확인은 생성자 실행 되었을때 모든 속성이 기본값을 가지고 있다는 뜻 입니다. (기본 값 없으면 초기화 실패) Default Initializer 아래와 같이 모든 속성이 초기화 되어 있을 경우 컴파일러가 기본 생성자를 생성해 주기 때문에 따로 작성 할 필요 가 없다. class Position { var x = 0.0 // 속성이 항상 동일한 값으로 초기화 될때 사용 하는 방법 var y = 0..
제네릭 (Generics Function)이란? 형식에 의존하지 않는 범용 코드 사용 코드의 재사용, 유지보수 용이 코드(예시) & 설명 Generic Function //두형식이 모두 INT여야 한다. //다른 형식이 필요하다면 개별적으로 만들어야 한다. -> 함수 구현 중복 func swapInteger(lhs: inout Int, rhs: inout Int) { let tmp = lhs lhs = rhs rhs = tmp } var a = 10 var b = 20 swapInteger(lhs: &a, rhs: &b) a b //Generic Function 사용하여 해결 -> 코드 작성량 비약적 감소 //T는 새로운 형식이 아니라 문맥에 따라 실제 형식으로 대체되는 place holder일 뿐이다 ..
익스텐션(Extension)이란? 이름 그대로 형식을 확장하는데 사용 확장 가능한 것 : Class / Structure / Enumeration / Protocol 멤버를 추가하는 것은 가능 하지만, 기존 멤버를 오버라이딩 하는 것은 불가능(상속을 통해 서브클래싱 해야됨) 코드(예시) & 설명 익스텐션 문법 //확장 가능한 멤버 종류 struct Size { var width = 0.0 var height = 0.0 } //구조체 확장 extension Size { var area: Double { return width * height } } let s = Size() s.width s.height s.area //프로토콜 구현 추가 extension Size: Equatable { //원본을 수정할..
프로토콜(Protocol)이란? 형식에서 제공하는 멤버 목록 프로토콜에 선언 되어있는 필 수 멤버를 모두 구현해야 한다(프로토콜을 채용한다) Protocols protocol protocolName { propertyRequirements methodRequirements initializerRequirements subscriptRequirements } protocol ProtocolName: Protocol, ... { } Adopting Protocols enum TypeName : ProtocolName, ... { } struct TypeName : ProtocolName, ... { } class TypeName : SuperClass, ProtocolName, ... { } Class-On..
Guard Statement(Guard문) Early Exit 원하는 조건이 충족되지 않으면 불필요한 코드 실행 X , 일찍 종료해 버린다 Syntax guard condition else { //condition이 false일때 else문이 실행됨 statements } guard optionalBiding else{ statements } 특징 1. else문을 생략 할 수 없다.(코드를 반드시 중지 시켜야 되기 때문에) 2. Guard문 내에서는 코드를 중지 시켜야 된다(가드문을 호출한 Scope을 중지 시켜야된다.) 3. If문과 다르게 조건이 늘어날수록 코드가 조금더 깔끔해진다(중첩X) 4. OptionalBinding과 함께 사용 가능 5. 대부분 Local Scope에서 사용 Global로 ..