중첩 타입(nested types)은 기존 타입인 클래스, 구조체 또는 열거형 내부에 새로운 구조체, 클래스 및 열거형을 선언할 수 있게 해줍니다. 이는 코드를 더 잘 구조화하고 구현 세부 사항을 숨기며 타입이 부모와만 관련이 있다는 것을 명시적으로 나타낼 수 있게 합니다.
예시:
struct Chessboard { enum PieceType { case king, queen, rook, bishop, knight, pawn } struct Square { let file: Character let rank: Int } } let kingType = Chessboard.PieceType.king let square = Chessboard.Square(file: "E", rank: 4)
중첩 타입은 그들의 네임스페이스 밖에서는 직접 접근할 수 없어 잘못된 사용의 위험을 줄이고 코드를 더 읽기 쉽게 만듭니다.
중첩 클래스나 구조체를 그들의 네임스페이스 밖에서 상속할 수 있습니까? 중첩 타입에 접근하기 위해 사용하는 구문은 무엇입니까?
답변:
class Game { class Level {} } class AdvancedLevel: Game.Level {} // 허용됨
ParentType.NestedType 형식의 기록이 필요합니다.이야기
프로젝트의 비즈니스 논리를 재설계하는 과정에서 타입들이 너무 깊게 중첩되었고, enum 내부에 구조체가 들어가게 되었습니다. 그 결과 내부 타입에 접근하는 긴 구문이 발생하여 팀의 새로운 구성원들을 혼란스럽게 하고 유닛 테스트를 어렵게 했습니다.
이야기
프로그래머가 클래스 내 상태를 위한 중첩 열거형을 선언했지만, 클래스 밖에서 이름을 한정 짓지 않고 사용하려고 했습니다. 이것은 컴파일 오류를 발생시켰고 프로젝트 전체에서 접근 방식을 수정해야 했습니다.
이야기
프로젝트 확장 중 다른 개발자가 내부 중첩 클래스에서 클래스를 상속하려 했지만, 개인 속성에 대한 접근 오류가 발생했습니다. 이는 내부 구성원에 대한 접근 메커니즘이 부모 네임스페이스 밖에서 확장될 수 없기 때문입니다.