목록Study (34)
조앤의 기술블로그
Extension은 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가하여 형식을 확장하는 것입니다. - 계산 인스턴스 속성과 계산 형식 속성을 추가할 수 있습니다. - 인스턴스 메소드와 형식 메소드를 정의할 수 있습니다. - 새로운 이니셜라이저를 제공할 수 있습니다. - 서브스크립트를 정의할 수 있습니다. - 새로운 nested types를 정의하고 사용할 수 있습니다. - 이미 정의된 형식을 프토토콜로 만들 수 있습니다. extension SomeType { //new functionality to add to SomeType goes here } extension SomeType: SomeProtocol, AnotherProtocol { // implementation of protocol r..

Class Initializer 클래스의 이니셜라이저에는 두가지 종류가 있습니다. Designated 이니셜라이저와, Convenience 이니셜라이저 입니다. - Designated Initializer 클래스에 최소 1개 이상 있어야 하고, 클래스가 가진 모든 속성을 초기화해야 합니다. init (parameters) { initialization } - Convenience Initializer 다양한 방법으로 초기화하기 위한 생성자이고, 필요한 속성을 초기화하고, 동일 클래스의 다른 생성자를 호출합니다. 사용하는 이유는, 다른 생성자를 호출하는 패턴을 통해 가능한 코드의 중복을 없애기 위함입니다. convenience init (parameters) { initalization } [예제] cla..
생성자(Initializers)는 클래스, 구조체, 열거형에서 인스턴스를 생성할 때 값을 초기화하여 인스턴스를 만들 수 있도록 하는 것입니다. struct Figure { var width: Double var height: Double init() { width = 0.0 height = 0.0 } } var f = Figure() print("The default value is \(width) x \(height)") // 0.0 0.0 [Parameter Names and Argument Labels] 생성자의 파라미터를 지정할 수도 있습니다. struct Color { let red, green, blue: Double init(red: Double, green: Double, blue: Dou..
타입캐스팅은 인스턴스의 형식을 확인하거나, 인스턴스를 다른 형식으로 처리할 때 사용합니다. (Type casting is a way to check the type of an instance, or to treat that instance as a differenct superclass or subclass from somewhere else in its own class hierarchy.) 스위프트에서 타입캐스팅은 is와 as 연산자로 구현됩니다. (프로토콜을 활용해서 타입캐스팅을 하는 방법도 있지만, 이 포스팅에서는 다루지 않겠습니다. ) class MediaItem { var name: String init(name: String) { self.name = name } } class Movie: ..
스위프트 언어의 상속과 다형성에 대해 알아보겠습니다. 객체지향 프로그래밍에서 상속은 코드의 중복 문제를 해결하기 위해 도입된 개념입니다. 가장 상위에 있는 클래스를 Base Class, Root Class라고 합니다. 상속을 이루고 있는 것을 클래스 계층(Class Hierachy)에 속한다고 합니다. class ClassName: SuperClassName { } 클래스를 상속하는 방법입니다. class Figure { var name = "Unknown" init(name: String) { self.name = name } func draw() { print("draw \(name)") } } Root class인 Figure 입니다. class Circle: Figure { var radius =..
메소드는 특정 형식에 속하는 함수입니다. 인스턴스 메소드는 인스턴스를 통해 호출하고, 특정 인스턴스에 연관된 동작을 구현하는 메소드입니다. func name(parameters) -> ReturnType { Code } instance.method(parameters) 함수와 구현 방식은 동일하지만, 호출할 때 인스턴스를 호출하면서 점문법으로 메소드를 호출해야 합니다. 클래스, 구조체, 열거형에서 사용할 수 있습니다. class Sample { var data = 0 static var sharedData = 123 func doSomething() { print(data) Sample.sharedData } func call() { doSomething() } } let a = Sample() a.da..
속성 감시자(Property Observer), 형식 속성(Type Property)에 대해서 알아보겠습니다. 속성의 값이 저장되기 전, 후에 호출되어 값이 변경되는지를 감시하는 속성 감시자입니다. var name: Type = DefaultValue { willSet(name) { statements //newValue } didSet(name) { statements //oldValue } } 변수 저장 속성에 속성 감시자를 만들 수 있습니다. (상수는 값을 변경할 수 없으니 감시자의 의미가 없습니다. ) 지연 저장 속성, 계산 속성에도 속성 감시자를 만들 수 없으나 예외는 존재합니다. (Subclass에서 계산속성을 오버라이딩하고 속성감시자 구현은 가능합니다. ) class Size { var wi..
저장 속성(Stored Property), 계산 속성(Computed Property)에 대해 알아보겠습니다. 저장 속성은 인스턴스에 속한 속성으로, 클래스와 구조체에서 선언 가능합니다. 즉, 인스턴스가 생성될 때마다 새로운 메모리에 저장됩니다. // Variable Stored Property var name: Type = DefaultValue // Constant Stored Property let name: Type = DefaultValue 초기값을 지정할 경우 형식추론을 할 수 있으므로 자료형을 생략할 수 있습니다. 초기값을 지정하지 않을 경우엔, 자료형을 지정해주어야 합니다. 상수 저장 속성은 초기화 이후에 값을 변경할 수 없습니다. class Member { let name: String ..