Swift에서 문자열 사이에 변수(상수), 리터럴값 등을 표현하기 위해서 문자열 보간법(String Interpolation)을 사용했었습니다.
문자열(" ")안에 \(변수 등)
을 대입하여 사용하는 방식입니다.
✅ 문자열 보간법(String Interpolation)
var kim = "김철수" print("내 이름은 \(kim)") // 문자열 보간법 = \()
문자열 보간법 \(변수 등)
은 미리 정해놓은 문자열(String) 형태로 반환하는 개념입니다.
해당 개념은 인스턴스를 문자열 보간법으로 출력해보면 쉽게 이해할 수 있습니다.
print()
함수를 통해 인스턴스와 문자열 보간법으로 포장된 인스턴스를 출력하면 같은 형태의 출력값을 확인할 수 있지만, 데이터의 상세 정보를 출력하는dump()
함수를 통해 인스턴스와 문자열 보간법으로 포장된 인스턴스 출력하면 다른 형태의 출력값을 확인할 수 있습니다. 이는 문자열 보간법\(변수 등)
으로 출력한 데이터는 문자열(String)이기 때문입니다.✅ 문자열 보간법의 출력
struct Man{ var name: String var age: Int } var kim = Man(name: "김철수", age: 5) print(kim) // Man(name: "김철수", age: 5) print("\(kim)") // Man(name: "김철수", age: 5) dump(kim) // ▿ __lldb_expr_110.Man // - name: "김철수" // - age: 5 dump("\(kim)") // - "Man(name: \"김철수\", age: 5)"
애플에서 미리 지정해놓은 문자열(String) 형태를 개발자가 원하는 형태로 변환할 수 있습니다.
✅ Swift5 이전의 문자열 보간법 형태 변경
출력 형태를 변경하고 싶은 타입을 확장하는 방식입니다.
확장 시
CustomStringConvertible
프로토콜을 채택하여description
읽기 계산속성을 구현하면 원하는 형태로 변환할 수 있습니다.struct Man{ var name: String var age: Int } extension Man: CustomStringConvertible{ var description: String { return "저의 이름은 \(name)이고, 나이는 \(age)입니다." } } var kim = Man(name: "김철수", age: 5) print("\(kim)")
✅ Swift5 이후의 문자열 보간법 형태 변경
String 구조체 내부에 선언되어있는
StringInterpolation
을 확장하여appendInterpolation()
메서드를 구현하면 원하는 형태로 변환할 수 있습니다.struct Man{ var name: String var age: Int } extension String.StringInterpolation{ mutating func appendInterpolation(_ value: Man) { appendInterpolation("저의 이름은 \(value.name), 나이는 \(value.age)입니다.") } } var kim = Man(name: "김철수", age: 5) print("\(kim)") /* 출력 결과 저의 이름은 김철수, 나이는 5입니다. */