protocol 학습하기 (4) [ any, some ]
·
프로그래밍언어/swift
저번 포스팅에서 우리는 associatedtype을 통해 프로토콜안에서 범용 타입을 편하게 사용하는 방법을 학습했다. 이번 학습은 associatedtype을 사용할 때 발생하는 문제점과 해결방안을 알아보자. 문제점associatedtype이 정의된 protocol은 리턴 또는 변수 타입으로 사용될 수 없는 불편함이 있다. protocol SomeProtocol { associatedtype T : Equatable // 제약 조건 도 줄 수 있음}protocol SomeProtocol2 {}var prop: SomeProtocol // ❌ associatedtype가 정의되서 변수 타입으로 사용 불가func someFunc() -> SomeProtocol {} // ❌ associatedtype..
protocol 학습하기 (3) [ associatedtype ]
·
프로그래밍언어/swift
저번 포스팅에서 프로토콜의 generic, 합성, 채택 체크등 조금 더 확장된 개념을 학습했다.이번에는 저번 학습 주제 중 generic을 프로토콜에서 편하게 사용할 수 있는 associatedtype에 대해 학습해보자등장 배경프로토콜에서 generic 사용할 때 번거로움이 있다.왼쪽 사진과 같이 프로토콜 자체에 제네릭을 선언할 수 없고 만약 제네릭을 사용하고 싶으면  오른쪽 사진과 같이 타입이더라도  함수 하나하나 새로 명시를 해줘야한다. 역할프로토콜에 사용하는 범용 타입의 역할을 한다. 특징1) associatedtype 역시 제네릭과 마찬가지로 제약 조건을 줄 수 있다.    여기서 제약조건이란 프로토콜 채택과 클래스 상속 등을 의미한디. 2) 채택 할 때 typealias를 이용하여 명확한 타입을..
protocol 학습하기 (2) [ generic, 합성, 채택 체크 ]
·
프로그래밍언어/swift
프로토콜에 제네릭 및 제약조건 적용하기제네릭 (범용 타입)은 런타임 시 타입을 결정하게하여 함수 또는 변수에 상황에 맞는 타입을 사용할 수 있게하는 기능이다. 제네릭 역시 프로토콜에 적용 할 수 있으며, 프로토콜 타입을  재네릭으로 사용할 수 있다. 1) 프로토콜에 제네릭 사용하기 기본 제네릭 패턴 또는 where과 조합해서 쓸 수 있다.protocol SomeProtocol { func f1(param: T) // 단순 제네릭 이용 func f2(param: T) where T: Equatable // 제네릭 + where 이용 } 2) 제네릭에 프로토콜 타입으로 사용하기프로토콜 역시 제네릭 타입으로 사용할 수 있다.protocol SomeProtocol { ..
protocol 학습하기 (1) [ property, method, extension ]
·
프로그래밍언어/swift
protocol이란 ?프로토콜이란 반드시 구현해야하는 요구사항을 미리 정의하는 타입이다.class, struct, enum, 심지어 protocol도 또다른 protocol을 채택할 수 있다. 참고애플 공식문서 property 정의하기먼저 property를 정의할 때 protocol에서 어떤식으로 요구사항을 정의하는 지 알아보자 1) var로 시작해서 변수명과 타입을 지정한다. 2) 연산 프로퍼티를 이용하여 `get`과 `set`의 역할을 부여한다. 3) get set일 경우 let property와 getter only computed property는 사용할 수 없다. protocol SomeProtocol { var prop1: Int { get } // 읽기 전용 var prop..
생성자
·
프로그래밍언어/swift
기본 생성자를 제외하고도 많은 종류의 생성자가 있다는 걸이번 부트스 캠프를 통해 알게되었다.다양한 생성자의 역할과 특징을 알아보자. 1. Designated initializers첫 번째는 지정 생성자이다.  역할가장 기본적인 생성자이며 초기화 되지 않은 모든 프로퍼티를 초기화 해주는 역할을 한다. 특징 1) Delegate Up 서브 클래스의 Designated Initializer는 반드시 슈퍼 클래스의 Designated Initializer를 호출해야 합니다 2. convenience initializers두번째는 편의 생성자이다. 역할Designated init의 파라미터 중 일부를 기본값으로 설정해서, convenience init안에서 Designated init을 호출하는 보조 생성자 역할..
class와 struct
·
프로그래밍언어/swift
네이버 부스트캠프 멤버쉽 기간, 더 나아가 모든 개발 기간동안 항상 고민하는 주제인 구현체를 정의할 때 class와 struct의 특징을 확실하게 정리하는 시간을 가져보자.공통점Model custom types that encapsulate data. 1) 두 타입 모두 데이터를 캡슐화하는 커스텀 타입 모델이다.2) 프로퍼티를 정의할 수 있다.3) 메서드를 정의할 수 있다.4)생성자를 통해 초기화가 가능하다.5) extension을 통한 확장이 가능하다.6) protocol을 채택할 수 있다. 차이점 classstructtypeReference TypeValue Type상송 가능 여부OX메모리 할당 위치Heap대부분 Stack, 특수한 경우 Heap 이용ARC 아래에 관리OXdeinit을 통한 리소스 해..