Swift Academy · 강의

비변경 대안

제자리에서 변경하는 대신 새 값을 반환합니다.

레슨 4/413개 단계

비변경 대안은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

변경하는 대신 반환하기

인스턴스를 직접 변경하는 대신, 비변경 메서드가 변경 사항이 적용된 새로운 값을 반환하도록 할 수 있습니다.

struct Counter {
    var value: Int
    func incremented() -> Counter {
        return Counter(value: value + 1)
    }
}
let c = Counter(value: 0)
let next = c.incremented()
print(c.value, next.value)

원본은 변경되지 않음

아무것도 변경하지 않으므로 원래 값은 보존되고 새로운 값이 만들어집니다.

struct Vector {
    var x: Int
    var y: Int
    func scaled(by factor: Int) -> Vector {
        return Vector(x: x * factor, y: y * factor)
    }
}
let v = Vector(x: 2, y: 3)
let big = v.scaled(by: 10)
print(v.x, v.y, big.x, big.y)

상수 인스턴스에서도 작동함

비변경 메서드는 수신 객체를 변경하지 않으므로 let 상수에서도 호출할 수 있습니다.

struct Money {
    var cents: Int
    func plus(_ other: Int) -> Money {
        return Money(cents: cents + other)
    }
}
let m = Money(cents: 100)
print(m.plus(50).cents)

이름 지정 규칙

스위프트의 관례에 따르면 변경 메서드에는 명령형 동사(sort)를 사용하고, 비변경 메서드에는 과거분사형이나 -ed/-ing 형태(sorted)를 사용합니다.

var nums = [3, 1, 2]
let ordered = nums.sorted()
nums.sort()
print(ordered, nums)

sorted와 sort 비교

표준 라이브러리도 이 관례를 따릅니다. sorted()는 새 배열을 반환하고 sort()는 현재 배열을 직접 변경합니다.

let a = [5, 2, 8, 1]
let b = a.sorted()
print(a)
print(b)

reversed와 반전 동작 비교

마찬가지로 reversed()는 비변경 방식입니다. 여기서는 Array로 실제 배열을 만들어 사용합니다.

let a = [1, 2, 3]
let b = Array(a.reversed())
print(a, b)

비변경 호출 연결

비변경 메서드는 값을 반환하므로 여러 메서드를 자연스럽게 연결할 수 있습니다.

let result = [4, 2, 9, 1].sorted().map { $0 * 2 }
print(result)

함수형 스타일

변경하는 대신 새로운 값을 반환하면 테스트하고 동작을 추론하기 쉬운 함수형 스타일을 사용할 수 있습니다.

struct Account {
    var balance: Int
    func deposited(_ n: Int) -> Account {
        return Account(balance: balance + n)
    }
}
let a0 = Account(balance: 0)
let a1 = a0.deposited(100).deposited(50)
print(a0.balance, a1.balance)

공유 상태 오류 방지

새로운 값을 만들면 의도하지 않은 공유 변경을 방지할 수 있어, 특히 여러 스레드에서 유용합니다.

struct Settings {
    var volume: Int
    func with(volume newVolume: Int) -> Settings {
        return Settings(volume: newVolume)
    }
}
let base = Settings(volume: 5)
let loud = base.with(volume: 11)
print(base.volume, loud.volume)

대신 변경해야 할 때

반복문에서 하나의 인스턴스를 계속 업데이트한다면, 복사본을 많이 만드는 것보다 직접 변경하는 편이 효율적일 수 있습니다.

var total = 0
for n in 1...5 {
    total += n
}
print(total)

두 방식 모두 제공하기

잘 설계된 타입은 표준 라이브러리처럼 두 방식을 모두 제공하여, 호출하는 쪽에서 변경할지 새로운 값을 사용할지 선택하게 하기도 합니다.

struct Text {
    var value: String
    func uppercased() -> Text {
        return Text(value: value.uppercased())
    }
    mutating func uppercase() {
        value = value.uppercased()
    }
}
var t = Text(value: "hi")
let u = t.uppercased()
t.uppercase()
print(u.value, t.value)

빠른 확인

비변경 설계를 테스트합니다.

복습

변경의 대안으로 비변경 메서드는 변경 사항이 적용된 새로운 값을 반환하므로 원본을 그대로 유지하고 let 인스턴스에서도 사용할 수 있습니다. 스위프트에서는 명령형 이름(sort)과 -ed/-ing 형태의 이름(sorted)을 짝지어 사용하는 것이 관례입니다.

let a = [3, 1, 2]
let b = a.sorted()
print(a, b)
무료로 시작

AI 튜터와 함께 Swift을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
122
레슨
409

자주 묻는 질문

“비변경 대안” 강의는 무료인가요?

네 — “비변경 대안” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“비변경 대안”에서 뭘 배우나요?

제자리에서 변경하는 대신 새 값을 반환합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“비변경 대안” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 값 형식과 불변성
  2. mutating 키워드
  3. mutating과 self 재할당
  4. 비변경 대안
← Swift Academy(으)로 돌아가기