스위프트는 데이터가 저장되는 메모리 내 주소 공간을 개발자가 쉽게 사용할 수 있도록 이름으로 연결한 변수와 상수를 제공한다.
값을 저장한, 혹은 저장할 메모리 주소값을 이름으로 연결해 놓은 것을 변수와 상수라고 한다.
변수와 상수를 이용하여 메모리 주소에 해당하는 공간에 손쉽게 값을 저장하거나 꺼낼 수 있다. 일반적으로 이런 과정을 변수와 상수에 값을 저장한다라고 한다.
- 변수: 필요에 따라 저장된 값을 몇 번이라도 다른 값으로 변경할 수 있음 - 프로그램의 실행에 따라 변하는 값을 저장
- 상수: 한 번 저장된 값을 다른 값으로 변경할 수 없음 - 변하지 않을 값을 저장
* 상수를 사용하는 이유?
프로그래밍 소스 관리 목적상 변하지 않는 값은 상수에 저장하는 것이 훨씬 효율적이다.
실수로 값이 변경되는 일을 막을 수 있다.
값의 성격이 명확히 분류되므로 관리하기에도 용이하다.
변수와 상수를 정의하는 방법
키워드
- 변수: var
- 상수: let
선언 방법
- 변수를 선언할 때: var + 변수명
- 상수를 선언할 때: let + 변수명
예시
var year = 1999 // 정수형 변수
var message = "Hello, World" // 문자열 변수
let birthYear = 1980 // 정수형 상수
let welcomeMessage = "안녕하세요" // 문자열 상수
year라는 이름으로 정의된 변수에 1999라는 정수를 대입했으므로 정수형 타입의 변수
message라는 이름으로 정의된 변수에 "Hello, World"라는 문자열을 대입했으므로 문자열 타입의 변수
birthYear라는 이름으로 정의된 상수에 1980이라는 상수를 대입했으므로 정수형 타입의 상수
welcomeMessage라는 이름으로 정의된 상수에 "안녕하세요"라는 문자열을 대입했으므로 문자열 타입의 상수
변수의 정의 (선언과 초기화)
변수의 정의는 변수 선언, 변수 초기화 2 단계이며, 스위프트에서는 일반적으로 동시에 진행한다.
변수와 상수에 처음으로 값을 대입하는 과정을 초기화(Initialize)라고 한다.
- 변수는 선언과 초기화를 분리할 수 있다. 일단 선언을 진행하고, 이후 실제로 필요한 시점에 초기화해도 된다.
- 상수는 선언과 초기화를 분리할 수 없다. 일반적으로는 동시에 이루어져야 하는데, 예외도 있다.
// 변수의 정의 2단계
var year // 1단계 - 변수 선언
year = 1999 // 2단계 - 변수 초기화
변수와 상수의 이름 정의 규칙
1. 알파벳과 한글 자음 및 모음, 아라비아 숫자를 사용할 수 있으며, 특수 기호나 한자, 이미지용 바이너리 코드까지 사용할 수 있다.
var str = "문자열" // 사용 가능
var 마스터 = "하하" // 사용 가능
var ☆ = "star" // 사용 가능
var 韓國 = "한국" // 사용 가능
2. 연산자와 혼동할 수 있는 [ +, -, *, / ] 및 공백은 사용할 수 없다. 단, _(언더바)는 사용할 수 있다.
var abc+t = "abc plus t" // + 연산자가 들어가기 때문에 사용 불가
var abc_t = "abc underbar t" // 언더바는 예외적으로 사용 가능
3. 스위프트에서 예약어나 키워드로 등록되어 있는 단어는 변수나 상수명에 사용할 수 없다. 단, 대소문자를 바꾸어 사용하는 것은 가능하다.
var class = 1 // 'class'는 클래스 정의를 위한 키워드
var protocol = 2 // 'protocol'은 프로토콜 정의를 위한 키워드
var Class = 3 // 사용 가능
var Protocol = 4 // 사용 가능
4. 변수, 상수명의 첫 번째 자리에 숫자가 올 수 없다.
var 1abc = 123 // 사용 불가
var 2bcd = 345 // 사용 불가
var a123bc = 123 // 두 번쨰 자리부터는 숫자 사용 가능
var b234cd = 345 // 두 번쨰 자리부터는 숫자 사용 가능
단, '할 수 있다'와 '한다'는 엄연히 다르다.
실무에서는 영어, 숫자, 밑줄만 사용하고 이외 다른 문자나 기호는 사용하지 않아야 한다.
참고사항
- '=' 연산자와 초기값 사이에 가독성을 위해 공백을 두는 것은 스위프트에서 무시하기 때문에 상관없다. 단, 공백 여부는 연산자의 앞과 뒤에 모두 동일하게 적용되어야 한다.
let birthYear =1980 // X
let birthYear= 1980 // X
let birthYear = 1980 // O
출처: 꼼꼼한 재은씨의 Swift: 문법편
'iOS > 개념' 카테고리의 다른 글
[Swift] 클로저(Closure)란? (0) | 2022.04.09 |
---|---|
[Swift] 스위프트 문법 특성 (0) | 2022.04.01 |
[Swift] 함수 타입이란? (Function Types) (0) | 2022.03.19 |
[Swift] 프로퍼티 (Properties) 종류 (저장 or 연산 or 타입) (0) | 2022.03.08 |
[Swift] SwiftUI Stack (VStack, HStack, ZStack) (0) | 2022.02.23 |