Swift 19

[Swift] Property - didSet, willSet이란

# didSet, willSet in Swift 스위프트는 프로퍼티 옵저버로 didSet, willSet을 제공합니다. didSet은 프로퍼티 값이 변경되기 직전, willSet은 값이 변경된 직후를 감지하는 것입니다. 따라서, 이 때 원하는 작업을 수행할 수 있습니다. 참고로 프로퍼티 옵저버를 사용하기 위해서는 프로퍼티의 값이 반드시 초기화가 되어 있어야 합니다.또한 클래스의 init()안에서 값을 할당할 때는 didSet, willSet이 호출되지 않습니다. (초기화 이후부터 프로퍼티를 감시) # didSet, willSet의 활용 프로퍼티 옵저버의 가장 빈번한 사용은 Model에서 갱신된 값을 View에 보여줄 때 입니다. 예를 들면, View에 점수를 표시하는 Label이 있다고 가정하고, 점수가..

Swift 2018.06.11

[Swift] 프로토콜(Protocol)이란

# 프로토콜(Protocol) 정의 - 프로토콜은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 이니셜라이저 등의 요구사항을 정의합니다. 쉽게 말하면, 구조체나 클래스나 열거형에다가 "너는 이 기능이 꼭 필요해.. 그러니깐 이 기능을 꼭 구현해놨어야 해!" 라고 강요하는 것입니다. - 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 기능을 모두 구현합니다. 즉, 프로토콜은 기능을 정의하고 제시 할 뿐이지 스스로 기능을 구현하진 않습니다. # 프로토콜(Protocol) 정의 protocol 프로토콜 이름 {// 정의} # 프로토콜(Protocol) 상속 - 프로토콜은 하나 이상의 프로토콜을 상속받아 기존 프로토콜의 요구사항보다 더 많은 요구사항을 추가할 수 있습니다. - 프로토콜 상속 문법은..

Swift 2018.05.04

[Swift] 클래스 vs 구조체,열거형

# 클래스(Class) 전통적인 OOP 관점에서의 클래스입니다. 클래스는 단일상속이 가능하고 *참조 타입입니다. Apple 프레임워크의 대부분의 큰 뼈대는 모두 클래스로 구성되어 있습니다. (참조 타입 - Reference Type : 데이터를 전달할 때 메모리 위치를 전달합니다.) # 구조체(Struct) C언어 등의 구조체보다 다양한 기능을 가지고 있습니다. 구조체는 상속이 불가능하고 *값 타입입니다. Swift의 대부분의 큰 뼈대는 모두 구조체로 구성되어 있습니다. (값 타입 - Value Type : 데이터를 전달할 때 값을 복사하여 전달합니다.) # 열거형(Enum) 다른 언어의 열거형과는 많이 다른 존재입니다. 열거형은 상속이 불가능하고 값 타입입니다. 유사한 종류의 여러 값을 유의미한 이름으..

Swift 2018.05.04

[Swift] guard vs if

프로그래밍을 하다보면 조건문은 종종 depth가 길어져 복잡도를 높이는 원인이 되곤 합니다. 이러한 문제점을 피하기 위해 Swift 2.0에서 guard가 등장했습니다. guard vs if guard문은 후속 코드들이 실행되기 전에 특정 조건을 만족하는지 확인하는 용도로 사용합니다. else블록에는 이후의 코드 진행을 막는 return, break가 삽입되어야 하고 주로, 실행 흐름을 종료하기 위한 목적으로 주로 사용합니다. 반면에 if문은 조건이 참인 경우에 후속 코드를 실행하지 않는 코드가 삽입되어야 합니다. 옵셔널 바인딩시 차이점 guard, if문과 옵셔널 바인딩할 때의 차이점은 바인딩을 하는 변수와 상수의 scope입니다.

Swift 2018.04.27

[Swift] Inheritance- final 키워드

Inheritance - Preventing Overrides(오버라이드 방지)Swift에서 final키워드를 사용하면 메소드, 프로퍼티, 서브스크립트가 오버라이드를 금지할 수 있습니다. 주로 재정의할 필요가 없을 때 final을 사용하는 것이 좋습니다. 참고로 클래스 자체가 상속되는 것을 막을려고 할 때에도 final을 사용할 수 있습니다. (final 클래스를 상속받으려는 클래스는 컴파일 시 에러가 발생합니다.)

Swift 2018.04.25

[Swift] map, filter, reduce

Swift의 표준 배열 라이브러리는 map, filter, reduce라는 세 가지 기능을 제공합니다. map 클로저로 각 항목들을 반영한 결과물을 가진 새로운 배열을 반환합니다. Declaration Parameters transform으로 넘기는 것은 클로저는 변경된 값을 반환하기 위해 해당 타입의 값을 반환합니다. Return Value 변환 된 요소를 포함한 배열 반환 사용 filter 클로저로 각 항목들을 비교하여 일치하는 결과물을 가진 새로운 배열을 반환합니다. Declaration Parameters isIncluded를 지원하는 클로저는 항목이 포함되는지(true) 또는 제외되는지(false) boolean값을 반환합니다. Return Value 변환 된 요소를 포함한 배열 반환 사용 re..

Swift 2018.04.17

[Swift] 접근 제어(Access Control) - 접근 레벨

접근 레벨(Access Levels) Swift는 코드 내의 엔티티에 대해 다섯 가지 접근 레벨을 제공합니다. 이러한 접근 레벨은 엔티티가 정의 된 소스 파일에 관련이 있으며, 소스 파일이 속한 모듈과도 관련이 있습니다. 1. open access 및 public access을 통해 엔티티를 정의 모듈의 모든 소스 파일 내에서 사용할 수 있으며, 정의한 모듈을 가져오는 다른 모듈의 소스파일에서도 사용할 수 있습니다. 일반적으로 공용 인터페이스를 지정할 때 사용합니다. 2. internal access는 엔티티가 정의 모듈의 모든 소스 파일내에서 사용되지만 해당 모듈 외부의 소스 파일에서는 사용되지 않도록 합니다. 일반적으로 앱이나 프레임워크의 내부 구조를 정의할 때 사용합니다. 3. file-privat..

Swift 2018.04.10

[Swift] 접근 제어(Access Control) - 접근 제어 모델

모듈과 소스 파일(Modules and Source Files) Swift의 접근 제어 모델은 모듈과 소스파일의 개념을 기반으로 합니다. 모듈은 코드 배포의 단일 유닛입니다.Swift에서 import키워드를 사용하여 다른 모듈에서 가져올 수 있는 프레임워크 또는 응용 프로그램인 단일 코드 배포 단위입니다. Xcode의 각 빌드 대상(예: 앱 번들 또는 프레임워크)은 Swift에서의 별도의 모듈로 처리됩니다. 독립 실행형 프레임워크로 그룹화하면 해당 코드가 개별적인 프레임워크에서 캡슐화하여 재사용할 수 있습니다. 소스파일(사실상, 앱 또는 프레임워크 내에서 하나의 파일)은 모듈 내의 단일 스위프트 소스 코드 파일입니다. 개별 소스 파일에 각각 타입을 정의하는게 일반적이지만, 하나의 소스파일에서 여러 타입,..

Swift 2018.04.10

[Swift] 접근 제어(Access Control) - 정의

접근 제어는 다른 소스 파일 및 모듈의 코드에서 코드의 일부에 대한 접근을 제한합니다. 이 기능을 사용하면 코드의 구현한 세부 사항을 숨기고, 해당 코드를 접근하고 사용할 수 있는 인터페이스를 지정할 수 있습니다. 각각의 타입(클래스, 구조체, 열거형)뿐만 아니라 프로퍼티, 메소드, 초기화, 서브스크립트에 대해 접근 레벨을 지정할 수 있습니다. 프로토콜은 전역 상수, 변수 및 함수처럼 특정 컨텍스트로 제한 될 수 있습니다. Swift는 다양한 수준의 접근 이외에도 일반적인 시나리오에 대한 기본 접근 수준을 제공함으로써, 명시적 접근 제어 수준을 지정하지 않아도됩니다. Note : 접근 제어를 적용할 수 코드(프로퍼티, 타입, 함수 등)의 다양한 측면을 간결하게 하기 위해 아래에서 "엔티티"라고 언급합니다.

Swift 2018.04.10