Goal
- Swift의 기초 문법인 자료형과 변수, 상수의 할당을 알아본다.
- 할당된 값을 출력할 수 있다.
- 문자열보간법을 사용할 수 있다.
들어가기에 앞서
- 문법작성규칙은 아래와 같이 작성합니다.[1]
lower camel case: method, variable, constant upper camel case: enum, struct, class, extension
변수와 상수의 할당
- 변수와 상수의 할당은
[변수 및 상수] [변수 및 상수명]: [자료형] = [값]
을 따르며 생성할 때 자료형은 생략할 수 있습니다.
변수
- 변수는 값의 변동이 있을 때 사용합니다.
-
변수를 할당할 때
var
라는 키워드를 사용합니다.1 2 3 4 5 6 7 8
var name: String = "WhiteHyun" var age: Int = 25 var height: Float = 190.9 // 할당한 값을 다시 재설정해줄 수 있습니다. name = "SeungHyun" age = 26 height = 191.1
상수
- 상수는 값을 바꿀 수 없다. 특정 값에 의미를 부여하거나 가독성을 위해 사용됩니다.
-
상수를 할당할 때에는
let
키워드를 사용합니다.1 2 3 4 5 6
let name: String = "SeungHyun" let age: Int = 25 let height: Float = 190.9 name = "SeungHyun Hong" // 오류 발생!
출력
print와 dump
- print는 커맨드라인에 내가 원하는 값을 출력할 때 사용합니다.
- dump는 print와 기능은 비슷하나, custom struct, custom class에 대해 좀 더 자세한 내용을 출력하고 싶을 때 사용합니다.
1
2
print(2) // 2
dump(2) // - 2 여기서 - 2의 '-'는 음수 부호가 아니다!
문자열 보간법
- 문자열 내에 출력하고자 하는 변수나 상수가 있을 때 사용합니다.
\(value)
형태로 표시하여 출력합니다.
1
2
3
4
let name: String = "SeungHyun"
var age: Int = 25
print("My name is \(name).") // My name is SeungHyun.
print("I'm \(age) years old.") // I'm 25 years old.
자료형
Int & UInt
-
정수타입입니다.
Int
를 평균적으로 사용하며, 양수 부호만 적용하는 경우UInt
를 고려해볼 수 있습니다. 또한 효율적인 메모리 사용을 위해 Int8(UInt8), Int16(UInt16), .. 등 원하는 메모리만큼의 정수 타입을 선언할 수 있습니다.1 2 3
var age: UInt = 30 let schoolAge: Int = 121 var level: Int8 = 127
-
각 정수형 타입의 범위는 표를 확인해 주세요.
자료형 범위 Int8 -128~127 UInt8 0~255 Int16 -32,768~32,767 UInt16 0~65,535 Int32 -2,147,483,648~2,147,483,647 UInt32 0~4,294,967,295 Int64 -9,223,372,036,854,775,808~9,223,372,036,854,775,807 UInt64 0~18,446,744,073,709,551,615
정수형 프로퍼티
프로퍼티 | 설명 |
---|---|
byteSwapped | 정수의 비트를 전부 토글한 값 |
customMirror | 정수 인스턴스를 비추는(reflect) Mirror 객체 |
leadingZeroBitCount | 정수의 2진수에서 MSB[3]로부터 0의 개수 |
magnitude | 절댓값 |
nonzeroBitCount | 정수의 2진수에서 0이 아닌 1의 개수 |
trailingZeroBitCount | 정수의 2진수에서 LSB[3]로부터 0의 개수 |
words | Words struct |
bigEndian | 빅엔디안 |
littleEndian | 리틀엔디안 |
bitWidth | 정수형의 이진 비트 길이 |
description | 정수값의 String형 |
정수형 메소드
메소드 | 설명 |
---|---|
func encode(to encoder: Encoder ) throws |
정수값을 Encoder 에 따라 인코딩한다. |
func hash(into hasher: inout Hasher ) |
Hashes the essential components of this value by feeding them into the given hasher. |
func quotientAndRemainder(dividingBy rhs: Int) -> (quotient: Int, remainder: Int) | 정수값을 other(=rhs) 로 나누었을 때 몫과 나머지를 튜플로 반환한다. |
func addingReportingOverflow(_ other: Int ) -> (partialValue: Int, overflow: Bool) |
정수값과 other(=rhs) 을 더한 값과 overflow 발생 여부를 튜플로 반환한다. |
func subtractingReportingOverflow(_ other: Int ) -> (partialValue: Int, overflow: Bool) |
정수값과 other(=rhs) 을 뺀 값과 overflow 발생 여부를 튜플로 반환한다. |
func multipliedReportingOverflow(by other: Int ) -> (partialValue: Int, overflow: Bool) |
정수값과 other(=rhs) 을 곱한 값과 overflow 발생 여부를 튜플로 반환한다. |
func dividedReportingOverflow(by other: Int ) -> (partialValue: Int, overflow: Bool) |
정수값을 other(=rhs) 로 나눈 값과 overflow 발생 여부를 튜플로 반환한다. |
func remainderReportingOverflow(dividingBy other: Int ) -> (partialValue: Int, overflow: Bool) |
정수값을 other(=rhs) 로 나눈 나머지 값과 overflow 발생 여부를 튜플로 반환한다. |
func advanced(by n: Int ) -> Int |
정수와 n의 값을 더하여 반환, + 기호를 사용하는 것을 추천한다. |
func distance(to other: Int ) -> Int |
정수값과 other값의 거리를 계산하여 반환한다. (other - 정수값 으로 계산됨) |
func dividingFullWidth(_ dividend: (high: Int, low: Int.Magnitude) ) -> (quotient: Int, remainder: Int) |
(high, low)[4]에 따른 숫자를 정수값으로 나눈 몫과 나머지를 반환한다. |
func multipliedFullWidth(by other: Int ) -> (high: Int, low: Int.Magnitude) |
정수값과 other(=rhs) 을 곱한 값을 (high, low)[4]의 형태로 반환한다. |
func signum() -> Int | 정수값이 음수면 -1, 양수면 1, 아니면 0을 반환한다. |
func isMultiple(of other: Int ) -> Bool |
other 에서 어떤 값을 곱하여 자기 자신의 값이 나올 수 있는가 |
mutating func negate() | 정수값의 부호를 바꾸어준다. 만약 정수값의 최솟값에서 함수를 실행하면 overflow 오류가 발생하니 유의할 것 |
Float & Double
- 소수점을 포함한 숫자, 즉 실수를 다룰 때 사용합니다. 부동소수 타입이라고도 합니다. Float는 32비트의 부동소수 표현을 하며, Single-precision floating-point format[5]이고, Double은 64비트, Double-precision floating-point format[5]입니다.
1 2
let floatNumber: Float = 51248760.2345 let doubleNumber: Double = 1203947.12498
Character
- 문자를 나타내는 자료형이며, 유니코드의 문자도 포함할 수 있습니다. 문자를 포함하는 변수를 초기화할 때에는 큰 따옴표(“)를 사용합니다.
1 2 3
let krFlag: Character = "\u{1F1F0}\u{1F1F7}" print(krFlag) // 🇰🇷
String
-
문자열(문자의 집합)입니다. Character과 마찬가지로 유니코드를 사용할 수 있고, 큰 따옴표(“)를 사용하여 표현합니다.
1 2 3 4 5 6 7
let name: String = "SeungHyun" var school: String = .init() // String(), ""로 초기화 해도 됨. school.append("하중") school = school + "초등학교" print(school) // 하중초등학교
-
여러 줄의 문자열을 작성해야한다면 큰 따옴표 세 개로 문자열을 묶어 처리합니다. 이 때 큰 따옴표 세 개를 쓴 다음 줄에 내려 적어야하니
왜 안돼?
와 같은 말은 하지 말아주세요.1 2 3 4 5
let multiLineString: String = """ Morning! I don’t think we’ve met before, I’m SeungHyun. :) """
String 프로퍼티
프로퍼티 | 설명 |
---|---|
isEmpty | 빈 문자열인지 아닌지 true | false 로 반환한다. |
count | 문자열의 길이를 반환한다. |
String 메소드
메소드 | 설명 |
---|---|
func hasPrefix(_ prefix: String ) -> Bool |
문자열에서 접두어에 prefix 라는 값이 포함되어 있으면 true, 아니면 false를 반환한다. |
func hasSuffix(_ suffix: String ) -> Bool |
문자열에서 접미어에 prefix 라는 값이 포함되어 있으면 true, 아니면 false를 반환한다. |
func uppercased() -> String | 문자열에 있는 소문자를 전부 대문자로 바꾸어 반환한다. |
func lowercased() -> String | 문자열에 있는 대문자를 전부 소문자로 바꾸어 반환한다. |
Any
- 위에 작성한 자료형 뿐 아니라 아직 설명하지 않은 자료형까지 전부 사용할 수 있는 데이터타입입니다.
- 되도록 사용은 지양하셔야 합니다. 편하다고 나중에 사용했다가, 예기치 못한 오류가 발생하기 딱 좋은 타입이기 때문입니다.
1 2 3
var value: Any = 2 value = "STRING VALUE" value = true
Reference
- Camel Case - 위키피디아
- hashValue - Apple
- Bit Numbering - 위키피디아
-
high와 low에서, high는 정수값 자료형의 최대 크기이다. 예를 들어, UInt8의 high: 1, low: 2는 1*256 + 2 = 258이다. 애플 공식문서에 나오는 예시코드를 보면, Int의 최대 길이는
18446744073709551615
이므로,(18446744073709551615*22640526660490081+7959093232766896457)/2241543570477705381
을 계산하면 몫 186319822866995413이 나오고 나머지는 0이 나온다. - Single-precision floating-point format - 위키피디아
Double-precision floating-point format - 위키피디아