본문 바로가기
개발/iOS

swift 문법 기초 6/7

by 마자용 2021. 8. 30.
코드 출처 - iOS 프로그래밍을 위한 스위프트 기초

 

 

  • 인스턴스 생성과 소멸 (Instance init / deinit)
    • Initializer / Deinitializer
      • 인스턴스 초기화 후에는 프로퍼티에 기본값을 할당해야 한다.
        • 프로퍼티에 미리 값을 할당해두면 초기화와 동시에 기본값을 가질 수 있다.
        • init 키워드를 사용한다.
    • 초기값이 굳이 필요하지 않은 경우에는 Optional을 붙여준다.
    • 만들어져 있던 이니셜라이저를 사용하려면 → self
      • class PersonC {
            var name: String
            var age: Int
            var nickName: String?   // 초기값이 굳이 필요하지 않다면 옵셔널 사용
            
            init(name: String, age: Int, nickName: String) {
                self.name = name
                self.age = age
                self.nickName = nickName
            }
    • 자신의 이니셜라이저를 사용(호출)하려면 → convenience init
      • convenience init(name: Stirng, age: Int, nickName: String) {
            init(name: name, age: age)
            self.nickName = nickName
        }
    • 암시적 추출 옵셔널
      • 인스턴스 사용에 꼭 필요하지만 초기값을 할당하지 않고자 할 때 사용
        • 전달되기 어려운 값인 경우 이름만 받아두고 나중에 사용하는 것과 같다.
      • class Puppy {
            var name: String
            var owner: PersonC!
            
            init(name: String) {
                self.name = name
            }
            
            func goOut() {
                print("\(name)가 주인 \(owner.name)와 산책을 합니다")
            }
        }
    • 실패 가능한 이니셜라이저
      • 전달될 값들이 정상범주를 넘어가거나, 원하는 값의 범위가 아닐 때
      • 실패하면 nil을 반환한다.
        • 반환 타입이 Optional이다.
      • class PersonD {
            var name: String
            var age: Int
            var nickName: String?
            
            init?(name: String, age: Int) {
                if(0...120).contains(age) == false {
                    return nil
                }
                
                if name.count == 0 {
                    return nil
                }
                
                self.name = name
                self.age = age
            }
        }
    • Deinitializer
      • 클래스의 인스턴스가 메모리에서 해제되는 시점에 자동으로 호출된다.
      • 인스턴스가 해야할 일을 구현할 수 있다.
      • class 타입에만 구현 가능하다.
  • 옵셔널 체이닝과 nil 병합
    • Optional chaining & nil-coalescing Operator
    • 구조체, 클래스 등을 선언해 줄 때 타입 내에 또 다른 인스턴스가 들어오거나, 인스턴스끼리 연결되어 프로퍼티를 계속 타고 들어가야 하는 경우
      •  ex) 프로퍼티 자체가 옵셔널 → nil인지 확인해봐야 함
        • 옵셔널 체이닝을 사용해 원하는 값을 한 번에 찾을 수 있다.
        • 옵셔널 체이닝 = nil 체크를 편하게 하는 방법
    • 중간에 하나라도 비어있다 (= nil값이다) → 그 전 단계에서 멈춤 → nil 반환
    • 기본값을 쓰고 싶다면 → Optional ?? Value 사용
      • 앞의 값이 nil이라면 뒤의 Value를 반환
    •  코드
  • 타입 캐스팅 type casting
    • type casting = 형 변환 
    • 역할
      • 인스턴스의 타입 확인
      • 클래스의 인스턴스를 자신의 조상이나 후손 클래스의 타입으로 사용할 수 있는지 확인
    • as, is 키워드 사용
      • as
        • 다운 캐스팅
        • 부모 클래스의 자식 클래스의 인스턴스를 사용할 수 있도록 타입 정보를 컴파일러에 알려주는 것
          • as?
            • 조건부 다운 캐스팅
            • 실패의 가능성 내포 → nil이 반환될 수 있음 → 결과값을 옵셔널 타입으로 지정
          • as!
            • 강제 다운 캐스팅
              • 위험요소가 있음
            • 반환 타입이 일반 타입임 → 활용 가능성이 많음
              • ex) 함수로 전달 → switch로 확인
      • is
        • 업 캐스팅
        • 타입을 확인함.
          • 결과 → true, false로 나뉨
    • 코드

'개발 > iOS' 카테고리의 다른 글

[iOS/Swift] 오늘 배운 것 정리 #1  (0) 2021.11.19
swift 문법 기초 7/7  (0) 2021.09.01
틀린문제 (스위프트 클로저 퀴즈)  (0) 2021.08.29
swift 문법 기초 5/7  (0) 2021.08.28
[Swift] 함수형 타입 Functional Type  (0) 2021.08.28

댓글