TIL: 참고) @discardableResult

Royce·2025년 3월 16일

Swift 문법

목록 보기
16/63

Attribute Keyword(어트리뷰트 키워드)

  • Swift에서 Attribute Keyword(어트리뷰트 키워드)는 @ 기호로 시작하며, 컴파일러에게 특정한 동작을 지시하는 메타데이터이다
  • 즉, 코드의 특정 부분에 특별한 속성을 부여하여 컴파일러가 어떠헥 처리해야 하는지 알려주는 역할을 한다

Attribute Keyword(어트리뷰트 키워드)를 사용하는 이유

  • 컴파일러의 동작을 조정
  • 가독성을 높이고 코드의 의도를 명확하게 한다
  • Objective-C와의 호환성 제공
  • 불필요한 경고를 방지하거나 최적화를 돕기 위해 사용

Swift에서 자주 사용하는 Attribute Keyword

Attribute Keyword설명
@discardableResult반환값을 사용하지 않아도 경고를 발생시키지 않음
@IBOutletInterface Builder와 연결되는 UI 요소를 나타냄
@IBActionInterface Builder에서 버튼 클릭 등의 액션을 연결할 때 사용
@objcObjective-C 코드와 상호작용할 수 있도록 만듦
@available특정 OS 버전에서만 사용할 수 있도록 제한
@escaping클로저가 함수의 실행이 끝난 후에도 유지됨을 나타냄
@frozen구조체 또는 열거형이 변경되지 않음을 나타냄
@inlinable함수를 인라인(inline)으로 최적화하여 성능을 높임
@propertyWrapper프로퍼티의 동작을 커스텀할 수 있도록 함
@mainSwiftUI 앱의 진입점을 정의할 때 사용

@discardableResult

  • Swift에서는 일반적으로 함수의 반환값을 사용하지 않으면 경고(Warning)가 발생한다
  • 하지만 어떠한 경우에는 반환값을 반드시 사용할 필요가 없는데, 이럴 때 @discardableResult 어트리뷰트를 사용하면 경고 없이 반환값을 무시할 수 있다

사용 예제

1. @discardableResult 없이 반환값을 무시하는 경우(경고 발생)

func multiply(_ a: Int, _ b: Int) -> Int {
    return a * b
}

multiply(3, 4) // ⚠️ "Result of call to 'multiply' is unused"
  • multiply(3, 4) 의 반환값을 사용하지 않기 때문에 경고가 발생한다

2. @discardableResult를 사용하여 경고 제거

@discardableResult
func multiply(_ a: Int, _ b: Int) -> Int {
    return a * b
}

multiply(3, 4) // ✅ 경고 없이 실행됨
  • @discardableResult 를 추가하면, 반환값을 사용하지 않아도 경고가 사라진다

3. 메서드 체이닝에 활용

class Counter {
    var count = 0

    @discardableResult
    func increment() -> Int {
        count += 1
        return count
    }
}

let counter = Counter()
counter.increment() // 반환값을 사용하지 않아도 경고 없음
counter.increment() // 반환값 사용 X ✅
let result = counter.increment() // 반환값 사용 O ✅
print(result) // 3
  • @discardableResult 덕분에 increment() 를 호출할 때 반환값을 사용하지 않아도 경고가 발생하지 않는다

@discardableResult 는 언제 사용하면 좋을까?

  • 메서드 체이닝을 지원할 때:
    메서드를 연달아 호출할 수 있도록 설계할 때 반환값을 무시할 수 있도록 한다
  • 반환값이 있지만 반드시 사용할 필요는 없을 때:
    특정 함수가 결과값을 반환하지만, 호출하는 사람이 이를 사용하지 않아도 문제가 없을 경우
  • 불필요한 경고를 피하기 위해:
    사용자가 반환값을 필요로 하지 않는다면, 경고를 방지할 수 있다
profile
iOS 개발자 지망생

0개의 댓글