swift study 17. 중첩타입 (Nested Types)

jess·2022년 7월 25일
0

Swift

목록 보기
17/19
post-thumbnail

🍃 출처 : 앨런 swift 문법 마스터 스쿨 수업을 듣고 제가 이해한대로 정리해서 올리는 포스팅입니다.

📓 중첩타입 (Nested Types)

  • 타입의 내부에서 얼마든지 또 타입을 선언 가능
class Aclass {
    struct Bstruct {
        enum Cenum {
            case aCase   
            case bCase
        }
        var name: Cenum
    }
}

✏️ 중첩타입의 인스턴스를 생성하는 방법

let aClass: Aclass = Aclass()
                    // B가 대문자군 ➡️ 중첩타입이군 !! 
let bStruct: Aclass.Bstruct = Aclass.Bstruct(name: Cenum.aCase)
let cEnum: Aclass.Bstruct.Cenum = Aclass.Bstruct.Cenum.aCase
- 두 가지 계층 구조를 이룰 때,
  Bstruct는 Aclass와 명확한 포함관계 (범위를 명확히 한정 가능)
 1) 특정 타입과만 연관성이 있는 타입은 
      해당 특정 타입 내부에 선언하여 사용 범위를 한정
    (Bstruct 입장)
 2) 타입 간의 연관성을 명확히 구분하고, 내부 구조를 디테일하게 설계 가능
    (Aclass 입장)

✏️ 공식 문서의 중첩 타입 사용의 예시

✏️ 중첩 타입을 사용하는 API

✏️ 참고) self vs Self

✨ self

  • 의미 : 인스턴스를 가리킴
  • 설명 : 모든 인스턴스들이 암시적으로 생성하는 속성
  • 가리키는 대상 예시 : "hello", 7 ...
  • 사용목적과 예시 :
1) 인스턴스 내부에서 인스턴스의 속성을 더 명확하게 가리키기 위해 사용
self.name = Name
2) 값 타입 (구조체/열거형) 에서 인스턴스 자체의 값을 치환할 때 사용 가능
   (클래스에서는 사용 불가)
mutating func reset() {
    self = Calculator()
}
3) 타입속성/메서드에서 사용하면, 타입자체를 가리킴
static func doPrinting() {
    print("\(self.club)")
}
4) 타입 인스턴스를 가리킬 때, 타입 자체의 뒤에 붙여서 사용
   (타입자체를 외부에서)
let a: MyClass.Type = MyClass.self

✨ Self

  • 의미 : 타입을 가리킴
  • 설명 : Self가 특정한 타입을 가리키는 것은 아니고, 특정 타입 내부에서 사용하여
    해당 타입을 가리킴
  • 가리키는 대상 예시 : String, Int ...
  • 사용목적과 예시 :
    1) 특정 타입 내부에서 타입을 선언하는 위치에 사용
    extension Int {
       static let zero: Self = 0
    }
    2) 특정 타입 내부에서 타입속성/타입메서드를 지칭하는
      위치에서 타입 대신 사용
    Int.zero ➡️ Self.zero
    3) 프로토콜에서 채택하려는 타입을 지칭가능
     (범용적으로 사용 가능함을 의미)
    protocol Some {
       var name: Self { get set }
    }

0개의 댓글