Swift - 변수와 상수 그리고 타입
변수(Variable)와 상수(Constant Variable) 그리고 타입(Type)은 모든 언어에서 가지는 공통적인 요소다. 아주 기초적인 내용이라고도 볼 수 있지만 스위프트의 특징이 드러나는 만큼 적는 김에 관련 정보를 적어본다.
변수 (Variable)
그냥 변수다. 변수. 값 마음대로 설정하고 바꿀 수 있는 변수. 더 이상의 설명이 필요할까.
var로 생성 시 값을 대입했다면 컴파일 타임 때 자동으로 타입이 결정된다. 따라서 생성된 이후 해당 변수에는 해당 타입에 맞는 값만 대입이 가능하다. 이는 분명 다른 동적인 스크립트 언어와는 다른 점이다.
약간의 팁이 있다면 콤마를 구분자로 써서 한 줄에 다량의 변수를 선언 할 수도 있다.
생성 시 타입을 별도로 결정 해 줄 수도 있다.
스위프트의 변수는 독특하게도 nil로 초기화를 할 수 없다. 물론 불가능한건 아니다. 단지 옵셔널에 관한 글에서 별도로 정리한다.
[관련글] Swift - 옵셔널(Optionals)
상수 (Constant)
상수란 변수와 비슷하지만 한번 생성되면 값을 변경 할 수 없다. 스위프트는 let 키워드를 이용하면 상수를 만들 수 있다. 물론 상수이기에 정의 시 반드시 값도 정의해 주어야 한다.
상수도 변수와 마찬가지로 초기화에 따라 타입이 자동으로 결정되지만 타입을 별도로 정의해 줄 수 있다.
상수도 변수와 마찬가지로 nil을 바로 가질 수는 없다. 역시 옵셔널을 참고하자.
[관련글] Swift - 옵셔널(Optionals)
일반적인 타입들
Int - 정수형
타입의 선두주자(?) 정수형은 그 영어 철자인 Integer의 앞 글자를 따서 Int라는 이름을 가지고 있다. 실제로 생성되는 타입은 플랫폼이 32비트냐 64비트냐에 따라 Int32 혹은 Int64 이긴 하지만 크게 신경 쓸 필요는 없다.
Float, Double - 실수형(부동소수점)
실수 - 소수점이 찍힌 숫자 - 타입은 Float와 Double 형이 있다.
실수형은 최대크기와 최소크기의 존재가 유동적이기 때문에 .max나 .min 같은 형식을 이용 할 수 없다.
Character - 문자형
하나의 단문자를 표기하기 위한 타입이다.
String - 문자열형
Character가 한 개 이상 모인것이 문자열이다. 한 개도 포함한다는 것에 유의하자.
Bool - 이진형(Boolean)
true와 false라는 특수 논리 데이터를 가질 수 있는 타입이다. if 문 등 제어를 위해서 사용되는데 자주 쓰이는 표현이니 아마도 다른 언어를 알고 있다면 익숙할 것이다.
[관련글] 논리 제어문(Conditional Statements)
Array - 배열 혹은 리스트형
하나 이상의 아이템을 연속으로 담을 수 있는 데이터 타입이다.
[관련글] Swift - 컬렉션 타입(Collection Types)
Dictionary - 사전형
키와 키에 매칭되는 데이터를 하나 이상 가징 수 있는 데이터 타입이다.
[관련글] Swift - 컬렉션 타입(Collection Types)
Range - 범위형
Swift에만 존재하는 특수 타입이다. 점3개(...) 혹은점2개(..) 점 두 개에 꺽쇠(..<)의 좌우에 숫자 혹은 변수나 상수 등을 줘서 범위를 설정하는데 사용된다. Python 에서는 range()를 이용해 리스트(list)를 생성하는 형식과 비교된다.
Range는 주로 for-in 루프에서 많이 사용된다. 물론 용도야 쓰기 나름이지만...
업데이트: '..<' 키워드는 Xcode 6 Beta 3 부터 도입되었다.
[관련글] Swift - 루프(Loop)
Tuple - 튜플
여러개의 아이템을 콤마로 구분해서 만드는 리스트 형태의 타입, 개인적으로는 변경 불가능 배열이라고 설명하기도 한다.
[관련글] Swift - 튜플(Tuple)
Optional - 옵셔널
값이 없다는 의미인 nil을 표현하기 위한 스위프트만의 특수한 타입이자 개념이다.
[관련글] Swift - 옵셔널(Optionals)
타입은 이 외에도 다양하게 존재하지만 여기서는 자주 쓰이는 위의 것들만 정리한다.
Any - 아무 타입
AnyObject - 아무 오브젝트
둘은 Objective-C의 id(혹은 void *)와 비슷한 용도로 사용되는 타입이다. Any 는 어떠한 타입이든 지칭이 가능하고, AnyObject는 어떠한 타입의 오브젝트 즉 클래스를 통해 생성된 인스턴스를 지칭 할 수 있다.
이 타입은 여러 타입을 가질 수 있기 때문에 타입을 확인 할 수 있는 '
타입 별명짓기(Type Aliases)
Swift에선 C의
형변환
C언어 및 파생 언어의 형변환(Type Casting) 방식은 Swift에선 쓸 수가 없다. 대신 해당 타입 클래스를 이용해 생성하거나 형변환 메소드를 활용하면 간단히 할 수 있다.
다른 방법이 있을 수도 있지만 일단 여기까지...
[관련글] Swift - let(상수선언)에 대해 파고들기
[돌아가기] 스위프트(Swift) 가이드
변수 (Variable)
그냥 변수다. 변수. 값 마음대로 설정하고 바꿀 수 있는 변수. 더 이상의 설명이 필요할까.
var a = 1 var b = "B" var c = 5 + 6 c = c + avar 라는 키워드로 변수를 정의 할 수 있다. 물론 정의된 변수는 이후 값을 바꾸거나 할 수 있다.
var로 생성 시 값을 대입했다면 컴파일 타임 때 자동으로 타입이 결정된다. 따라서 생성된 이후 해당 변수에는 해당 타입에 맞는 값만 대입이 가능하다. 이는 분명 다른 동적인 스크립트 언어와는 다른 점이다.
var a = 1, b = "B", c = 5 + 6이런 문법은 상황에 따라 편하게 쓸 수도 있다.
생성 시 타입을 별도로 결정 해 줄 수도 있다.
var a: Int = 1 var b: String = "B"아예 생성자를 이용해 초기화 시키는 것도 가능하다.
var a = Int(1) var b = String("B")위 방법은 클래스를 인스턴스화 하는 방법과 동일한데 결과는 같으므로 편한대로 쓰면 될 것 같다.
스위프트의 변수는 독특하게도 nil로 초기화를 할 수 없다. 물론 불가능한건 아니다. 단지 옵셔널에 관한 글에서 별도로 정리한다.
[관련글] Swift - 옵셔널(Optionals)
상수 (Constant)
상수란 변수와 비슷하지만 한번 생성되면 값을 변경 할 수 없다. 스위프트는 let 키워드를 이용하면 상수를 만들 수 있다. 물론 상수이기에 정의 시 반드시 값도 정의해 주어야 한다.
let myWidth = 100.0 let myHeight = myWidth * 0.5 var rectAreaSize = myWidth * myHeight let defaultAreaSize = rectAreaSize위 예제의 마지막 라인을 제외하곤 일반적인 상수라서 그러려니 할 수 있겠는데 마지막 라인에 주목하자. 변수를 이용해 상수를 정의하고 있다. 이는 스위프트의 상수가 일반적인 상수와는 좀 다른 '동적인 상수' 라고 추측 할 수 있게한다.
상수도 변수와 마찬가지로 초기화에 따라 타입이 자동으로 결정되지만 타입을 별도로 정의해 줄 수 있다.
let myName = "Test Name" let yourName: String = "Your Name" let thisWidth = Double(123.45)
상수도 변수와 마찬가지로 nil을 바로 가질 수는 없다. 역시 옵셔널을 참고하자.
[관련글] Swift - 옵셔널(Optionals)
Int - 정수형
타입의 선두주자(?) 정수형은 그 영어 철자인 Integer의 앞 글자를 따서 Int라는 이름을 가지고 있다. 실제로 생성되는 타입은 플랫폼이 32비트냐 64비트냐에 따라 Int32 혹은 Int64 이긴 하지만 크게 신경 쓸 필요는 없다.
let intA = 1 var intB = 2 var intC = Int(3) var intD: Int64 = 4이 외에 부호 없는(Unsigned) 정수 타입으로 UInt8 같은 것을 쓸 수 있다. UInt8은 BYTE라고 표기하기도 하는 자주 쓰이는 타입이기도 하다.
let byteValue: UInt8 = 255정수형(Int)는 실제 타입의 비트 크기에 따라 최대값과 최소값이 정해져 있고 이를 max, min 프로퍼티를 참고해 확인 할 수 있다. 오버플로우(overflow)를 방지하려면 체크 해 두는 것도 나쁘진 않다.
println("Int MAX = \(Int.max)") println("Int MIN = \(Int.min)")
Float, Double - 실수형(부동소수점)
실수 - 소수점이 찍힌 숫자 - 타입은 Float와 Double 형이 있다.
let a = 1.0 var b: Float = 22.45 var c = Double(100.99)Float는 32비트형, Double은 64비트형이라고 알아두자. 비트가 크면 당연히 더 큰 수치도 보관할 수 있다 라고 생각할 수 있고 틀린 말은 아니다. 단지 부동소수점에 한해서는 '정확도가 높아진다' 라고 표현하는게 정확하다.
실수형은 최대크기와 최소크기의 존재가 유동적이기 때문에 .max나 .min 같은 형식을 이용 할 수 없다.
Character - 문자형
하나의 단문자를 표기하기 위한 타입이다.
var charA = Character("A") let han = Character("한")물론 한글도 한 글자 범주에 든다.
String - 문자열형
Character가 한 개 이상 모인것이 문자열이다. 한 개도 포함한다는 것에 유의하자.
let strA = "STRING A" var strB = "STRING B" var strC: String = "STRING C" var strD = String("STRING D")[관련글] Swift - 문자열(String)
Bool - 이진형(Boolean)
true와 false라는 특수 논리 데이터를 가질 수 있는 타입이다. if 문 등 제어를 위해서 사용되는데 자주 쓰이는 표현이니 아마도 다른 언어를 알고 있다면 익숙할 것이다.
[관련글] 논리 제어문(Conditional Statements)
Array - 배열 혹은 리스트형
하나 이상의 아이템을 연속으로 담을 수 있는 데이터 타입이다.
[관련글] Swift - 컬렉션 타입(Collection Types)
Dictionary - 사전형
키와 키에 매칭되는 데이터를 하나 이상 가징 수 있는 데이터 타입이다.
[관련글] Swift - 컬렉션 타입(Collection Types)
Swift에만 존재하는 특수 타입이다. 점3개(...) 혹은
1...5 // 1, 2, 3, 4, 5 0..<10 // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9점 3개(...)일 경우는 사람식의 표기이고 '..<' 일 경우는 0 based index 형식이다. 즉 A...B 는 A부터 B 까지이고 A..<B는 A부터 B-1까지이다.
Range는 주로 for-in 루프에서 많이 사용된다. 물론 용도야 쓰기 나름이지만...
업데이트: '..<' 키워드는 Xcode 6 Beta 3 부터 도입되었다.
[관련글] Swift - 루프(Loop)
Tuple - 튜플
여러개의 아이템을 콤마로 구분해서 만드는 리스트 형태의 타입, 개인적으로는 변경 불가능 배열이라고 설명하기도 한다.
[관련글] Swift - 튜플(Tuple)
Optional - 옵셔널
값이 없다는 의미인 nil을 표현하기 위한 스위프트만의 특수한 타입이자 개념이다.
[관련글] Swift - 옵셔널(Optionals)
타입은 이 외에도 다양하게 존재하지만 여기서는 자주 쓰이는 위의 것들만 정리한다.
Any - 아무 타입
AnyObject - 아무 오브젝트
둘은 Objective-C의 id(혹은 void *)와 비슷한 용도로 사용되는 타입이다. Any 는 어떠한 타입이든 지칭이 가능하고, AnyObject는 어떠한 타입의 오브젝트 즉 클래스를 통해 생성된 인스턴스를 지칭 할 수 있다.
이 타입은 여러 타입을 가질 수 있기 때문에 타입을 확인 할 수 있는 '
is
' 라는 특수 커맨드가 제공된다.
let dec = 10 let some: Any = dec if some is Int { println("dec is Int") }마치 Objective-C의 isKindOfClass: 메소드와 비슷하다. 하지만 좀 다른점은 (현 시점에선) Any류가 아닌 다른 정해진 타입들에서는
is
오퍼레이터를 사용 할 수 없다는 점이다.타입 별명짓기(Type Aliases)
Swift에선 C의
typedef
와 비슷한 용도로 typealias
가 있다.
typealias LongInteger = Int64 let v = LongInteger(12345)이 별명(alias) 기능은 코드 가독성을 위해서 사용되는 경우가 많다.
형변환
C언어 및 파생 언어의 형변환(Type Casting) 방식은 Swift에선 쓸 수가 없다. 대신 해당 타입 클래스를 이용해 생성하거나 형변환 메소드를 활용하면 간단히 할 수 있다.
let doubleValue = 10.9 let intValue = Int(doubleValue) // intValue = 10 let strValue = "123" let intValue2 = strValue.toInt() // intValue2 = 123위 첫째 라인 코드처럼 실수를 정수형으로 변환하면 소수점 아래는 다 사라진다. 유의하자.
다른 방법이 있을 수도 있지만 일단 여기까지...
[관련글] Swift - let(상수선언)에 대해 파고들기
[돌아가기] 스위프트(Swift) 가이드
댓글