Apple 제공 Swift 프로그래밍 가이드(3.0.1)의 Deinitialization 부분을 공부하며 정리한 글입니다. 개인적인 생각도 조금 들어가있습니다. 들어가며디이니셜라이저deinitializer는 클래스 인스턴스가 할당해제deallocated되기 바로 직전에 불린다. deinit 키워드로 정의할 수 있으며 클래스 타입에서만 사용할 수 있다. How Deinitialization WorksSwift는 ARC(automatic reference counting)을 통해 메모리를 관리하면서 더 이상 필요하지 않다고 여겨지는 인스턴스를 자동으로 할당해제deallocate 해준다. 따라서 인스턴스가 할당해제될 때 자원 정리를 개발자가 직접 할 일은 별로 없다. 그러나 신경을 써야 할 상황도 있기 마련이..
Apple 제공 Swift 프로그래밍 가이드(3.0.1)의 Initialization 부분을 공부하며 정리한 글입니다. 개인적인 생각도 조금 들어가있습니다. 이니셜라이저 마지막 편입니다. Failable Initializers, Required Initializers 등을 정리했습니다. 이전 편을 아직 안 읽으셨다면 먼저 읽어봐주세요.Initialization 1편 링크 > http://wlaxhrl.tistory.com/47 Initialization 2편 링크 > http://wlaxhrl.tistory.com/48 Failable Initializers클래스, 구조체, ENUM에서 초기화를 하다가 실패하는 경우가 있을 수 있다면 Failable Initializers를 정의하라. 옵셔널 타입처럼 i..
Apple 제공 Swift 프로그래밍 가이드(3.0.1)의 Initialization 부분을 공부하며 정리한 글입니다. 개인적인 생각도 조금 들어가있습니다. 이니셜라이저 2편입니다. 이번 시간에는 클래스의 이니셜라이저와 초기화에 대하여 중점적으로 다뤄보려고 합니다. 1편을 아직 안 읽으셨다면 먼저 1편을 읽어보세요.Initialization 1편 링크 > http://wlaxhrl.tistory.com/47 들어가며클래스의 모든 stored 프로퍼티(슈퍼 클래스의 Stored 프로퍼티도 포함)는 초기화 과정에서 반드시 초기값initial value이 할당되어야 한다. 이것을 보장하기 위해 Swift는 클래스 타입에 대한 이니셜라이저 두 종류를 제공한다. 지정 이니셜라이저designated initiali..
Apple 제공 Swift 프로그래밍 가이드(3.0.1)의 Initialization 부분을 공부하며 정리한 글입니다. 개인적인 생각도 조금 들어가있습니다. 들어가며초기화initialization는 클래스, 구조체, ENUM의 인스턴스를 사용하기 위한 준비 과정이다. 이 과정에서 새로운 인스턴스를 사용하기 위해 필요한 셋팅들을 한다. 모든 stored 프로퍼티에 초기값을 할당하는 것 등을 예로 들어볼 수 있다.초기화를 위해 이니셜라이저initializer를 정의하자. Swift에서는 이니셜라이저가 따로 값을 반환하지 않는다. 따라서 Objective-C에서 많이 쓰던 self = [super init]; 은 Swift에서 쓸 수 없다.이니셜라이저의 주목적은 새로운 인스턴스가 제대로 사용할 준비가 되었음을..
Apple 제공 Swift 프로그래밍 가이드(3.0.1)의 Inheritance 부분을 공부하며 정리한 글입니다. 개인적인 생각도 조금 들어가있습니다. 들어가며클래스는 다른 클래스로부터 메서드, 프로퍼티, 그 외 다른 특성들을 상속inheritance받을 수 있다. 상속을 받은 클래스를 서브클래스subclass, 상속을 해준 클래스를 슈퍼클래스superclass라고 부른다. 서브클래스는 슈퍼클래스의 메서드, 프로퍼티, 스크립트에 접근할 수 있고, 재정의(오버라이딩)할 수도 있다.상속받은 프로퍼티에 프로퍼티 옵저버를 추가할 수 있다. 지난번 프로퍼티 포스팅에 언급했던 것처럼, 슈퍼클래스의 computed 프로퍼티에도 서브클래스에서는 옵저버를 추가할 수 있다. Defining a Base Class베이스 클..
Apple 제공 Swift 프로그래밍 가이드(3.0.1)의 Methods 부분을 공부하며 정리한 글입니다. 개인적인 생각도 조금 들어가있습니다. 들어가며메서드(method)란 특정 타입에 연관된 함수(function)를 말한다. 클래스, 구조체, ENUM은 인스턴스 메서드와 타입 메서드(Objective-C에서의 클래스 메서드)를 정의할 수 있다.Swift에서는 구조체와 ENUM 안에도 메서드를 정의할 수 있다는 것이 C, Objective-C와의 주요 차이점이라고 할 수 있다. Instance Methods인스턴스 메서드는 특정 클래스, 구조체, ENUM의 인스턴스에 속하는 메서드이다. 함수와 같은 문법을 사용한다. class Counter { var count = 0 func increment() {..
Apple 제공 Swift 프로그래밍 가이드(3.0.1)의 Properties 부분을 공부하며 정리한 글입니다. 개인적인 생각도 조금 들어가있습니다. 들어가며프로퍼티는 특정 클래스, 구조체, ENUM과 값을 연결해준다. Stored Property는 상수/변수값을 인스턴스의 한 부분으로 저장할 수 있게 해주고, Computed Property는 값을 저장하는 게 아니라 그때그때 계산해서 반환할 수 있게 해준다. Computed Property는 클래스, 구조체, ENUM이 가질 수 있고 Stored Property의 경우는 오직 클래스와 구조체만 가질 수 있다.인스턴스가 아니라 타입 그 자체와 연결되는 Type Property라는 것도 있다.또한 프로퍼티의 값이 변하는 것을 모니터링할 수 있도록 Prop..
Apple 제공 Swift 프로그래밍 가이드(3.0.1)의 Classes and Structures 부분을 공부하며 정리한 글입니다. 개인적인 생각도 조금 들어가있습니다. 들어가며클래스(Class)와 구조체(structure)는 프로그램의 범용적이며 유연한 코드 블럭을 만들기 위해 사용된다. 클래스와 구조체에 기능을 추가하기 위해 프로퍼티와 메서드를 정의할 수 있다. 또한 Swift에서는 커스텀 클래스와 구조체를 만들 때 인터페이스와 구현부를 다른 파일로 나눌 필요가 없이, 하나의 파일에 구현을 해놓으면 외부 인터페이스를 알아서 만들어준다. 클래스의 인스턴스는 전통적으로 object 라고 부르지만 Swift의 클래스와 구조체는 다른 언어에 비해 기능(functionality)에 많이 가깝다. 이 챕터에서..
Apple 제공 Swift 프로그래밍 가이드(3.0.1)의 Enumerations 부분을 공부하며 정리한 글입니다. 개인적인 생각도 조금 들어가있습니다. 들어가며Enumeration(이하 ENUM)은 관련된 값들을 그룹으로 묶어서 common type 으로 정의해준다. ENUM을 이용하면 타입에 안전한(type-safe) 코드를 작성할 수 있다.C에서의 ENUM은 각 케이스마다 Integer 값을 할당했었다. 이것을 raw value라고 한다. Swift에서의 ENUM은 raw value로 여러가지 타입을 사용할 수 있고 심지어 항상 raw value 를 할당하지 않아도 된다. 또한 케이스 각각에 연관된 값들(associated values)을 지정할 수 있다.Swift에서의 ENUM은 기존에는 clas..
Apple 제공 Swift 프로그래밍 가이드(3.0.1)의 Closures 부분을 공부하며 정리한 글입니다. 개인적인 생각도 조금 들어가있습니다. 들어가며클로저는 코드 내에서 전달되거나 사용될 수 있는 기능을 독립적으로 포함하는(self-contained) 블록이다. C와 Objective-C에서의 블록과 유사하다.클로저는 자신이 정의된 콘텍스트에 존재하는 상수/변수의 참조를 캡쳐해서 저장할 수 있다. (closing over) 즉 클로저는 자신이 정의되어 있는 곳의 scope에 속하는 상수/변수의 참조에 접근할 수 있다는 말이다. Swift는 이 과정에서 메모리 관리를 알아서 관리해준다. 캡쳐라는 개념을 모르더라도 걱정하지 마시라. 나중에 자세히 다룬다. 참고로 이 포스트에서는 가이드에 나온 그대로 캡..