※ 참고자료 : 꼼꼼한 재은 씨의 Swift:문법편
Swift에서의 변수와 상수 선언
변수 - var
상수 - letvar a = 1 let b = 2
초기화 과정 = 변수,상수에 처음으로 값을 대입하는 과정
즉, var a = 1 는 선언과 초기화 과정이 수행된 것이다.Swift는 '타입 추론기' 라는 기능모듈파일을 컴파일러에 별도로 내장하여 초기화과정에서 타입을 추론하게 된다.
이때, 타입 추론기는 2가지 원칙에 따라 타입을 결정한다.
1. 주어진 값이 타입 A와 B에 동시 속할 경우 더 넓은 범위의 타입으로 결정. (예시) 3.14는 더 넓은 범위인 Double
2. 작은 범위 타입으로 정의하고 싶을 경우 반드시 어노테이션을 통해 선언함. (예시) var a : Character
var a = 1 의 과정의 5단계
1. var a -> a라는 변수를 선언
2. a = 1 -> a가 1을 만남
3. 컴파일러가 타입추론기를 이용해 1에 대한 적절한 타입 추론
4. 메모리 공간 확보
5. 값 저장(초기화 됨)선언과 초기화를 분리하기
변수 - 가능(타입 어노테이션을 이용)
상수 - 불가능var a //컴파일오류 -> 타입을 명시하지 않았기 때문에 타입 추론이 안됨 var a:Int //작동됨 -> 타입 어노테이션을 사용 let b // 컴파일오류 -> 타입을 명시하지 않았기 때문에 타입 추론이 안됨
Swift의 기본 자료형
- Int(정수) -> Int8, Int16, Int32, Int64 4가지로 구분됨
이때 Int는 위의 4가지를 대표하는 타입으로 Int를 사용할 경우 컴퓨터사양에 따라 적절하게 Int8,16,32,64를 결정하여 사용할 수 있게 된다.- UInt(unsignedInteger) ->Int와 같다.
- Double, Float -> 메모리 크기 : Double>Float
- Bool -> true/false
- String(문자열)
- Character(문자)
이때 주의해야 할 것은 문자열의 값을 표현할때 큰따옴표("") 사용하고 문자의 값을 표현할때도 큰따옴표("")를 사용한다는 것이다.var a = 1 // 정수 var b = 1.32 // 실수 var c = true // bool var d = "hello" // 문자열 var e = "h" // 문자 print(type(of: a)) // -> Int print(type(of: b)) // -> Double print(type(of: c)) // -> Bool print(type(of: d)) // -> String print(type(of: e)) // -> String ??? 문자로 쓰기 위해서는 타입 어노테이션 필요
Swift의 타입 어노테이션
타입 어노테이션이란?
변수, 상수를 선언할 때 그 타입을 명시적으로 선언해줌으로써 어떤 타입의 값이 저장될 것인지를 컴파일러에게 직접 알려주는 문법이다.var a : Int // var 변수명 : 타입 // :(클론)을 이용한다.
타입어노테이션을 사용하는 경우 2가지
1. 선언과 초기화를 분리할 경우(변수의 경우 가능)
2. 타입을 직접 지정할 경우var a = "h" var b : Character = "h" print(type(of: a)) // -> String // 왜?? 왜냐하면 ""를 사용하는 표현 모두 컴파일러가 문자열로 인식하기 때문이다. print(type(of: b)) // -> Character
※ 문자열 템플릿 = 변수나 상수의 값을 문자열 속에 포함시키는 방법
사용하는 이유?? -> 여러 타입의 값을 문자열에 넣고 싶을 때 사용한다.
사용방법print("\(변수,상수)")
var a ="hello" var b = 2 print("안녕은 : \(a) 숫자 이는 : \(b)") // -> 안녕은 : hello 숫자 이는 : 2
쿼우팅이란?
문자열을 따옴표로 묶어 표시하는 방법
var a = "hello" // hello에 쿼우팅이 적용된 모습 var b = hello // hello에 쿼우팅이 적용되지 않은 모습
쿼우팅이 제거된 hello 경우
컴파일러가 의미적 해석을 함 (밑에 과정)
1. hello가 예약어, 키워드 등록이 되어있는지 판단
2. 함수, 클래스, 구조체등 객체 타입인지 판단
3. 변수, 상수가 정의된 건지 파악
4. 위의 것들이 아니라고 판단하면 오류문자열 쿼우팅 내부에서는 줄 바꿈을 허용하지 않는다. 따라서 \n(개행문자)를 사용한다.
var a = "hello and hi" // 컴파일오류 var b = "hello\nand hi"// -> hello and hi
하지만 개행문자를 쓰는 것을 번거롭기 때문에 swift는 트리플 쿼우팅을 제공한다.
트리플 쿼우팅이란?
문자열을 """ """ 큰따옴표 3개로 묶어 표시하는 방법(여러 줄을 문자열을 담을 수 있다.)
var a = """ hello and hi """ print(a) // -> hello and hi //주의 첫번째 """의 뒤에는 문자를 쓰면 오류남 var b = """hello and hi """ print(b) // -> 오류
범위 연산자란?
swift에서 제공하는 연산자로 주어진 값으로 연산을 수행하지 않고, 주어진 값 사이의 범위를 일정한 정수 간격으로 표현하는 연산자이다.(파이썬의 range와 비슷)
점을 사용하여 표현함(.3개)범위 연산자의 종류
- 닫힌 범위 연산자
- a...b (a부터b까지)
- 반 닫힌 범위 연산자
- a..<b (a부터 b-1까지)
- a>..b (오류,이런 문법은 없다.)
※ 주의 항상 a가 b보다 작아야 한다.var a = 1 var b = 5 for i in a...b{ print("\(i)") } //실행결과 1 2 3 4 5