var과 let의 차이는 무엇인가?
var은 설정된 값이 변할 수 있는 가변 변수이고 let은 설정된 값이 변할 수 없는 불변 변수이다.
var : 가변(Mutable) 변수
var은 설정된 값이 변할 수 있는 변수이다.
예를 들어 아래와 같이 a를 var로 선언하고 reassign하는 코드를 실행했다고 해보자.
var a = 1
print("a: \(a)")
a = 3
print("[changed] a: \(a)")
a의 값은 1에서 3으로 바뀌고 바뀐 a값이 프린트 될 것이다.

let: 불변(Immutable) 변수
let은 설정된 값이 변할 수 없는 변수이다.
예를 들어 아래와 같이 a를 let로 선언하고 reassign하는 코드를 실행했다고 해보자.
let a = 1
print("a: \(a)")
a = 3
print("[changed] a: \(a)")
a는 바뀔 수 없는 값이기 때문에 컴파일러는 오류를 내뱉을 것이다.

애러 메세지는 다음과 같다.
error: MyPlayground.playground:4:1: error: cannot assign to value: 'a' is a 'let' constant
아래에서 a는 let으로 선언되었기 때문에 다시 assign 될 수 없다는 뜻이다.
클래스 내부 프로퍼티들에도 불변성이 적용되는가?
다른 언어들에서는 클래스 내부 프로퍼티들에 대해 적용이 안되는 경우가 많다. 예를 들어 Kotlin의 경우 var, val을 통해 가변변수와 불변변수를 선언할 수 있지만 val로 선언되더라도 클래스 내부의 프로퍼티는 변화시킬 수 있다.
하지만, Swift에서 let으로 선언할 경우 내부 변수까지 불변성이 적용된다.

불변성은 왜 중요한가?
멀티스레드 관점
멀티 스레드 프로그래밍에서 변수 값이 여러 스레드에서 바뀌게 된다면 제어할 수 없게 되는 문제가 생긴다. 이 때문에 변수는 최대한 불변값으로 선언해야 안전한 멀티 스레드 프로그래밍을 할 수 있다.
함수형 프로그래밍 관점
함수형 프로그래밍에서 함수는 동일한 Input이 들어왔을 때 동일한 Output을 내뱉는 동작을 해야한다. 하지만 함수 내부에 가변 변수가 들어갔을 때 해당 가변 변수로 인해 값이 변화할 수 있다. 동작 변화에 대한 안전성을 확보하기 위해 불변 변수를 사용하는 것이 필요하다.
'IOS > Swift' 카테고리의 다른 글
[Swift 제어문] if 문 다루는 방법 한 번에 정리하기 (0) | 2021.12.19 |
---|---|
[Swift] Optional을 다루는 다양한 방법 : nil 다루기 (0) | 2021.12.19 |
[Swift] nil 과 Optional 이란 무엇인가? (0) | 2021.12.19 |
[Swift] suffled 사용해 Array 순서를 랜덤으로 바꾸기 (0) | 2021.12.09 |
[Swift] Random 값을 뽑아내는 다양한 방법 : Random 숫자, Collection Random 값 뽑기 (0) | 2021.12.09 |