본 게시글은 아래 분들의 블로그를 참고하여 작성했습니다.
- 전수열님 님의 GitBook
Swift에서는
var
let
(Swift는 상수 사용을 권장하고 있습니다.)
// 변수 선언 var name = "Seung Hyun" // 상수 선언 let birthYear = 1997
변수는 값을 변경할 수 있습니다.
// 기존 name 변수 값을 변경 name = "macaorng"
상수는 값을 변경하면 컴파일 에러가 발생합니다.
// 기존 birthYear 상수 값을 변경 시도 brithYear = 2000
Cannot assign to value: 'brithYear' is a 'let' constant
Swift는 정적 타이핑 언어입니다.
변수나 상수를 정의할 때 그 자료형(Type)이 어떤 것인지를 명시해주어야 하는 언어를 말합니다.
var name: String = "macarong" let birthYear: Int = 1997 var height: Float = 168.4
변수와 상수명 오른쪽에 : String
, : Int
, : Float
과 같이 변수에 담길 값의 타입을 지정해주는 것을 정적 타이핑한다라고 합니다.
: String
를 Type Annotation
이라고 합니다.
Swift에서는 타입을 매우 엄격하게 다루기 때문에 다른 자료형끼리는 기본적인 연산이 되지 않습니다.
birthYear + height // Compile Error!
Binary operator '+' cannot be applied to operands of type 'Int' and 'Float'
이를 해결하는 방법은 강제로 형을 변환하여 사용하는 것입니다.
Float(birthYear) + height // 2165.4
Swift에서 문자열에 변수를 넣는 방법은 아래와 같습니다
String(birthYear) + "년에 태어난 " + name + "아 안녕!"
위와 같이 작성 시 가독성이 떨어지지만 아래와 같이 좀 더 가독성 있게 작성할 수 있습니다.
\(birthYear)년에 태어난 \(name)아 안녕!"
본문 처음 작성한 예시에서는 따로 명시해주지 않아도 name
이 문자열, birthYear
가 정수형이라는 것을 알았습니다.
Swift 컴파일러는 큰 따옴표(" ")로 감싸진 텍스트는 String
타입인 것을 알고 숫자는 Int
타입인 것을 인식할 수 있습니다.
이렇게 타입을 직접 명시하지 않고 정적 타이핑을 할 수 있게 해주는 것을 타입 추론(Type Interface)라고 합니다.
배열과 딕셔너리는 대괄호 ( [ ] )를 이용해서 정의할 수 있습니다.
// 배열(Array) 선언 var languages = ["Swift", "Objective-C", "Java", "Python"] // 딕셔너리(Dictionary) 선언 var capitals = [ "한국": "서울", "일본": "도쿄", "중국": "베이징", ]
배열과 딕셔너리에 접근하거나 값을 변경할 때에도 대괄호를 사용합니다.
languages[0] // Swift languages[1] = "Ruby" capitals["한국"] capitals["프랑스"] = "파리"
참고로,
다른 상수와 마찬가지로 배열과 딕셔너리를 let
으로 정의하면 값을 수정할 수 없습니다.
물론 값을 추가하거나 삭제하는 것도 불가능합니다.
정적 타이핑으로 변수를 선언한다면
var languages: [String] = ["Swift, "Objective-C", "Java", "Python"] var capitals: [String: String] = [ "한국": "서울", "일본": "도쿄", "중국": "베이징", ]
languages
와capitals
의 타입을 대괄호 안에 어떤 타입을 받을 것인지 명시합니다.
빈 배열이나 빈 딕셔너리를 정의하고 싶다면
var languages: [String] = [] var capitals: [String: String] = [:]
조금 더 간결하게 표현하자면 아래와 같이 표현 가능합니다.
var languages: [String]() var capitals: [String: String]()
타입 뒤에 괄호 ( () )를 쓰는 것은 생성자(Initalizer)를 호출하는 것입니다.
이는 다음에 자세히 다룰 예정입니다.