애플사이다의 iOS 개발 일지

[Swift] print 함수로 줄바꿈 없이 출력, 문자열 사이 구분하기 - 콘솔 로그 및 print 함수 본문

Swift/Swift 문법

[Swift] print 함수로 줄바꿈 없이 출력, 문자열 사이 구분하기 - 콘솔 로그 및 print 함수

Applecider 2021. 9. 15. 19:21

안녕하세요. 애플사이다입니다.

Swift에서 문자열을 출력하여 콘솔 로그를 남길 수 있는 print 함수에 대해 정리해보겠습니다.

 


콘솔 로그란?

콘솔 (Console)은 Xcode 하단에 있는 화면이다. print 함수 또는 dump 함수를 사용하여 출력한 문자열이 콘솔에 나타난다.

보통 앱의 로직을 확인하기 위해 문자열을 출력하며, 이것을 콘솔 로그 (Console Log)라고 한다.

print 함수는 왜 자동으로 띄어쓰기, 줄바꿈을 할까?

아래와 같이 print 함수를 호출하면, 따로 설정하지 않아도 여러 개의 문자열을 출력할 때는 문자열을 "띄어쓰기"로 구분한다.

그리고 출력을 끝내면서 "줄바꿈"을 한다.

let question: String = "How old are you?"
let answer: Int = 20

print(question)
print(answer)
print(answer, answer, answer)
print(answer + answer + answer)
// How old are you? - 출력
// 20 - 출력
// 20 20 20 - 출력
// 60 - 출력

print 함수에 숨겨진 매개변수 separator 및 terminator가 있기 때문이다.

기본값 (default value)이 있는 매개변수는 호출할 때, 매개변수를 생략할 수 있다.

print(_:separator:terminator:) 함수 뜯어보기

공식 문서인 Apple Developer Documentation에서 print 함수를 검색해보자. 

Writes the textual representations of the given items into the standard output.

print 함수의 기능을 "주어진 items의 텍스트 표현을 표준 출력(standard output)에 쓴다." 라고 설명하고 있다.

즉, 위 예시에서 상수 question의 값 ("How old are you?")과 answer의 값 (20)이 item이며, 이것을 텍스트로 만들어 출력한 것이다.

 

함수의 정의는 아래와 같다.

func print(_ items: Any..., separator: String = " ", terminator: String = "\n")
  • items : Zero or more items to print. 
  • separator : A string to print between each item. The default is a single space (" "). 
  • terminator : The string to print after all items have been printed. The default is a newline ("\n"). 

매개변수를 차례로 살펴보자.

첫번째 매개변수, items

items에는 출력할 대상으로 0개 이상의 item이 전달된다.

❗️특이한 점은 items의 타입이 Any... 라는 점이다. 따라서 String 뿐만 아니라, Int를 포함한 Swift의 모든 타입이 전달될 수 있다.

Any... 는 Any 타입의 가변 매개변수를 의미한다. 가변 매개변수는 전달인자의 개수를 정확히 알지 못할 때 사용한다.

*가변 매개변수는 [Swift Language Guide 정독 시리즈] Functions 파트를 참고

 

예시를 보면 이해가 쉽다.

print(1, 2, 3, 4, 5) // Prints "1 2 3 4 5"

매개변수 items에 전달인자로 Int 타입인 1, 2, 3, 4, 5가 전달되었다.

이것은 매개변수 items의 타입이 Any... 이기 때문에 가능하다.

 

어떻게 문자열을 출력하는데, 문자열이 아닌 타입을 전달할 수 있을까?

위에서 print 함수는 주어진 item을 텍스트 표현으로 만들어 출력하는 기능이 있다고 했다. 이때 전달인자 item의 "텍스트 표현"은 뭘까?

공식 문서에서는 이렇게 설명한다.

The textual representation for each item is the same as that obtained by calling String(item).

전달인자 item의 텍스트 표현은 "String(item)을 호출하여 얻은 결과"와 동일하다.

즉, item으로 1 (Int 타입)이 전달되면, String(1)의 호출 결과인 "1" (String 타입)이 텍스트 표현이 되어 출력되는 것이다.

*String(item)은 타입 변환 (Type Conversion)이며, item은 새로운 String 타입으로 초기화된다.

두 번째 매개변수, separator

separator의 타입은 String이고, 각 item 사이에 출력할 String을 지정할 수 있다. 기본값은 " " 이다.

함수 호출 시, separator를 생략하면 기본값인 " "이 출력된다.

세 번째 매개변수, terminator

terminator의 타입은 String이고, item 출력을 마친 이후에 덧붙일 String을 지정할 수 있다. 기본값은 "\n" (줄바꿈)이다.

마찬가지로 함수 호출 시, terminator를 생략하면 기본값인 "\n"이 출력된다.

print(1...5) // Prints "1...5" (separator의 기본값 " ", terminator의 기본값 "\n"이 출력됨)

print(1, 2, 3, 4, 5, separator: " / ") // Prints "1 / 2 / 3 / 4 / 5" 

print(1, 2, 3, 4, 5, separator: " / ", terminator: "END") // Prints "1 / 2 / 3 / 4 / 5END" 

for n in 1...5 {
    print(n, terminator: "")
}
// Prints "12345" (줄바꿈 없음)

print(terminator: "1") // Prints "1"

 

separator로 " / "을 지정하면, 문자열을 / 로 구분하여 출력한다.

또한 terminator로 "END"를 지정하면, 문자열 출력을 마친 이후 END를 덧붙인다.

 

separator 및 terminator의 값을 지정하지 않으면, 기본값이 출력된다.

 

- Reference : https://developer.apple.com/documentation/swift/1541053-print

 

Apple Developer Documentation

 

developer.apple.com

 

🍎 포스트가 도움이 되었다면, 공감🤍 / 구독🍹 / 공유🔗 / 댓글✏️ 로 응원해주세요. 감사합니다.

Comments