ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] CustomStringConvertible
    Swift 2022. 1. 10. 21:06

    Protocol

    CustomStringConvertible

    ์‚ฌ์šฉ์ž ์ •์˜ํ™”๋œ ํ…์ŠคํŠธ ํ‘œํ˜„์ด ์žˆ๋Š” ํƒ€์ž….

    Declaration

    protocol CustomStringConvertible

    Overview

    CustomStringConvertible ํ”„๋กœํ† ์ฝœ์„ ์ฑ„์šฉํ•˜๋Š” ํƒ€์ž…์€ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ณ ์œ ํ•œ ํ‘œํ˜„์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. String(describing:) ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ๋ชจ๋“  ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์„ ํ˜ธ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ „๋‹ฌ๋œ ์ธ์Šคํ„ด์Šค๊ฐ€ CustomStringConvertible์„ ์ค€์ˆ˜ํ•˜๋Š” ๊ฒฝ์šฐ, String(describing:) ์ด๋‹ˆ์…œ๋ผ์ด์ € ๊ทธ๋ฆฌ๊ณ  print(_:) ํ•จ์ˆ˜๊ฐ€ ์ธ์Šคํ„ด์Šค์˜ ์‚ฌ์šฉ์ž ์ง€์ • ์†์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค. ํƒ€์ž…์˜ description ์†์„ฑ์— ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ CustomStringConvertible์„ ์ผ๋ฐ˜ ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. 

    Conforming to the CustomStringConvertible Protocol

    description ์†์„ฑ์„ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ง€์ • ํƒ€์ž…์— CustomStringConvertible์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์ด Point ๊ตฌ์กฐ์ฒด๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•œ๋‹ค.

    struct Point {
        let x: Int, y: Int
    }
    
    let p = Point(x: 21, y: 30)
    print(p)
    // Prints "Point(x: 21, y: 30)"

    ๋งŒ์•ฝ Point ๊ตฌ์กฐ์ฒด์— description ์†์„ฑ์„ ๊ตฌํ˜„ํ•˜๊ณ  CustomStringConvertible์„ ์ฑ„์šฉํ•œ๋‹ค๋ฉด, Point ํƒ€์ž…์€ ๊ณ ์œ ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ํ‘œํ˜„์„ ์ œ๊ณตํ•œ๋‹ค.

    extension Point: CustomStringConvertible {
        var description: String {
            return "(\(x), \(y))"
        }
    }
    
    print(p)
    // Prints "(21, 30)"

    ์˜ˆ์ œ

    enum Shape: Character {
        case spade = "♠"
        case diamond = "โ—†"
        case heart = "♥"
        case club = "♣"
    }
    
    let heart = Shape.heart
    print(heart) // heart

    ์œ„์˜ ์ฝ”๋“œ๋Š” Shape๋ž€ ์—ด๊ฑฐํ˜•์„ ์ƒ์„ฑํ•˜๊ณ , heart๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ํ•œ ๊ฒƒ์ด๋‹ค.

    enum Shape: Character, CustomStringConvertible {
        case spade = "♠"
        case diamond = "โ—†"
        case heart = "♥"
        case club = "♣"
    
        var description: String {
            return String(rawValue)
        }
    }

    ์œ„์˜ Shape ์—ด๊ฑฐํ˜•์€ rawValue ํƒ€์ž…์ด Character์ด๊ณ , CustomStringConvertible ํ”„๋กœํ† ์ฝœ์„ ์ฑ„์šฉํ•˜๊ณ  ์žˆ๋‹ค.

    CustomStringConvertible์„ ์ฑ„์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— description ์†์„ฑ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    let heart = Shape.heart
    print(heart) // ♥

     

    https://developer.apple.com/documentation/swift/customstringconvertible

    ๋Œ“๊ธ€

Designed by Tistory.