mutating과 self 재할당
mutating 메서드에서 self 전체를 교체합니다.
mutating과 self 재할당은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
인스턴스 자체 재할당
mutating 메서드 내부에서는 self에 완전히 새로운 값을 할당하여 인스턴스 전체를 바꿀 수 있습니다.
struct Point {
var x = 0
var y = 0
mutating func reset() {
self = Point(x: 0, y: 0)
}
}
var p = Point(x: 3, y: 4)
p.reset()
print(p.x, p.y)인스턴스 자체를 재할당하는 이유
새 상태를 필드별로 하나씩 수정하는 것보다 새 인스턴스로 표현하는 편이 쉬울 때 self를 재할당하면 편리합니다.
struct Vector {
var dx: Int
var dy: Int
mutating func negate() {
self = Vector(dx: -dx, dy: -dy)
}
}
var v = Vector(dx: 2, dy: -3)
v.negate()
print(v.dx, v.dy)열거형에서 인스턴스 자체 재할당
열거형에서는 self에 새로운 경우를 할당하여 경우를 전환합니다.
enum State {
case idle, running, done
mutating func advance() {
switch self {
case .idle: self = .running
case .running: self = .done
case .done: self = .done
}
}
}
var s = State.idle
s.advance()
s.advance()
print(s)필드 수정과 동일함
self = Point(x: 1, y: 1)을 할당하는 것은 x와 y를 각각 설정하는 것과 같으며, 더 간결합니다.
struct Point {
var x = 0
var y = 0
mutating func setBoth(_ n: Int) {
self = Point(x: n, y: n)
}
}
var p = Point()
p.setBoth(7)
print(p.x, p.y)기존 인스턴스를 먼저 읽기
재할당하기 전에 현재 인스턴스를 바탕으로 새로운 인스턴스를 계산할 수 있습니다.
struct Counter {
var value: Int
mutating func doubled() {
self = Counter(value: value * 2)
}
}
var c = Counter(value: 5)
c.doubled()
print(c.value)빌더 방식의 변환
인스턴스 자체를 재할당하면 메서드에서 완전한 변환을 한 단계로 표현할 수 있습니다.
struct Temperature {
var celsius: Double
mutating func toRounded() {
self = Temperature(celsius: celsius.rounded())
}
}
var t = Temperature(celsius: 21.7)
t.toRounded()
print(t.celsius)변경 메서드에서만 가능
mutating으로 표시된 메서드 내부에서만 self에 할당할 수 있습니다. 일반 메서드에서는 할 수 없습니다.
struct Flag {
var on = false
mutating func turnOn() {
self = Flag(on: true)
}
}
var f = Flag()
f.turnOn()
print(f.on)논리와 결합하기
조건에 따라 분기한 후 일부 경우에만 self를 재할당할 수 있습니다.
struct Score {
var points: Int
mutating func clamp() {
if points > 100 {
self = Score(points: 100)
}
}
}
var s = Score(points: 150)
s.clamp()
print(s.points)열거형 토글 패턴
두 경우로 이루어진 열거형의 토글은 인스턴스 자체 재할당을 보여 주는 대표적인 예입니다.
enum Switch {
case off, on
mutating func flip() {
self = (self == .off) ? .on : .off
}
}
var sw = Switch.off
sw.flip()
print(sw)다른 복사본에는 영향 없음
self를 재할당해도 현재 인스턴스만 변경됩니다. 값의 다른 복사본은 그대로 유지됩니다.
struct Box { var n: Int; mutating func zero() { self = Box(n: 0) } }
var a = Box(n: 5)
var b = a
a.zero()
print(a.n, b.n)의도가 잘 드러나는 코드
변환 과정이 명확하게 드러날 때는 인스턴스 자체를 재할당하고, 속성 하나만 변경할 때는 필드를 수정하십시오.
struct Pair {
var a: Int
var b: Int
mutating func swapValues() {
self = Pair(a: b, b: a)
}
}
var p = Pair(a: 1, b: 2)
p.swapValues()
print(p.a, p.b)빠른 확인
인스턴스 자체 재할당을 테스트합니다.
복습
mutating 메서드 내부에서는 self에 완전히 새로운 값을 할당하여 인스턴스를 바꿀 수 있습니다. 전체 변환을 간결하게 표현할 때 유용하며, 열거형이 경우를 전환하는 방식이기도 합니다. 변경되는 것은 현재 인스턴스뿐이고 다른 복사본에는 영향을 주지 않습니다.
enum T { case a, b; mutating func go() { self = .b } }
var t = T.a
t.go()
print(t)자주 묻는 질문
“mutating과 self 재할당” 강의는 무료인가요?
네 — “mutating과 self 재할당” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“mutating과 self 재할당”에서 뭘 배우나요?
mutating 메서드에서 self 전체를 교체합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“mutating과 self 재할당” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 값 형식과 불변성
- mutating 키워드
- mutating과 self 재할당
- 비변경 대안