학습 기록/swift

external/internal argument, @discardableResult

romi__ 2024. 11. 23. 12:49

/Swift

 

📌 external/internal argument

함수 내에서 argument를 지칭할 때 쓰는 이름과 외부에서 사용하는 이름을 각기 다르게 지정해 줄 수 있다.

func greet(to name: String) {
    print("안녕, \(name)!")
}

 

위의 예시에서 to는 external argument, name은 internal argument라고 할 수 있다. 때문에 name을 함수 내부에서 사용하고 있다.

 

greet(to: "유치원생")
// 결과: "안녕, 유치원생!"

 

함수를 호출할 때는 to를 사용한다. 하지만 함수가 실행되는 내부에서는 name으로 데이터를 불러와 사용하고 있다.

 

external argument 없이 함수를 사용하는 경우도 있다. 그럴땐 _ (언더스코어)를 붙여서 표시해 준다.

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

 

이렇게 언더스코어로 표시를 해주면 external argument 없이 함수를 호출해서 데이터를 넣어주어도 무방하다.

 

greet("유치원생")
// 결과: "안녕, 유치원생!"

 

참고로 external argument에는 어떤 단어를 넣어주어도 무방하지만, 주로 to, for, from과 같이 데이터의 관계를 알 수 있는 단어로 설정하곤 한다. 예시 코드를 살펴보자.

 

func calculate(from start: Int, to end: Int) -> Int {
    return end - start
}

let result = calculate(from: 5, to: 10)
print(result) // 5

 

함수의 의도를 좀 더 명확히 할 수 있는 external argument를 지정하도록 하자.

 

 

📌 @discardableResult

 

날짜 플래너: 데이터 모델 이해하기 및 동적 목록 생성하기

📌Swift Playgrounds  📌 앱 구성@StateObject private var eventData = EventData() - 속성 래퍼변수를 좀 더 쉽게 선언하고 관리할 수 있도록 함: 변수를 관리하고 추적. @로 시작특정 작업을 자동으로 해주는

romiwaves.tistory.com

 

위의 게시글에서 속성 래퍼에 대해 살펴보았다. @로 시작하는 속성 래퍼들이 여러 가지 있고, 이 속성 래퍼들은 변수를 좀 더 쉽게 선언하고 관리할 수 있도록 도와준다. 나는 @discardableResult도 @로 시작하길래, 속성 래퍼인 줄 알았는데 아니었다.

 

 

속성 래퍼는 속성을 감싸는 역할을 하고, 데이터를 저장하거나 관리하는 방식에 영향을 준다. 대표적으로 @State, @Published, @AppStorage 등이 있다. 반면 @discardableResult의 경우는 특별한 함수 속성(attribute)이다. 함수에서 반환값을 사용하지 않더라도 시스템에서 경고를 띄우지 않고 그냥 넘어가도록 컴파일러에게 알려 주는 역할을 한다.

 

Swift는 기본적으로 함수의 반환값을 사용하지 않으면 경고를 띄운다. 하지만 모든 함수가 반환값을 사용할 필요는 없다. 때문에 @discardableResult를 사용하는 것.

 

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

add(3, 5) // 결과를 사용하지 않으니 경고가 뜸

 

@discardableResult를 사용하지 않은 함수에서 반환값을 사용하지 않으면 경고가 발생한다.

 

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

// 결과를 사용하지 않아도 경고가 없음
addNumbers(3, 5)

// 결과를 사용해도 OK
let result = addNumbers(10, 20)
print(result) // 30

 

@discardableResult를 사용하면 결과를 사용하지 않아도 괜찮고, 결과를 사용해도 좋다.

 

 

 

속성 래퍼와 @discardableResult는 그 목적과 사용처가 완전히 다르다는 것을 알아두자.

'학습 기록 > swift' 카테고리의 다른 글

function  (0) 2024.11.22
if and else  (0) 2024.11.21
Operators  (0) 2024.11.20
NSArray, NSMutableArray  (0) 2024.11.19
Hello World + Variables  (0) 2024.11.18