Objective-C를 처음으로 개발을 시작해서 그런지 조금 편하다고 느낀다.


하지만 앞으로는 스위프트를 해야 할 것 같다...만약에 계속 프로그램을 개발하게 된다면 말이다.


첫인상

처음 나왔을 때 간단한 코드를 보고 자바 스크립트 같다고 처음에는 느꼈다. 하지만 자바 스크립트와는 다른 듯...

마침표가 없어서 낯설다. 세미콜론이 있어야 문장이 끝나는 느낌인데...없으니 허전하다.


아무튼 첫인상이 주는 느낌은 간단해보이고 낯선 느낌이었는데, PlayGround를 하나 실행하여 줄줄이 쳐본다.



1. 데이터 타입


부호 있는 정수: Int를 쓰면 된다. (Int8, Int16, Int32, Int64)

부호 없는 정수: Uint를 쓰면 된다. (UInt8, UInt16, UInt32, UInt64)


소수: Float, Double 


부울: Bool (true와 false 값을 가진다)


문자: Character


문자열: String


특수문자: 문자열을 다루고 출력에서 많이 사용하는 특수문자는 다음과 같다.

 - \n: 줄 바꿈

 - \r: 캐리지 리턴

 - \t: 탭

 - \\: 역슬래쉬

 - \": 더블 쿼트

 - \': 싱글 쿼트


대충 이정도면 기본 코딩할 수 있겠다.



2. 변수와 상수


var myVariable = 10

let myConstant = 10


var를 붙이면 변수, let를 붙이면 상수가 된다.



3. 변수 선언 / 할당 / 사용 - 옵셔널(optional)


위에서는 선언과 할당을 같이 했다. 변수의 선언만 하고자 할 때에는 옵셔널 타입(optional type)을 사용한다.

변수명 뒤에 콜론을 찍고, 데이터 타입을 적어주는 것을 타입 어노테이션(Type Annotation)이라고 한다. 


var myVariable: Int?

let myConstant: Int?


이 시점의 변수에는 nil의 값을 가지고 있다. 여기에 값을 할당하여 변수가 값을 가지게 되면 랩핑되었다(wrapped)고 표현한다.


myVariable = 10

myConstant = 10


이 옵셔널 타입의 변수를 사용하면 unwrapped 되지 않았다는 메시지가 뜬다. 


print(myVariable)        // Optional(10) 


언랩핑하기 위해서는 해당 변수 뒤에 !를 붙여서 사용할 수 있도록 해주어야 한다.


print(myVariable!)                      // 10


강제로 언랩핑하는 방법이 하나더 있다. 옵셔널 바인딩(optional binding)을 통해서 할당된 값을 임시 변수나 상수에 할당한다.


if var tmpVariable = myVariable {

    print(tmpVariable)        // 10

}


if let tmpConstant = myConstant {

    print(tmpConstant)        // 10

}


이 옵셔널 바인딩은 우선 지정한 옵셔널 변수나 상수가 값을 가지고 있는 지 먼저 체크한다. 그 뒤에 값이 있을 경우 블럭 안의 코드를 실행하도록 한다.


'그런데, 왜 이래야 하나? 번거롭다.' 라고 생각하던 차에 암묵적인 언래핑(Implicitly unwrapped)이 있었다.


var myVariable: Int!

let myConstant: Int!


그렇다. 그냥 이렇게 !를 붙여서 선언하여 사용하면 변수나 상수를 사용 시에 언랩핑을 해줄 필요 없이 사용할 수 있다.


대충 이정도면 변수와 상수를 다룰 수 있겠다.



4. 신기한 튜플(Tuple)


데이터 타입이 다른 값들을 하나로 묶어서 쓸 수 있는 튜플이 있다.


let myTuple = (2, 2.123, "test")

var myTuple2 = (1, 1.1, "test2")

myTuple2 = (2, 2.1, "changed")        // 값이 변경된다.


해당하는 값을 읽어오려면 어레이처럼 0번 인덱스부터 읽어오면 된다.


print(myTuple.0)            // 2


튜플의 값을 하나 꺼내 비교도 할 수 있다.


if myTuple.0 == myTuple2.0 {

    print("\(myTuple.0)와(과) \(myTuple2.0) 값이 같아요.")        // 2와(과) 2의 값이 같아요.

}



튜플의 값을 일괄적으로 다른 변수에 대입할 수도 있다.


var (myInt, myFloat, myString) = myTuple


특정 값을 제외하고 대입할 수도 있다.  이 때는 해당 항목에 '_'(언더바)를 넣어준다.


var (myInt, _, myString) = myTuple


튜플 생성 시에 각 항목에 이름을 넣어줄 수도 있다. 마치 순서있는 딕셔너리(Ordered Dictionary) 같다.


let myTuple3 = (num: 10, height: 10.123, message: "test")


이 때는 값을 이렇게 읽을 수 있다.


print(myTuple3.0)            // 10

print(myTuple3.num)          // 10



책 10 페이지 정도 읽었는데...일단 이정도. 책은 대충보고 애플 문서를 일독해야 겠다.




+ Recent posts