Apple-CS-interview / iOS-CS-interview

7 stars 0 forks source link

mutating 키워드에 대해 설명하시오. #20

Open vichye-1 opened 11 months ago

vichye-1 commented 11 months ago

Value Type 과 Reference Type의 Copy 차이

mutating 키워드

Structures and enumerations are value types. By default, the properties of a value type can’t be modified from within its instance methods. from) docs.swift.org - methods

  • 따라서 구조체 내에서 프로퍼티를 수정하기 위해 mutating키워드를 사용한다.

사용예

struct Person {
    let name: String
    var age: Int

    func changeAge() {
        age = 10 // error: cannot assign to property: 'self' is immutable
    }
}

mutating 키워드 이용

struct Person {
    let name: String
    var age: Int

    mutating func changeAge() {
        age = 10
    }
}

var human = Person(name: "Knockknock", age: 20)
human.changeAge()
print(human.age)  // 10

참고

Do-hyun-Kim commented 11 months ago

mutating 키워드에 대해 설명하시오.

struct Jenny {
    var age: Int
    var name: String
    let job: String

    init(age: Int, name: String, job: String) {
        self.age = age
        self.name = name
        self.job = job
    }

    // Error: Left side of mutating operator isn't mutable: 'self' is immutable
    func changeAge() {
        self.age += 1
    }

    mutating func changeAge() {
        self.age += 1
    }

    mutating func AllChange(age changeAge: Int, name changeName: String, job changeJob: String) {
        self = Jenny(age: age + changeAge, name: changeName, job: changeJob)
    }

    // Error: Left side of mutating operator isn't mutable: 'job' is a 'let' constant
    mutating func changeJob() {
        self.job += "바리스타"
    }

}

var human: Jenny = Jenny(age: 21, name: "Dohyun", job: "바리스타")
human.AllChange(age: 4, name: "Jun", job: "프로그래머")

Mutating 키워드란?

📝 참고 사이트

Hminchae commented 11 months ago

Types in Swift

struct Bread {
    var name: String

    mutating func makeBread() {
        name = "IDK"
    }
}

var bread = Bread(name: "sikbbang")
bread.makeBread()

var sikbbang = Bread(sugar: 33.3) sikbbang.changeSugar(to: 10.7) print(sikbbang) //Bread(sugar: 44.0)


### 참조
- [[Swift] mutating 키워드](https://velog.io/@parkgyurim/Swift-Mutating)
- [Swift : 기초문법 [메서드 #2 mutating]](https://seons-dev.tistory.com/entry/Swift-%EA%B8%B0%EC%B4%88%EB%AC%B8%EB%B2%95-%EB%A9%94%EC%84%9C%EB%93%9C-2-mutating)
ronick-grammer commented 11 months ago

Mutating 이란

값 타입인 struct, enum 타입의 메서드 내에서 프로퍼티의 값을 변경할 수 있도록 해주는 키워드이다.

struct {
  var property: Int

  ...

  func change() {
    self.property = 10 // 에러
  }

   mutating func changeMutating() {
    self.property = 10 // 성공
  }
}

📝 참고 사이트