티스토리 뷰

Swift/Swift 문법

[중첩 타입] 중첩타입 사용 이유와 예제

내일은개발천재🎵 2022. 12. 27. 16:59

중첩타입이란?

→ 특정 타입 내에서 정의되는 타입이다.
    (여기서 타입 : class, struct, enum)


중첩타입은 왜 사용해야할까?

class Aclass {
    struct Bstruct {
        enum Cenum {
            case aCase
            case bCase
        }
        var name: Cenum
    }
}
  1. 타입의 사용 범위를 한정짓기 위해서
    • Bstruct는 Aclass가 없다면, 의미가 없는 타입이다. 이때 중첩타입으로 표현하면, Aclass가 존재할 때에만 Bstruct가 존재한다는 것을 알 수 있다.
    • 만약, 중첩타입이 아닌 외부에 Bstruct가 선언되어 있다면, Bstruct의 의미가 없음에도 선언될 수 있다.
  2. 타입의 구조를 상세하게 설계하기 위해서
    • Aclass 내부에 Bstruct를 선언함으로써 더 깔끔한 코드를 작성할 수 있다.

공식문서에서의 중첩타입

struct BlackjackCard {

    // nested Suit enumeration
    enum Suit: Character {
        case spades = "♠", hearts = "♡", diamonds = "♢", clubs = "♣"
    }

    // nested Rank enumeration
    enum Rank: Int {
        case two = 2, three, four, five, six, seven, eight, nine, ten
        case jack, queen, king, ace
        struct Values {
            let first: Int, second: Int?
        }
        var values: Values {
            switch self {
            case .ace:
                return Values(first: 1, second: 11)
            case .jack, .queen, .king:
                return Values(first: 10, second: nil)
            default:
                return Values(first: self.rawValue, second: nil)
            }
        }
    }

    // BlackjackCard properties and methods
    let rank: Rank, suit: Suit
    var description: String {
        var output = "suit is \\(suit.rawValue),"
        output += " value is \\(rank.values.first)"
        if let second = rank.values.second {
            output += " or \\(second)"
        }
        return output
    }
}

let spadeCard = BlackjackCard(rank: .king, suit: .hearts)
let heartCard = BlackjackCard(rank: .queen, suit: .spades)
let club = BlackjackCard.Suit.clubs.rawValue // "♣"

타입의 구조

  • BlackjackCard
    • Suit
    • Rank
      • Values

→ BlackjackCard는 Suit, Rank 타입을 포함함
→ Rank는 Values라는 타입을 포함하고 있음

✏️ 코드가 훨씬 깔끔해진 모습을 볼 수 있다. 중첩코드를 사용하지 않았다면
        1. BlackjackCard struct의 구조가 훨씬 복잡했을 것이다.
        2. enum이 외부에 선언되었다면, 모양이나 숫자 등의 범위를 파악하기 어려울 것이다.

 


내가 사용한 중첩타입

 

닉네임 작성 텍스트 필드 재사용되도록 제작 by JIWON1923 · Pull Request #352 · DeveloperAcademy-POSTECH/MacC-T

관련 이슈 closes #350 구현/변경 사항 닉네임 뷰 텍스트 필드를 수정하였습니다. 재사용 뷰로 구현하였습니다. 스크린샷 2022-12-02.8.15.00.mov

github.com

텍스트 입력 값에 따라 보더의 색이나, 문구를 바꾸는 커스텀 텍스트 필드를 구성했을 때의 PR이다.
각 타입들이 외부에서 사용되지 않아서 내부에 선언했었는데 이걸 중첩타입이라고 부른다는 것을 알게 되었다!
생각보다 중첩타입을 사용할 경우가 많을 것 같다. (특히 앱 내에서 사용되는 String을 구조체로 정리할 때 많이 사용되지 않을까 싶다!)
다른 개발자들은 어떤 상황에서 중첩타입을 사용하는지 더 알아보면 좋을 것 같다. (코드가 훨씬 깔끔해지니까)

 

* 앨런님의 강의를 듣고 공부하며 정리한 내용입니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함