DevCho
Developer Blog
DevCho
반응형
전체 방문자
오늘
어제
  • 분류 전체보기 (48)
    • IOS (31)
      • Xcode (7)
      • Assets (1)
      • Swift (20)
      • UI (1)
      • SwiftUI (1)
      • Build (1)
    • Flutter (4)
      • Install (4)
      • Dart (0)
    • Rust (0)
    • 유용한 사이트 소개 (1)
    • 개발자의 아이템 (1)
    • Terminal (1)
    • Mac (2)
    • Git (1)
    • 회고 (1)
    • Java (2)
      • Java 기본 사용법 (2)
      • Collections (0)
    • 개발자의 글쓰기 (0)
    • 디자인 패턴 (1)
    • JavaScript (2)
    • Kotlin (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • swift random
  • chocolatey
  • Java
  • random number
  • flutter
  • flutter dart
  • 스위프트
  • Xcode Theme
  • 제어문
  • optional
  • 플러터 설치
  • struct
  • chocolatey install
  • xcode13
  • dart 설치
  • SwiftUI
  • Terminal
  • Dark mode
  • CLASS
  • flutter 설치
  • chocolatey 설치
  • nil
  • IOS
  • xcode
  • MAC
  • dart
  • flutter install
  • Swift
  • Storyboard
  • func

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
DevCho

Developer Blog

Swift의 var과 let의 차이는 무엇인가?
IOS/Swift

Swift의 var과 let의 차이는 무엇인가?

2021. 12. 9. 22:28
반응형

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값이 프린트 될 것이다.

그림1. var

 

let: 불변(Immutable) 변수

let은 설정된 값이 변할 수 없는 변수이다. 

 

예를 들어 아래와 같이 a를 let로 선언하고 reassign하는 코드를 실행했다고 해보자.

let a = 1
print("a: \(a)")

a = 3
print("[changed] a: \(a)")

a는 바뀔 수 없는 값이기 때문에 컴파일러는 오류를 내뱉을 것이다.

그림2. let constant

애러 메세지는 다음과 같다.

error: MyPlayground.playground:4:1: error: cannot assign to value: 'a' is a 'let' constant

아래에서 a는 let으로 선언되었기 때문에 다시 assign 될 수 없다는 뜻이다.

 

클래스 내부 프로퍼티들에도 불변성이 적용되는가?

다른 언어들에서는 클래스 내부 프로퍼티들에 대해 적용이 안되는 경우가 많다. 예를 들어 Kotlin의 경우 var, val을 통해 가변변수와 불변변수를 선언할 수 있지만 val로 선언되더라도 클래스 내부의 프로퍼티는 변화시킬 수 있다.

 

하지만, Swift에서 let으로 선언할 경우 내부 변수까지 불변성이 적용된다. 

그림3. 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
    'IOS/Swift' 카테고리의 다른 글
    • [Swift] Optional을 다루는 다양한 방법 : nil 다루기
    • [Swift] nil 과 Optional 이란 무엇인가?
    • [Swift] suffled 사용해 Array 순서를 랜덤으로 바꾸기
    • [Swift] Random 값을 뽑아내는 다양한 방법 : Random 숫자, Collection Random 값 뽑기
    DevCho
    DevCho
    개발자의 개발 공간

    티스토리툴바