스위프트의 변수와 상수
2022/12/05(월요일)
[스위프트]
2.4 스위프트 변수와 상수
우리는 변수나 상수를 이용해 프로그램에서 사용되는 데이터를 메모리에 임시로 저장한다. 이때 변수와 상수는 특정 데이터 타입에 해당하는 값의 이름이다. 변수는 생성 후 데이터값을 변경할 수 있지만, 상수는 한번 값을 설정하면 다음에 변경할 수 없다.
2.4.1 변수
스위프트에서 변수를 생성하려면 var 키워드를 사용해야 한다. var [변수명]: [데이터 타입] = [값]의 형태로 선얺나다. 변수를 생성할 때 데이터 타입은 생략할 수 있다.
var name: String = "lhj"
var age: Int = 24
var job = "IOS Programmer" // 타입 추론이 사용됨.
var height = 174.4 // 실수 타입에 타입 추론으로 어떤 타입이 지정되는지 확인해보기.
age = 99 // 변수는 값을 변경해줄 수 있다.
job = "Android Programmer" // 값을 변경할 때는 기존과 같은 타입의 값을 할당해주어야 한다.
2.4.2 상수
스위프트에서는 let 키워드를 사용해서 상수를 생성한다. let [상수명] : [데이터 타입] = [값]의 형태로 선언한다. 변수 생성과 마찬가지로 상수 생성 때도 데이터 타입을 생략할 수 있다.
let name: String = "lhj" // 차후 변경하지 않는 값은 상수로 선언된다.
var age: Int = 24
var job = "IOS Programmer" // 타입 추론이 사용됨.
var height = 174.4 // 실수 타입에 타입 추론으로 어떤 타입이 지정되는지 확인해보기.
age = 99 // 변수는 값을 변경해줄 수 있다.
job = "Android Programmer" // 값을 변경할 때는 기존과 같은 타입의 값을 할당해주어야 한다.
name = "hyung jun" // 상수로 선언된 값은 변경할 수 없다. 오류가 발생한다.
3. 데이터 타입의 기본
데이터 타입은 프로그램 내에서 다뤄지는 데이터 종류를 뜻한다. 차후에 문법을 더 많이 익히면 좋겠지만, 스위프트의 기본 데이터 타입은 구조체를 타입의 기반으로 삼아 스위프트의 다양한 기능(익스텐션, 제네렉 등)을 두루 사용하여 구현되어 있다. 그중 가장 주목해야 할 점은 스위프트의 기본 데이터 타입이 모두 구조체를 기반으로 구현되어 있다는 것이다.
3.1 Int와 Unit
정수 타입이다. Int는 +, - 부호를 포함한 정수를 뜻하며 이 중 - 부호를 포함하지 않는 0을 포함한 양의 정수는 Unit으로 표현한다. Int와 Unit 타입의 최대값과 최솟값은 각각 max와 min 프로퍼티로 알아볼 수 있다. Int와 Unit는 각각 8비트, 16비트, 32비트, 64비트의 형태가 있다. 즉, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64등으로 조장할 수 있는 데이터의 크기에 따라 타입이 분리되어 있다. 시스템 아키텍쳐에 따라 Int와 Unit의 타입이 달라진다.
var integer: Int = -100
let unsignedInteger: UInt = 50 // Unit 타입에는 음수값을 할당할 수 없다.
print("interger 값 : \(interger), unsignedInterger 값 : \(unsignedInteger)")
print("Int 최대값 : \(Int.max), Int 최소값 : \(Int.min)")
print("UInt 최대값 : \(UInt.max), UInt 최소값 : \(UInt.min)")
let largeInteger: Int64 = Int64.max
let smallUnsignedInteger: UInt8 = UInt8.max
print("Int64 최대값 : \(largeInteger), UInt8 최대값 : \(smallUnsignedInteger)")
let tooLarge: Int = Int.max + 1 // Int의 표현 범위를 초과하므로 오류를 낸다.
let cannotBeNegetive: UInt = -5 // UInt는 음수가 될 수 없으므로 오류를 낸다.
integer = unsignedInteger // 오류! 스위프트에서 Int와 UInt는 다른 타입이다.
integer = Int(unsigendInteger) // Int 타입의 값으로 할당해주어야 한다.
다음은 각 진수에 따라 정수를 표현하는 방법이다.
- 10진수 : 우리가 평소에 쓰던 숫자와 동일하게 사용하면 된다.
- 2진수 : 접두어 0b를 사용하여 표현한다.
- 8진수 : 접두어 0o를 사용하여 표현한다.
- 16진수 : 접두어 0x를 사용하여 표현한다.
3.2 Bool
Bool은 블리언 타입이다. 불리언 타입은 참 (true) 또는 거짓 (false)만 값으로 가진다.
var boolean: Bool = true
boolean.toggle() // true - false 반전
let iLoveYou: Bool = true
let isTimeUnlimited: Boll = false
3.3 Float와 Double
Float와 Double은 부동소숫점을 사용하는 실수며 부동소수 타입이라고 한다. 흔히 우리가 말하는 소수점 자리가 있는 수이다. 부동소수 타입은 정수 타입보다 훨씬 넓은 범위의 수를 표현할 수 있다. 스위프트에는 64비트의 부동소수 표현을 하는 Double과 32비트의 부동 소수를 표현하는 Float이 있다.
// Float이 수용할 수 있는 범위를 넘어선다.
// 자신이 감당할 수 있는 만큼만 남기므로 정확도가 떨어진다.
var floatValue: Flaot = 1234567890.1
//Double은 충분히 수용할 수 있다.
let doubleValue: Double = 1234567890.1
//Float이 수용할 수 있는 범위의 수로 변경한다.
floatValue = 123456.1
3.4 Character
Character는 말 그대로 ‘문자’를 의미한다. 단어, 문장처럼 집합이 아닌 단 하나의 문자를 의미한다. 스위프트는 유니코드9 문자를 사용하므로 영어는 물론, 유니코드에서 지원하는 모든 언어 및 특수기호 등을 사용할 수 있다. 문자를 표현하기 위해서는 값의 앞 뒤에 큰 따옴표를 사용하여 표현한다.
let alphabetA: Character = "A"
//Character 값에 유니코드 문자를 사용할 수 있다.
let commandCharacter: Character = "☆"
// 한글도 유니코드 문자에 속하므로 스위프트 코드의 변수 이름으로 사용할 수 있다.
let 한글변수이름: Character = "ㄱ"