[Swift] 26. 익스텐션 (extension)
2020. 12. 3. 19:56
iOS/Swift
익스텐션 (extension) 익스텐션은 스위프트의 강력한 기능 중 하나다. 익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능이다. 기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입의 기능을 확장할 수 있다. 스위프트의 익스텐션이 타입에 추가할 수 있는 기능 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메서드 / 인스턴스 메서드 이니셜라이저 서브스크립트 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 ‼️ 익스텐션은 타입에 새로운 기능을 추가할 수는 있지만, 기존에 존재하는 기능을 재정의할 수는 없다. 클래스의 상속과 익스텐션의 비교 클래스의 상속 클래스 타입에서만 가능하다. 특정 타입을 물려받..
[Swift] 23. assert / guard
2020. 11. 29. 20:08
iOS/Swift
Assertion assert(_:_file:line:) 함수를 사용한다. assert 함수는 디버깅 모드에서만 동작한다. 배포하는 애플리케이션에서는 제외된다. 예상했던 조건의 검증을 위하여 사용한다. 다음과 같이 사용해볼 수 있다. var someInt: Int = 0 assert(someInt == 0, "someInt != 0") // 확인을 위해 someInt 의 값을 1로 변경 someInt = 1 assert(someInt == 0, "someInt != 0") ========== 출력 결과 ========== Assertion failed: someInt != 0: file __lldb_expr_33/study23.playground, line 8 검증에 실패했고 실패한 메시지가 나타나고 f..
[Swift] 21. 옵셔널 체이닝과 nil 병합
2020. 11. 18. 19:18
iOS/Swift
이전에 옵셔널 체이닝에 대해서 다루었던 것이 기억난다. 옵셔널 체이닝은 옵셔널 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하게 활용할 수 있다. 매번 nil 을 확인하지 않아도 최종적으로 원하는 값이 있는지 없는지 확인할 수 있다. 이렇게 말하면 이해가 잘 되지 않으니 예제를 통해 알아봐야겠다. 옵셔널 체이닝 | Optional Chaining 우선, 두 개의 클래스를 만들었다. 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..
[Swift] 20. 인스턴스 생성 및 소멸 (init / deinit)
2020. 11. 11. 18:16
iOS/Swift
인스턴스를 생성하는 이니셜라이저와 인스턴스가 소멸될 때 호출되는 디이니셜라이저에 대해서 공부하려고 한다. 클래스나 구조체 등을 만들때 프로퍼티의 값을 할당해주었던 것을 생각해보자. 저장 프로퍼티에 값을 할당하지 않으면 에러가 발생한다. 그래서 인스턴스를 생성함과 동시에 초기값을 따로 할당해서 사용했다. 그런데 초기화와 동시에 프로퍼티의 값을 할당하고 싶을 때 이니셜라이저를 사용할 수 있다. 프로퍼티 초기값 스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어야 한다. 프로퍼티에 미리 기본 값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 된다. 다음 예를 통해 확인할 수 있다. class PersonPropertyInit { // 모든 저장 프로퍼티에 기본값 할당 va..
[Swift] 19. 상속(Inheritance)
2020. 11. 9. 20:20
iOS/Swift
스위프트 상속(Inheritance) 상속은 클래스, 프로토콜 등에서 가능하다. 열거형, 구조체는 상속이 불가능하다. 스위프트의 클래스는 단일 상속으로, 다중 상속을 지원하지 않는다. 프로토콜의 경우 여러개를 채택할 수 있다. 상속하는 클래스는 하위클래스(subclass), 상속받은 클래스는 슈퍼클래스(superclass) 로 알려져있다. 이번에는 클래스의 상속에 대해서 공부할 예정이다. 클래스에서 상속은 다음과 같이 사용할 수 있다. class 이름: 상속받을 클래스 이름 { 구현부 } 클래스를 정의한 후 변수나 상수에 타입을 정해줄 때 처럼 상속을 해줄 수 있다. 예를 들어, 상속할 상위 클래스를 만들어 보았다. class Person { var name: String = "" func selfInt..
[Swift] 18. 프로퍼티 (Property) - 추가적인 보완 필요
2020. 11. 5. 21:06
iOS/Swift
프로퍼티(Property) 지난 번에도 프로퍼티에 대해서 간단하게 이해하고 넘어간 것 같은데 이번에는 자세하게 공부해보려고 한다. 프로퍼티는 직역해보면 재산, 소유물 이라는 의미로 번역할 수 있다. 보통은 속성이란 단어로 대체하는데 여기에서 말하는 프로퍼티는 클래스, 구조체, 열거형 등의 객체 인스턴스가 그 내부에 가지고 있는 객체의 상태에 관한 정보를 말한다. 즉, 프로퍼티는 속성 값에 접근하는 방법을 말한다. 따라서, 프로퍼티는 다음과 같이 사용할 수 있다. 프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있다. 열거형 내부에는 연산 프로퍼티만 구현할 수 있다. 연산 프로퍼티는 var 로만 선언할 수 있다. 연산 프로퍼티를 읽기 전용으로는 구현할 수 있지만, 쓰기 전용으로는 구현할 수 없다. 읽..
[Swift] 16. 클로저(closure) 기본
2020. 11. 2. 20:36
iOS/Swift
클로저 | Closures 클로저는 실행 가능한 코드 블럭 {} 이다. 오브젝트-C 의 블럭과 다른 언어의 람다와 유사하다고 한다. 함수와 다르게 이름 정의는 필요하지 않지만, 매개변수 전달과 반환 값이 존재할 수 없다는 점이 동일하다. 함수는 이름이 있는 클로저 다. 일급 객체로 전달인자, 변수, 상수 등에 저장 및 전달이 가능하다. 참조 타입 이다. 그럼 클로저는 어떻게 사용하는가? { (매개변수 목록) -> 반환타입 in 실행 코드 } 실행 가능한 코드 블럭이라고 했기 때문에 { } 중괄호로 감싸져있다. 괄호를 이용해 파라미터를 정의하고 -> 을 이용해 반환 타입을 명시한다. "in" 키워드를 이용해 실행 코드와 분리한다. func sumFunction(a: Int, b: Int) -> Int { ..
[Swift] 15. 열거형(enum) 기본
2020. 10. 26. 17:36
iOS/Swift
스위프트에서의 열거형은 다른 언어의 열거형과 많이 다르다고 한다. 열거형은 강력한 기능을 가지고 있어 잘 알아두고 사용하면 좋다고 한다. - 유사한 종류의 여러 값을 한 곳에 모아서 정의한 것이다. 예) 요일, 월, 계절 등 - enum 자체가 하나의 데이터 타입으로, 대문자 카멜케이스를 사용하여 이름을 정의한다. - 각 case 는 소문자 카멜케이스로 정의한다. enum BootCamp { // 대문자 카멜케이스 case iosCamp // 소문자 카멜케이스 case androidCamp case webCamp } - 각 case 는 그 자체가 고유의 값입니다. (각 case에 자동으로 정수값이 할당되지 않음) - 각 case 는 한 줄에 개별로도, 한 줄에는 여러개도 정의할 수 있습니다. eum 이름..