HIT해

[Swift 기초문법 - 71] CustomStringConvertible 프로토콜 본문

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 속성 구현 팁

  1. 간결하면서도 중요한 정보를 포함시키자
  2. 객체의 상태나 역할을 잘 설명해야한다.
  3. 여러 타입에서 구현을 한다면 일관된 형식을 지키자.

 

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를 통해 제공되는 것을 두고 사용할 일이 있을까.

알아만두도록 하자