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)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
DevCho
IOS/Swift

[Swift] struct 내부에서 변수값 변경하기

[Swift] struct 내부에서 변수값 변경하기
IOS/Swift

[Swift] struct 내부에서 변수값 변경하기

2021. 12. 19. 20:03
반응형

struct의 immutability

struct는 한 번 생성자를 초기화하면 struct 내부에서는 var 로 선언되더라도 프로퍼티의 값을 바꿀 수 없게된다. 예를 들어 아래와 같이 struct Person에  addAge를 하는 코드를 넣어본 후 실행해보자.

struct Person {
    let name: String
    var age: Int
    let temperature: Float
    
    init(_name: String, _age: Int, _temperature : Float) {
        name = _name
        age = _age
        temperature = _temperature
    }
    
    func addAge() {
        age += 1
    }
}

 

아래와 같이 age가 immutable 하다는 warning이 뜬다. 이유는 초기화 후에는 struct의 self가 immutable이 되어서 내부에서는 self.age로 접근하게 되면 오류가 생기는 것이다.

 

그림1. immutable

 

 

이를 해결하는 방법은 다음과 같이 mutating 키워드를 func의 앞에 붙이는 것이다. 그러면 해당 func은 struct의 self의 var 프로퍼티들을 바꿀 수 있게된다.

struct Person {
    let name: String
    var age: Int
    let temperature: Float
    
    init(_name: String, _age: Int, _temperature : Float) {
        name = _name
        age = _age
        temperature = _temperature
    }
    
    mutating func addAge() {
        age += 1
    }
}

 

아래와 같이 오류가 안나는 것을 확인할 수 있다.

 

그림2. mutating

 

주의할 점은 아래 3가지를 모두 만족시켜야 struct 내부 프로퍼티 변경이 struct내부 함수에서 동작한다는 점이다.

  • struct의 프로퍼티(age)가 var로 선언이되어야 한다.
  • 바깥에서 초기화하는 변수(person)가 var로 선언되어야 한다.
  • struct 내부 함수에 mutating이 붙어야 한다

이는 불변성에 대한 안전장치로 보인다.

반응형

'IOS > Swift' 카테고리의 다른 글

[Swift] protocol이란 무엇인가?  (0) 2021.12.22
[Swift] Struct와 Class의 차이는 무엇인가?  (0) 2021.12.20
[Swift] struct 한 번에 정리하기  (1) 2021.12.19
[Swift 제어문] switch case 사용해 다중 조건 처리하기  (0) 2021.12.19
[Swift 제어문] if 문 다루는 방법 한 번에 정리하기  (0) 2021.12.19
  • struct의 immutability
'IOS/Swift' 카테고리의 다른 글
  • [Swift] protocol이란 무엇인가?
  • [Swift] Struct와 Class의 차이는 무엇인가?
  • [Swift] struct 한 번에 정리하기
  • [Swift 제어문] switch case 사용해 다중 조건 처리하기
DevCho
DevCho
개발자의 개발 공간

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.