안녕하세요~ 요즘 날도 따뜻해지고 하니까 놀고 싶은 마음이 커져만 가네요.. 그래도 iOS 공부는 절대 소홀히 해서는 안되겠죠! 오늘은 Swift의 문법을 처음 배우는 시간이였는데 프로그래밍 언어를 배울때 가장 처음 배우는 상수, 변수에 대해 알아보았습니다. 그리고 흔히 코딩을 조금 할 수 있다면 다 알고 있는 데이터 타입에 대해 공부도 해보았는데 뭔가 다른 언어와 조금은 차이가 있으면서도 비슷한 느낌이였습니다. 그럼 자세히 알아볼까요?
자 그러면 저번에 만들었던 playground를 열고 코드를 작성해보도록 하겠습니다. 일단 상수와 변수는 조금의 차이가 있는데 상수는 변하지 않는 값이고 변수는 변하는 값입니다.
쉽게 말해 상수 a에 어떠한 값을 넣었을 경우 이 a는 절대 변하지 않습니다.(a를 바꾸려고 한다면 에러가 나겠죠.) 반대로 변수 b에 어떠한 값을 넣었을 경우 b는 저희 마음껏 변화를 줄 수 있게되는 거죠.
- 상수 : 차후에 변경이 불가능 -> let 사용
- 변수 : 차후에 변경이 가능 -> var 사용
코드를 직접 작성해가면서 좀 더 자세히 알아보겠습니다.
let a : Int = 1
var b : Int = 4
a = 4
b = 1
print(a)
print(b)
코드에 대해 잠깐 설명을 하자면 스위프트에서는 상수와 변수를 선언할때 앞에 let이냐 var이냐를 먼저 알려주고 상수/변수의 이름을 선언하고 : 데이터형 식으로 상수,변수를 선언할 수 있습니다. 위 코드에서는 정수형인 Int를 데이터형으로 선언을 했습니다. 이렇게 코드를 작성하고 실행을 시켜볼까요?
무시 무시한 빨간 줄이 뜨네요.. 위의 결과에서 알 수 있듯이 "'a' is a 'let' constant", a는 상수(let)이기 때문에 값을 변경하지 못한다고 하네요. 즉 var로 선언을 해야 나중에 바꿀 수 있다는 점! let인 상수는 절대 바뀔 수 없다는 점..
a = 4로 바꾼다는 코드를 지운다면 1이 두개가 잘 출력이 될 것 같습니다.
여기서 한가지 의문이 들 수 있는데 그렇다면 모든 것을 변수(var)로 두고 바꾸고 싶을 때는 바꾸고 아니면 놔두면 더 편하게 쓸 수 있지 않을까?!?! 이렇게 차이를 두는 이유는 메모리 누수를 방지하기 위해서 라고 합니다. let을 사용하는 경우 변하지 않을 데이터의 메모리만 가지고 있으면 되지만 var을 변할 수 있는 가능성이 있기 때문에 메모리가 변할 수 있습니다. 그리고 let을 사용하게 되면 우리가 변경하지 않을 상수를 안전하게 보호할 수 있는 장점도 있구요!
위에서는 정수형(Int) 상수와 변수를 다음과 같이 선언했습니다.
let a : Int = 1
var b : Int = 4
하지만 Swift에서는 상수, 변수 선언 시 타입형을 꼭 안쓰고 선언을 해도 된다고 하네요. 제가 C언어를 배우고 파이썬을 배웠을때 굉장히 편하게 코딩을 했던 부분이 바로 이 부분이였습니다. 따로 데이터 타입을 정해주지 않아도 알아서 자동으로 저장을 해주는!!
let a = 1
var b = 4
저는 간단하고 이해하기 쉬운 코드에는 밑에 처럼 데이터 타입을 생략해서 적는 것도 좋다고 생각하지만 복잡하고 나중에 헷갈릴 수 있는 변수, 상수 선언 시에는 데이터 타입을 확실하게 적는 것도 좋은 습관이 될 것 같네요. 그렇다면 Swift의 데이터 타입의 종류에 대해 자세히 알아보겠습니다. 스위프트 언어의 데이터 타입은 다른 언어와 크게 다르지 않습니다.
- : Int = 23
- : Float = 2.3
- : Double = 3.1415926
- : Bool = true/false
- : Character = "A"
- : String = "ABC"
- : Array = [1,2,3]
- : Dictionary = [key : value]
- : Any = 모든것
흔히 보던 데이터 타입들이네요. 정수형 Int, 짧은 소수 Float, 긴 소수 Double, 참과 거짓 불린, 문자 타입 Character, 문자열 타입 String, 배열과 딕셔너리까지.
Any라는 데이터 타입도 있는데 이 데이터 타입은 모든 데이터를 다 저장할 수 있다고 하네요.(와우!)
var anyArr : [Any] = [1,"hi",true,1.0]
이렇게 배열안에 많은 데이터 타입들을 짬뽕시킬 수도 있겠네요! 상수와 변수에 알맞은 데이터 타입까지 사용을 해서 완벽한 코드를 작성할 수 있을 것 같습니다.
스위프트에서도 타입간 형 변환을 할 수 있습니다. 형 변환을 하는 이유는 같은 타입으로 형 변환을 해서 제어 또는 연산을 수행하기 위해서 입니다.
가장 큰 예시를 하나 들어보자면, 우리는 문자열로 받은 숫자를 숫자라고 인식할 수 있지만 컴퓨터는 숫자가 아닌 문자로 인식하기 때문에 그것을 연산할 수 없게 됩니다. 그래서 이 문자열을 정수형으로 형 변환을 해서 연산에 이용하는 것이지요.
서론이 조금 길어졌네요.. 간단한 코드를 작성하고 데이터 타입 변환에 대해 살펴보겠습니다.
다음과 같은 코드를 짜보았습니다. 우선 aa변수에는 Int형인 78을 넣고 bb변수에는 "Hi"라는 문자열을 넣었습니다. 두 변수는 타입이 다르기 때문에 같이 쓸 수 없지만 String(aa)로 aa변수를 문자열 타입으로 변환을 했습니다! 따라서 c변수에 두 문자열을 합친 값이 들어간 것이지요. 반대로 문자열 형태를 Int형으로 바꿀 수 도 있고 타입들끼리 형 변환이 가능하답니다!
오늘은 가장 기본적인 문법인 변수, 상수, 데이터 타입에 대해서 공부를 해보았습니다. 기본적인 만큼 아주 깊숙하고 확실하게 이해하고 있어야겠죠..? 다음에도 스위프트 문법에 대한 포스트를 올리도록 하겠습니당!