프로그래밍공부(Programming Study)/IOS 개발

Swift에서 언더스코어(_)의 다양한 사용 방법: 값 무시부터 패턴 매칭까지

Chann._.y 2024. 10. 25.
728x90

1. 언더스코어의 개념

언더스코어(_)는 Swift에서 여러 상황에서 쓰일 수 있는 다목적 문법 요소입니다. 이를 통해 필요하지 않은 값을 무시하거나 외부 파라미터 레이블을 생략할 수 있습니다. 또한, 패턴 매칭에서 값을 추출하지 않으려는 경우에도 자주 사용됩니다.


2. 언더스코어의 주요 사용처

2.1 값 무시

변수나 튜플에서 특정 값을 무시할 때 언더스코어를 사용합니다. 이를 통해 코드를 간결하게 만들 수 있습니다.

let person = (name: "Alice", age: 30)
let (_, age) = person  // 이름은 무시하고 나이만 사용
print(age)  // 출력: 30

이와 같은 경우, 튜플의 일부 값이 필요하지 않다면, 언더스코어로 그 값을 무시할 수 있습니다.

2.2 외부 파라미터 레이블 무시

Swift에서 함수 파라미터는 외부 레이블을 가질 수 있습니다. 하지만 때로는 외부 레이블이 불필요할 수 있는데, 이때 _를 사용해 외부 레이블을 무시할 수 있습니다.

func greet(_ name: String) {
    print("Hello, \(name)!")
}

greet("John")  // 출력: Hello, John!

위 코드에서 외부 레이블을 생략해 호출 시 greet(name:) 대신 단순히 greet()를 사용하도록 했습니다.

2.3 와일드카드 패턴

패턴 매칭에서 언더스코어는 와일드카드 역할을 하며, 특정 값에 상관없이 처리하는 경우에 사용됩니다. 예를 들어 switch 문에서 불필요한 케이스를 무시할 때 유용합니다.

let numbers = [1, 2, 3, 4, 5]
for number in numbers {
    switch number {
    case 1:
        print("One")
    case 2:
        print("Two")
    case _:
        print("Other number")
    }
}

위의 switch 문에서 case _는 나머지 모든 경우를 처리합니다.

2.4 클로저에서 사용되지 않는 파라미터

클로저를 정의할 때, 사용되지 않는 매개변수를 언더스코어로 대체하여 명시적으로 무시할 수 있습니다. 이를 통해 코드가 간결해지고, 명확하게 불필요한 요소를 나타낼 수 있습니다.

let numbers = [1, 2, 3]
numbers.forEach { _ in
    print("Value ignored")
}

여기서 반복문 안에서 값을 무시하고, 단순히 지정된 작업만 수행하도록 작성했습니다.

2.5 SwiftUI에서의 State와 Binding

SwiftUI에서는 상태 관리를 위해 @State@Binding을 사용합니다. 언더스코어는 프로퍼티 래퍼에 접근할 때 유용하게 사용됩니다. 예를 들어, @State 변수를 직접 참조하거나 접근할 때 언더스코어를 사용합니다.

import SwiftUI

struct CounterView: View {
    @State private var count = 0

    var body: some View {
        VStack {
            Text("Count: \(count)")
            Button("Increment") {
                _count += 1  // 상태에 접근하는 언더스코어 사용
            }
        }
    }
}

여기서 @State로 선언된 count 변수는 언더스코어가 붙은 형태로 상태를 관리하는 객체로 접근할 수 있습니다.


3. 언더스코어 사용의 장단점

장점

  • 가독성 향상: 불필요한 값을 명확하게 무시할 수 있어 코드를 더 간결하게 만듭니다.
  • 패턴 매칭의 유용성: 특정 값만 필요할 때 나머지를 무시함으로써 명확한 코드를 작성할 수 있습니다.
  • SwiftUI와의 통합: SwiftUI에서 상태 관리를 할 때 필수적인 요소입니다.

단점

  • 남용 시 혼란: 너무 많은 언더스코어 사용은 코드의 의미를 불명확하게 만들 수 있습니다.
  • 중요한 정보 무시 가능성: 무시할 값이 실제로 중요한 정보일 수도 있으므로 신중한 사용이 필요합니다.

4. 구체적인 사용 예시

4.1. 값 무시 예시

let (firstName, _, age) = ("John", "Doe", 25)
print("\(firstName)'s age is \(age)")  // 출력: John's age is 25

튜플에서 불필요한 값을 무시하는 방법입니다.

4.2. 외부 파라미터 레이블 무시 예시

func add(_ a: Int, _ b: Int) -> Int {
    return a + b
}

let result = add(4, 5)
print(result)  // 출력: 9

외부 파라미터 레이블을 무시하여 함수 호출을 간소화하는 예제입니다.

4.3. 와일드카드 패턴 예시

let points = [(1, 2), (3, 4), (5, 6)]
for (_, y) in points {
    print("Y-coordinate: \(y)")
}

위 코드에서 x 값을 무시하고, y 값만 사용하여 출력을 간단하게 만들었습니다.

4.4. SwiftUI에서의 상태 접근

import SwiftUI

struct CounterView: View {
    @State private var count = 0

    var body: some View {
        VStack {
            Text("Count: \(count)")
            Button(action: {
                count += 1
            }) {
                Text("Increment")
            }
        }
    }
}

SwiftUI에서 상태 관리를 통해 값을 직접적으로 수정하는 코드입니다.


결론

Swift의 언더스코어(_)는 코드 가독성을 높이고 불필요한 값을 무시하거나 패턴 매칭을 간소화하는 데 매우 유용한 도구입니다. 또한 SwiftUI에서 상태 관리와 관련된 중요한 역할도 수행합니다. 적절한 상황에서 언더스코어를 활용하면 더 깔끔하고 유지보수하기 쉬운 코드를 작성할 수 있습니다.

728x90

댓글