Swift

· Swift
익스텐션(Extension)은 스위프트의 강력한 기능 중 하나로, 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능이다. 기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입의 기능을 확장할 수도 있다. 익스텐션으로 추가할 수 있는 기능은 다음과 같다. (기존에 존재하는 기능의 재정의는 불가) 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메서드 / 인스턴스 메서드 이니셜라이저 서브스크립트 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 익스텐션 정의 문법 extension 확장할 타입 이름 { 타입에 추가될 새로운 기능 구현 } 또한 익스텐션은 기존에 존재하는 타입이 추가적으로 다른 프로토콜을 채택할 수 있도..
· Swift
프로토콜(Protocol)은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의한다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted)함으로써 특정 기능을 실행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 '프로토콜을 준수한다(Conform)'고 표현한다. 프로토콜의 요구사항을 충족시키기 위해서는 프로토콜이 제시하는 기능을 모두 구현해주어야 한다. 즉, 프로토콜은 정의와 제시만 할 뿐이지 스스로 기능을 구현하지는 않는다. 특정 타입의 인스턴스를 만들어서 사용하려는 사람 입장에서는 프로토콜을 통해 해당 타입이 수행할 수 있는 기능들에 대해 명확하게 알 수 있고, 컴파일러 또한 이를 쉽게 파악할 수 있도록 해준다...
· Swift
assert와 guard 애플리케이션이 동작 중에 생성하는 다양한 결과값을 동적으로 확인하고, 빠르고 안전하게 처리할 수 있도록 해준다. /* Assertion */ var someInt: Int = 0 assert(someInt == 0, "someInt != 0") // 조건이 맞기 때문에 지나침 someInt = 1 //assert(someInt == 0) // 동작 중지, 검증 실패 //assert(someInt == 0, "someInt != 0") // 메세지 지정한 경우 func functionWithAssert(age: Int?) { assert(age != nil, "age == nil") assert((age! >= 0) && (age! = 0 else { // 기술한 조건과 맞지 않으..
· Swift
스위프트의 타입캐스팅은 인스턴스의 타입을 확인하는 용도 클래스의 인스턴스를 부모/자식 클래스의 타입으로 사용할 수 있는지 확인하는 용도 로 사용된다. 키워드로는 is, as 를 사용한다. 기존의 다른 언어들에서는 다음과 같은 식으로 타입캐스팅을 해준다. let someInt: Int = 100 let someDouble: Double = Double(someInt) 하지만 스위프트에서 이렇게 하는 것은 타입캐스팅이 아니고, 그냥 인스턴스를 하나 더 생성하게 되는 것이다. 실습 코드 /* -------------------- 타입캐스팅을 위한 클래스 정의 -------------------- */ class Person { var name: String = "" func breath() { print("숨..
· Swift
[ 옵셔널 체이닝 ] 옵셔널 체이닝은 옵셔널 요소 내부의 프로퍼티로 또다시 옵셔널이 연속적으로 연결되는 경우 연쇄적으로 프로퍼티를 불러올 수 있도록 해 준다. 아래와 같이 사람과 아파트를 의미하는 2개의 클래스를 정의하고, 2명의 사람과 1개의 아파트 인스턴스를 생성해주었다. class Person { var name: String var job: String? var home: Apartment? // 집 (옵셔널) init(name: String) { self.name = name } } class Apartment { var buildingNumber: String var roomNumber: String var `guard`: Person? // 경비원 (옵셔널) var owner: Person?..
· Swift
스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 한다. 따라서 저장 프로퍼티를 정의할때는 무조건 기본값을 할당해주어야 한다. 기본값 할당된 인스턴스 생성 이후, 프로퍼티 값 할당해주는 경우 class PersonA { // 모든 저장 프로퍼티에 기본값 할당 var name: String = "unknown" var age: Int = 0 var nickName: String = "nick" } let jason: PersonA = PersonA() jason.name = "jason" jason.age = 30 jason.nickName = "j" 하지만 위와 같이 기본값이 정해져있으면, 무조건 기본값으로 기본값 초기화를 한 번 거친 다음 프로퍼티를 할당해주어야 하..
· Swift
프로퍼티는 크게 다음과 같이 종류를 나눠줄 수 있다. 저장 프로퍼티 (stored property) 연산 프로퍼티 (computed property) 타입 프로퍼티 (type property) 프로퍼티 예시 코드 // 프로퍼티 struct Student { // 인스턴스 저장 프로퍼티 var name: String = "" var `class`: String = "Swift" var koreanAge: Int = 0 // 인스턴스 연산 프로퍼티 var westernAge: Int { get { // 값 꺼내오기 return koreanAge - 1 } set(inputValue) { // 값 저장 koreanAge = inputValue + 1 } } // 타입 저장 프로퍼티 static var type..
· Swift
클로저는 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것을 말한다. (함수는 클로저의 한 형태로, 이름이 있는 클로저라고 보면 된다.) 변수, 상수 등으로 저장이 가능하고, 전달인자로도 전달이 가능하다. 클로저 정의 { (매개변수 목록) -> 반환타입 in 실행 코드 } 클로저 사용 예시 클로저는 주로 함수의 전달 인자로 많이 사용된다. (콜백 함수 등) 함수 전달인자로 클로저 사용 예시 클로저 고급 클로저를 더 편리하고 간결하게 사용하기 위해서 아래와 같은 방법들을 사용해 줄 수 있다. 후행 클로저 반환타입 생략 단축 인자이름 암시적 반환 표현 [ 후행 클로저 ] 클로저가 함수의 마지막 전달인자라면 마지막 매개변수 이름을 생략한 후, 함수 소괄호 외부에 클로저를 구현할 수 있다. 괄호 위치가 헷갈..
· Swift
[ 클래스 - Class ] 전통적인 OOP 관점에서의 클래스 단일상속 (인스턴스 / 타입) 메서드 (인스턴스 / 타입) 프로퍼티 참조 타입 Apple 프레임워크의 대부분의 큰 뼈대는 모두 클래스로 구성되어 있다. [ 구조체 - Struct ] C 언어 등의 구조체보다 다양한 기능 상속 불가 (인스턴스 / 타입) 메서드 (인스턴스 / 타입) 프로퍼티 값 타입 Swift 대부분의 큰 뼈대는 모두 구조체로 구성되어 있다. [ 열거형 - Enum ] 다른 언어의 열거형과는 많이 다름 상속 불가 (인스턴스 / 타입) 메서드 (인스턴스 / 타입) 프로퍼티 값 타입 유사한 종류의 여러 값을 유의미한 이름으로 한 곳에 모아 정의한 타입 ex) 요일, 월 등 열거형 자체가 하나의 데이터 타입이고, 열거형의 case 하..
· Swift
Swift의 열거형은 다른 언어들의 열거형에 비해서 강력한 기능을 갖고 있다. [ 열거형 - enum ] 열거형은 연관된 항목들을 묶어서 표현할 수 있는 타입이다. 열거형은 배열, 딕셔너리 등의 타입과 다르게 프로그래머가 정의해준 항목 값 외에는 추가/수정이 불가하다. 때문에 열거형은 아래 같은 경우에 주로 사용해준다. 제한된 선택지를 주고 싶을 때 정해진 값 외에는 입력받고 싶지 않을 때 예상된 입력 값이 한정되어 있을 때 열거형의 이름은 타입이므로 대문자 카멜케이스를 사용하여 이름을 정의해준다. 스위프트의 열거형은 각각의 case가 고유의 값으로 취급된다. enum 이름 { case 이름1 case 이름2 case 이름3, 이름4, 이름5 ... } // 열거형 예시 enum Weekday { cas..
kybeen
'Swift' 카테고리의 글 목록