[시작] - 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있음 - 타입만 안다면 해당 타입의 기능을 확장할 수 있음- 익스텐션이 타입에 추가할 수 있는 기능들 : 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 : 타입 메서드 / 인스턴스 메서드 : 이니셜라이저 : 서브스크립트 : 중첩 타입 : 특정 프로토콜을 준수할 수 있도록 기능 추가- 기존에 존재하는 기능을 재정의할 수는 없음- 외부에서 가져온 타입에 내가 원하는 기능을 추가하고자 할 때 사용 [상속과 익스텐션 비교] 상속 익스텐션 확장 수직 확장 (특정 타입을 물려받아 하나의 새로운 타입을 정의하고 추가 기능을 구현) 수평 확장 (기존의 타입에 기능을 추가) 사용 클래스 모든 타입 재졍의 가능 불가능 [문법] - 일반 123..
[프로토콜이란] - 프로토콜 Protocol : 특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진 - 구조체, 클래스, 열거형은 프로토콜을 채택하여 특정 기능을 실행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있음 : 해당 프로토콜을 준수Conform함- 프로토콜은 정의를 하고 제시를 할 뿐 스스로 기능을 구현하지 않음- Java의 인터페이스와 비슷한 개념? [프로토콜 정의] - protocol 키워드를 사용 123protocol 프로토콜 이름{ 프로토콜 정의}cs - 프로토콜을 채택하려면 타입 이름 뒤에 콜론을 붙여준 후 채택할 프로토콜 이름을 쉼표로 구분하여 명시해줌 - 클래스가 다른 클래스를 상속받는다면 상속받을 클래스 이름 다음부터 채택할 프로토콜을 나열해줌 [프로토콜 요..
[시작] - Swift는 데이터 타입 안전을 위하여 서로 다른 타입끼리의 값 교환을 엄격하게 제한함 - 암시적 데이터 타입 변환을 지원하지 않음 : C언어에서의 (int)10.4f와 Swift에서의 Int(10.4)는 서로 같지 않음 [기존 언어의 타입 변환과 스위프트의 타입 변환] - Swift에서는 기존 값을 전달인자로 받은 생성자를 통해 새로운 타입의 인스턴스를 생성함 - 이를 타입 변환 또는 타입캐스팅이라고 칭하지 않음- 생성자를 통해 새로운 인스턴스를 생성하는 과정일 뿐임 [스위프트 타입캐스팅] - Swift의 타입캐스팅은 인스턴스의 타입을 확인하거나 자신을 다른 타입의 인스턴스인 것처럼 가장할 수 있는 방법으로 사용 가능함 - is와 as 연산자로 구현 - 자식 클래스는 부모 클래스인 것처럼 ..
[시작] - 클래스는 메서드나 프로퍼티 등을 다른 클래스로부터 상속받을 수 있음 : 자식 클래스 : 어떤 클래스로부터 상속을 받은 클래스 : 부모 클래스 : 자식 클래스에게 자신의 특성을 물려준 클래스- 자식 클래스는 부모 클래스의 메서드, 프로퍼티, 서브스크립트를 사용할 수 있음- 자식 클래스는 부모 클래스로부터 물려받은 것들을 재정의할 수 있음- 기반 클래스 : 다른 클래스로부터 상속을 받지 않은 클래스 [클래스 상속] 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 : 공개 접근 수준 : 어디서든 쓰일 수 있음 : 주로..