[Swift] Swift 프로퍼티 String으로 출력하기

이은수, Steve·2024년 11월 21일
0

Swift Basic

목록 보기
29/30
post-thumbnail

개요

Java로 코딩을 하다보면 toString()을 사용하는 경우가 많다.

필자의 경우 GoF 디자인 패턴을 공부하고 있는데 서적의 예제코드가 전부 자바로 작성되어있어서 toString을 이용한 부분을 Swift로 변경하는데 어려움을 겪었다.

swift에서 toString같은 로직을 사용하게 도와주는게 CustomStringConvertible 프로토콜이다.

CustomStringConvertible이란? 타입의 프로퍼티를 원하는 형태의 String으로 변환해주는 것을 도와주는 프로토콜이다.

descrption과의 차이점

.description은 해당 프로퍼티의 이름 그 자체를 스위프트에 정의된 형태로 출력해준다.

struct Point{
    var posX: Int = 10
    var posY: Int = 20
}

var point: Point = Point()

print(point)

출력결과: Point(posX: 10, posY: 20)

만약 이 결과를 내가 원하느 형태로 출력하고 싶다면

미리 원하는 클래스나 구조체에 CustomStringConvertible을 구현하도록 하거나 extension을 이용해서 해당 타입이 CustomStringConvertible을 따르도록 구현해 주면 된다.

CustomStringConvertible의 사용법

struct Point{
    var posX: Int = 10
    var posY: Int = 20
}

extension Point: CustomStringConvertible{
    var description: String{
        return "X좌표는 \(posX), Y좌표는 \(posY)"
    }
}

var point: Point = Point()

print(point)

출력결과: X좌표는 10, Y좌표는 20

위 코드처럼 CustomStringConvertible을 적용하고 description프로퍼티를 정의해서 원하는 형태로 출력되도록 구현하면 된다.

CustomStringConvertible을 이용하서 사용자 정의 형태의 출력을 원하는 경우 사용자정의 클래스나 구조체의 경우에는 위 코드처럼 사용하면 된다.

하지만 Int나 Double, String같은 swift에 기본적으로 정의된 구조체나 클래스에 CustomStringConvertible을 사용하길 원한다면 아래의 extension을 이용하는 방법만 가능하다.

extension을 이용하는 방법


extension Int {
    var description: String {
        return "내 번호는 \(self)"
    }
}

print(10.description)

출력 결과: 내 번호는 10

이처럼 Int나 String같은 기본으로 정의된 구조체나 클래스들은 보통 이미 CustomStringConvertible를 따르면서 기본적으로 정의된 description이 존재하기 때문에 사용자 정의 형태로 변경하려면 extension을 이용해서 기존의 description을 재정의 해줘야 한다.

그래서 CustomStringConvertible를 그냥 적용해서는 사용이 불가능하다.

정리

  1. 사용자 정의 클래스/구조체의 경우 CustomStringConvertible를 구현하는것으로 사용가능
  2. Int/Double/String같은 Swift에 기본적으로 정의된 타입의 경우 extension을 이용해서 기존의 정의된 description을 재정의 하는것으로 커스텀이 가능하다.
profile
iOS Developer, 천 리 길도 한 걸음부터

0개의 댓글

관련 채용 정보