본문 바로가기
Apple/Apple_Swift

indirect 키워드

by LeviiOS 2024. 7. 28.
반응형

Swift 언어에서 indirect 키워드란?

 

indirect 키워드는 특정한 경우에 매우 유용하게 사용됩니다. 이번 글에서는 indirect 키워드가 무엇인지, 왜 사용하는지, 그리고 예시 코드를 통해 이해를 돕고자 합니다.

 

indirect 키워드란?

 

indirect 키워드는 Swift에서 열거형(enum)이나 구조체(struct) 내부에서 자기 참조(self-referential)를 할 수 있도록 도와주는 키워드입니다. Swift의 열거형은 기본적으로 값 타입(value type)입니다. 따라서 값 타입의 인스턴스가 자기 자신을 참조하는 경우 무한 재귀에 빠질 위험이 있습니다. 이를 해결하기 위해 indirect 키워드를 사용하여 간접 참조(indirect reference)를 허용합니다.

 

왜 사용하는가?

 

indirect 키워드는 주로 재귀적인 데이터 구조를 정의할 때 사용됩니다. 예를 들어, 트리나 연결 리스트와 같은 자료 구조는 자기 자신을 참조해야 할 때가 많습니다. 이러한 경우 indirect 키워드를 사용하지 않으면 컴파일 오류가 발생할 수 있습니다. 간단히 말해, 이 키워드는 재귀적인 데이터 구조를 안전하게 정의할 수 있게 해줍니다.

 

다음은 재귀적인 열거형을 정의할 때 indirect 키워드를 사용하는 예시입니다.

// indirect 키워드를 사용하여 재귀적인 열거형 정의
indirect enum BinaryTree {
    case empty
    case node(value: Int, left: BinaryTree, right: BinaryTree)
}

// 트리의 노드 생성 예시
let leafNode = BinaryTree.node(value: 5, left: .empty, right: .empty)
let rootNode = BinaryTree.node(value: 10, left: leafNode, right: .empty)

// 트리의 값 출력 함수
func printTree(_ tree: BinaryTree) {
    switch tree {
    case .empty:
        print("empty")
    case let .node(value, left, right):
        print("value: \(value)")
        print("left: ", terminator: "")
        printTree(left)
        print("right: ", terminator: "")
        printTree(right)
    }
}

// 트리 출력
printTree(rootNode)

위 코드에서 BinaryTree 열거형은 재귀적으로 정의되어 있으며, 각 노드는 왼쪽 및 오른쪽 서브트리를 참조할 수 있습니다. indirect 키워드를 사용하여 이러한 참조가 가능하게 됩니다.

 

감사합니다. :)

반응형