← 아카이브로 돌아가기

Development · Swift

Swift의 Any, AnyObject와 함수 타입

여러 타입을 담는 Any와 클래스 인스턴스만 받는 AnyObject의 차이, 매개변수 표현과 일급 객체로서의 함수를 정리합니다.

Velog 원문 보기 ↗

Development 아카이브 표지

Swift는 정적 타입 언어이지만 여러 종류의 값을 다뤄야 할 때 Any와 AnyObject를 제공한다. 함수 역시 타입을 가지므로 변수에 저장하거나 다른 함수에 전달할 수 있다.

Any와 AnyObject

Any는 값 타입과 참조 타입을 포함한 모든 타입을, AnyObject는 클래스 인스턴스만 담는다.

var value: Any = 100
value = "Swift"

final class Profile {}
var object: AnyObject = Profile()

var optionalValue: Any? = nil

구체적인 타입 정보가 사라져 사용할 때 캐스팅이 필요하므로 범위를 좁혀 쓰는 것이 좋다. nil을 저장하려면 옵셔널로 선언해야 한다.

매개변수와 함수 타입

func greet(_ name: String, job: String = "designer") {
    print("Hi, I'm \(name), \(job).")
}

let action: (String, String) -> Void = greet
action("snack", "developer")

func run(_ action: (String, String) -> Void) {
    action("snack", "designer")
}

기본값은 호출의 반복을 줄이고 전달인자 레이블은 값의 역할을 명확히 한다. 함수는 변수에 저장하고 매개변수로 전달하거나 반환할 수 있는 일급 값이다.

← 아카이브로 돌아가기