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 키워드를 사용하여 이러한 참조가 가능하게 됩니다.
감사합니다. :)
'Apple > Apple_Swift' 카테고리의 다른 글
상속에 대한 기본 개념과 기능 누락 방지 방법 (0) | 2024.08.07 |
---|---|
Swift에서의 Protocol, some, any 키워드: 자동차 예제로 쉽게 이해하기 (0) | 2024.07.29 |
@resultBuilder (0) | 2024.06.26 |
Swift Package Manager: Package.swift 간단 구조 정리 (0) | 2024.03.26 |
Swift5.9 Macro(매크로) 만들어보기 (2) | 2024.03.18 |