목록Study/Swift (19)
조앤의 기술블로그
속성 감시자(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 ..
// (expr1, expr2, ...) // Tuple Member let a = (12, 34) 튜플은 2개 이상의 값을 저장할 때 사용합니다. 서로 다른 형식의 값 저장도 가능합니다. let data = ("", 200, "ok", 12.34) data의 자료형은 (String, Int, String, Double)입니다. 튜플은 선언 이후에 - 새로운 멤버를 추가할 수 없습니다. - 기존 멤버를 삭제할 수 없습니다. - 저장된 멤버의 개수는 튜플을 선언할 때 결정되고 변경할 수 없습니다. - 튜플 멤버의 값은 변경할 수 있습니다. [멤버에 접근하는 법] 튜플은 0-based Index로, Explicit Member Expression(점문법)으로 멤버에 접근할 수 있습니다. data.o // "..
지난 포스팅에 이어서 함수에 관해 알아보겠습니다. 이번 포스팅은 Argument Label, Variadic Parameters, In-Out Parameters에 관한 내용입니다. Label은 이름이란 뜻입니다. 즉, 인자에 이름을 붙여서 함수 코드의 가독성을 높이는 것입니다. // (name: Type) // name - parameter Name, Argement Label // (label name: Type) // label - Argument Label // name - parameter Name func sayHello(to name: String) { print("Hello, \(name)") // name - 함수 body에서 사용 // to - 함수를 호출할 때 사용 } sayHello..
Swift에서 함수(Function), 파라미터, Argument Label에 대해 포스팅해보겠습니다. 함수는 특정 기능을 수행하는 코드 조각입니다. 함수를 사용하는 것의 장점은 'Reusability'입니다. 코드에서 불필요한 반복이 줄어듭니다. [Calling Functions] //functionName(parameters) print("Hello") [Defining Functions] /* func name(parameters) -> ReturnType { statements } */ func sayHello() { print("Hello World!") } sayHello() func add() -> Int { return 1 + 2 } add() 함수가 리턴한 것은 함수를 호출한 곳으로 갑니..
우선, guard문은 'Early Exit'입니다. 즉, 원하는 조건이 충족되지 않으면, 불필요한 코드는 실행하지 않고 일찍 종료해 버립니다. 기본 syntax를 보겠습니다. [Syntax] guard condition else { Statements } guard optionalBinding else { Statements } Condition을 만족하지 않는다면 else 블록 내부에 있는 Statements가 실행됩니다. condition절에는 condition이 오거나, Optional Biding이 와도 됩니다. Condition 절은 Bool 형을 return해야 합니다. else 문은 생략할 수 없습니다. [장점] if문의 경우, 조건의 수가 늘어날 수록 코드가 중첩되는데, guard문은 중첩..
구조체와 클래스에 대해 알아보겠습니다. 우선, Swift의 Programming Paradigm에 대해 알아보겠습니다. [Swift의 Programming Paradigm] 1) Object-Oriented Programming 2) Protocol-Oriented Programming 3) Functional Programming 간단하게 비교해보자면, OOP에서 Abstraction의 개념이 등장하고, 이때 Class가 주요 역할을 합니다. Class는 추상화의 결과로서, 객체 생성의 설계도 역할을 합니다. 이때 결과로 생성된 것을 instance라고 합니다. Structure는 비교적 작은 데이터를 저장하고, 값 형식이 필요할 때 사용합니다. Class와 마찬가지로 설계도 역할을 하지만, 객체는 아..
클로저란, 짧고 독립적인 코드 조각(Self-contained code blocks)을 의미합니다. (자바에서는 람다라는 개념이 있습니다. ) 이름이 없는 함수라고 이해할 수도 있습니다. 그리고 함수와 클로저는 서로 호환됩니다. 기본 syntax를 보겠습니다. //#1. { (parameters) -> Return Type in Statements } //#2. { Statements } [예제 1] let a = { print("Hello, Swift") } //a() 여기서 a()를 호출하게되면 에러가 납니다. 클로저는 글로벌 scope에서는 단독으로 사용이 불가하기 때문입니다. [예제 2] let b = { (str: String) -> String in return "Hello \(str)" } ..