[시작] - 클래스는 메서드나 프로퍼티 등을 다른 클래스로부터 상속받을 수 있음 : 자식 클래스 : 어떤 클래스로부터 상속을 받은 클래스 : 부모 클래스 : 자식 클래스에게 자신의 특성을 물려준 클래스- 자식 클래스는 부모 클래스의 메서드, 프로퍼티, 서브스크립트를 사용할 수 있음- 자식 클래스는 부모 클래스로부터 물려받은 것들을 재정의할 수 있음- 기반 클래스 : 다른 클래스로부터 상속을 받지 않은 클래스 [클래스 상속] 123class 클래스이름: 부모클래스이름{ 프로퍼티와 메서드들}cs 코드 재사용 용이, 기능 확장 시 기존 클래스를 변경하지 않고도 새로운 기능을 추가한 클래스를 정의할 수 있음 [재정의] - 자식 클래스는 부모 클래스로부터 물려받은 특성 (인스턴스 메서드, 타입 메서드, 인스턴스 ..
[시작] - 클래스, 구조체, 열거형에는 컬렉션, 리스트, 시퀀스 등 타입의 요소에 접근하는 단축 문법인 서브스크립트를 정의할 수 있음 - 별도의 설정자, 접근자를 정의하지 않아도 인덱스를 통해 값을 설정하거나 가져올 수 있음- 배열, 딕셔너리에서 array[index], dictionary[key]와 같이 표현하는 것 - 한 타입에 여러 개의 서브스크립트 정의 가능- 다른 타입을 인덱스로 갖는 여러 개의 서브스크립트 중복 정의 가능 [서브스크립트 문법] - 인스턴스의 이름 뒤에 대괄호로 감싼 값을 써줌으로써 인스턴스 내부의 특정 값에 접근할 수 있음 - subscript 키워드를 사용하여 정의 : 매개변수의 개수, 타입, 반환 타입 등을 지정 : 읽기전용 / 읽기쓰기 전용으로 구현 가능- 타입의 구현부..
[시작] - 모나드 : 특정한 상태로 값을 포장하는 것 : Swift에서는 이를 옵셔널이라는 형태로 구현 : 값이 있을지 없을지 모르는 상태 속에 포장- 함수객체와 모나드는 디자인 패턴 혹은 자료구조라고 할 수 있음 [컨텍스트] - 컨텍스트 : 콘텐츠를 담은 무언가 : 옵셔널은 some과 none이라는 두 가지의 컨텍스트를 가짐 [함수객체] - 맵을 적용할 수 있는 컨테이너 타입 - 맵은 컨테이너(컨텍스트)의 값을 변형하는 고차함수- 옵셔널에 맵을 적용했을 때 : 값이 있는 경우 : 컨텍스트로부터 값 추출 -> 전달받은 함수 적용 -> 결과값을 컨텍스트에 담아 반환 : 값이 없는 경우 : 컨텍스트로부터 값 추출 -> 값 없음 -> 아무것도 하지 않음 [모나드] - 값이 있을 수도 있고 없을 수도 있는 컨..
[시작] - 고차함수 : 매개변수로 함수를 갖는 함수 - Swift의 유용한 대표적인 고차함수 map, filter, reduce [맵 map] - 자신을 호출할 때 매개변수로 전달된 함수를 실행하여 그 결과를 다시 반환해주는 함수 - 배열, 딕셔너리, 세트, 옵셔널 등에서 사용 가능 : Sequence, Collection 프로토콜을 준수하는 타입과 옵셔널- 기존 컨테이너의 값은 변경되지 않고 새로운 컨테이너가 생성되어 반환됨- 기존 데이터를 변형하는 데 많이 사용함1234let array: [Int] = [1,2,3,4,5,6]let mappedArray = array.map { $0 * 2 }print(mappedArray) //2, 4, 6, 8, 10, 12 Colored by Color Scr..
[옵셔널 체이닝] - 옵셔널에 속해 있는 nil일지도 모르는 프로퍼티, 메서드 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정 - 옵셔널을 반복 사용하여 옵셔널이 서로 꼬리를 물고 있는 모양이므로 옵셔널 체이닝이라고 부름- 중첩된 옵셔널 중 하나라도 값이 존재하지 않으면 nil을 반환 - 옵셔널 변수나 상수 뒤에 물음표를 붙여 표현- 결과적으로 nil이 반환될 가능성이 있으므로 옵셔널 체이닝의 결과는 항상 옵셔널임 - 옵셔널 바인딩으로 값을 가져오는 것보다 코드의 양이 훨씬 줄어드는 효과를 가져옴- 옵셔널 체이닝의 결과도 옵셔널이므로 이를 옵셔널 바인딩하여 사용 가능 - 옵셔널의 서브스크립트를 사용하고자 할 때는 대괄호보다 앞에 물음표를 표기해주어야 함 : 배열, 딕셔너리에서 값을 가져올 때 해당..
[시작] - Swift에서 함수형 프로그래밍 패러다임을 이해하기 위해 반드시 알아야 하는 것 - 클로저, 제네릭, 프로토콜, 모나드 등이 결합하여 Swift는 더욱 강력한 언어가 되었음 - 클로저 : 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것 : 함수는 클로저의 한 형태- 클로저는 변수나 상수가 선언된 위치에서 참조를 획득하고 저장할 수 있음- 클로저의 세 가지 형태 : 이름이 있고, 어떠한 값도 획득하지 않는 전역함수의 형태 : 이름이 있고, 다른 함수 내부의 값을 획득할 수 있는 중첩함수의 형태 : 이름이 없고, 주변 문맥에 따라 값을 획득할 수 있는 축약 문법으로 작성된 형태- 클로저의 다양한 표현 : 매개변수와 반환값의 타입을 문맥을 통해 유추할 수 있으므로 생략 가능 : 단 한 줄의 ..
[시작] - 객체 지향 프로그래밍 패러다임의 '은닉화'와 관련됨 [접근제어] - 파일 간 / 모듈 간 접근을 제한 - 코드의 상세 구현은 숨기고 허용된 기능만 사용하는 인터페이스를 제공함 - 모듈 : 배포할 코드의 묶음 단위 : 하나의 프레임워크나 라이브러리 또는 애플리케이션 : import 키워드를 사용해 불러오는 것- 소스파일 : 하나의 Swift 소스 코드 파일 [접근수준] - 각 타입(클래스, 구조체, 열거형 등)에 특정 접근수준을 지정할 수 있음 - 타입 내부의 프로퍼티, 메서드, 생성자, 서브스크립트 각각에 접근수준을 지정할 수 있음- open / public / internal / fileprivate / private 1. public : 공개 접근 수준 : 어디서든 쓰일 수 있음 : 주로..
[인스턴스 생성] - 초기화 과정 시 새로운 인스턴스를 사용할 준비를 하기 위하여 저장 프로퍼티의 초기값을 설정하는 등의 일을 함 : 이니셜라이저(이하 생성자)를 정의하여 초기화 과정을 직접 구현할 수 있음- 생성자는 새로운 인스턴스를 생성하는 특별한 메서드- init 키워드를 사용- 클래스, 구조체, 열거형의 구현부 또는 해당 타입의 익스텐션 구현부에 위치함123456789101112131415161718192021222324252627282930class Class{ var name: String init() { name = "Swift" } init(name: String) { self.name = name }} struct Struct{ var name: String init() { name = ..
[시작] - 프로퍼티 : 클래스, 구조체 또는 열거형 등에 관련된 값 - 메서드 : 특정 타입에 관련된 함수 - 프로퍼티의 종류 : 저장 프로퍼티 -> 인스턴스의 변수 또는 상수 -> 인스턴스 변수 : 연산 프로퍼티 -> 특정 연산을 실행한 결과값 : 타입 프로퍼티 -> 특정 타입에 사용되는 프로퍼티 -> 클래스 변수- 프로퍼티 감시자 : 프로퍼티 값의 변화에 따른 특정 액션을 실행 : 저장 프로퍼티에 적용, 상속받을 수 있음 [저장 프로퍼티 (Stored Properties)] - 클래스 또는 구조체의 인스턴스와 연관된 값을 저장하는 프로퍼티 1234567891011121314151617181920struct Point{ var x: Int = 0 var y: Int = 0}let firstPoint ..
[시작] - 구조체와 클래스는 프로그래머가 데이터를 용도에 맞게 묶어 표현하고자 할 때 사용함 - Swift에서 구조체의 인스턴스는 값 타입, 클래스의 인스턴스는 참조 타입- 소스 파일 하나에 여러 개의 구조체와 여러 개의 클래스를 정의하고 구현 가능- 중첩 타입의 정의 및 선언 가능 [구조체] 123456789101112struct MyInfo{ let name: String let age: Int let city: String func printInfo(){ print(name, age, city) } //구조체에 메서드 정의 가능} let myInfo: MyInfo = MyInfo(name: "Name", age: 13, city: "What")myInfo.printInfo()Colored by C..