[Swift 공부] 콘솔 로그 print() 와 dump()


지금까지 Objective C 에서 콘솔로그는 대체로 NSLog 사용하고 있었는데, Swift 언어에서 부터 NSLog 사용하지 않고, Print 혹은 dump 함수를 통해 콘솔로그를 출력할 있어 간단하게 알아보고자 한다.

기존에 Objective C 에서는 NSLog 그냥 사용하기 않고, 아래와 같이 .pch 파일에 NSLog 재정의 하여,  사용하곤 했다.

—— 프로젝트.pch ——-
1
#define NSLog( s, ... ) NSLog( @"<%@:(%d)> %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
cs
———————————

재정의한 이유를 결과로 보여드리면, ClassName (Line) 줄이 표기되고 안되고 차이를 느낄 있다.

1
2
3
4
// 기본 NSLog
2019-03-05 21:37:03.779493+0900 SampleProject[26217:131080] Test NSLog
// 재정의 NSLog
2019-03-05 21:34:15.902508+0900 SampleProject[24138:118908<RootViewController.m:(43)> Test NSLog
cs


프로젝트를 진행하면서 NSLog 무심코 남기지만,  추후 유지보수 여러명과 작업을 진행할때 내가 하지 않은 곳을 찾을 해당 Class 찾는 부분의 시간을 단축시켜주는 역할을 도맞아 하고 있다.

Swift에서는 print 항목명을 Define 통해 이름을 같이 사용할 수는 없으나, 함수로 재정의하여 사용하면 로그에 Class 명과 LineNumber 찍을 있다.


Print() dump() 함수


Print() 함수는 디버깅시 간략한 정보를 출력해준다. 반면 dump() 함수는 조금 자세한 정보를 출력해준다.

간략하게 Playground로 테스트 진행하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import UIKit
struct Info {
    let name:String
    var age:Int
}
var kimjwInfo:Info = Info(name: "KimJW", age: 31)
class Person {
    var height:Float = 0.0
    var weight:Float = 0.0
}
let kimjwPerson:Person = Person()
kimjwPerson.height = 170.0
kimjwPerson.weight = 60.0
print("print:\(kimjwInfo)")
dump(kimjwInfo)
/**
print:Info(name: "KimJW", age: 31)
▿ __lldb_expr_7.Info
- name: "KimJW"
- age: 31
*/
print("print:\(kimjwPerson)")
dump(kimjwPerson)
/**
print:__lldb_expr_7.Person
▿ __lldb_expr_7.Person #0
- height: 170.0
- weight: 60.0
 */
cs

댓글