Swift/Swift 기초문법
[Swift 기초문법 - 71] CustomStringConvertible 프로토콜
힛해
2024. 8. 26. 01:45
728x90
CustomStringConvertible이란?
Swift 표준 라이브러리에서 제공하는 프로토콜로, 객체를 사용자 정의 문자열로 표현할 수 있게 해준다.
이 프로토콜을 채택한 타입은 description이라는 문자열 속성을 구현하여 해당 객체의 맞춤형 설명을 제공한다.
CustomStringConvertible의 기본 개념
CustomStringConvertible은 하나의 요구사항만 가지고 이싿.
description이라는 읽기 전용 속성을 구현하는 것이다. 이 속성은 객체를 설명하는 문자열을 반환합니다.
protocol CustomStringConvertible {
var description: String { get }
}
CustomStringConvertible 사용 예제
struct Person: CustomStringConvertible {
var name: String
var age: Int
// description 속성을 구현하여 객체의 설명을 정의합니다.
var description: String {
return "Person(name: \(name), age: \(age))"
}
}
let person = Person(name: "Alice", age: 30)
print(person) // 출력: Person(name: Alice, age: 30)
print 함수는 자동으로 이 description 속성을 사용하여 객체를 문자열로 출력한다.
CustomStringConvertible의 이점
- 디버깅
- 로그 기록 : 객체의 상태를 로그에 남길 때 유용하다
- 유저 친화적 : 사용자에게 객체의 상태를 명확히 전달할 수 있다.
description 속성 구현 팁
- 간결하면서도 중요한 정보를 포함시키자
- 객체의 상태나 역할을 잘 설명해야한다.
- 여러 타입에서 구현을 한다면 일관된 형식을 지키자.
CustomDebugStringConvertible
CustomStringConvertible과 비슷한 프로토콜로 print가 아닌 debugPrint를 했을때 출력이 된다.
두 프로토콜 모두 채택할 수 있으며 일반출력과 병행해서 만들 수 있다.
struct Person: CustomStringConvertible, CustomDebugStringConvertible {
var name: String
var age: Int
var description: String {
return "Person(name: \(name), age: \(age))"
}
var debugDescription: String {
return "Person(name: \(name), age: \(age), memoryAddress: \(Unmanaged.passUnretained(self as AnyObject).toOpaque()))"
}
}
let person = Person(name: "Alice", age: 30)
print(person) // 출력: Person(name: Alice, age: 30)
debugPrint(person) // 디버깅 출력: Person(name: Alice, age: 30, memoryAddress: 0x600003d24f00)
정리하자면
객체의 상태를 확인하고 추적하는데에 용이하다.
그러나 TCA를 통해 제공되는 것을 두고 사용할 일이 있을까.
알아만두도록 하자