IOS

[Swift] 1급시민, 1급객체, 1급함수와 Closure란?

용성군 2021. 9. 12. 23:52
728x90
반응형

출처 : https://developer.apple.com/kr/swift/

1급시민

1급시민이란 다음과 같은 조건을 만족하는 것을 말한다. 혹시나 다음의 조건이 이해가 되지않는다고 해도 글을 읽으면 아래에 예시로 설명되어있으니 걱정하지 않아도 된다. 

  1. 1급시민은 변수에 담아 사용할 수 있다.
  2. 1급 시민은 함수(혹은 메소드)의 매개변수로 전달할 수 있어야 한다.
  3. 1급시민은 함수(혹은 메소드)의 반환값(return)으로 전달할 수 있다.

1급객체

1급 객체는 위에서 언급한 1급 시민의 조건을 충족하는 객체이다. 예를 들어 javascript에서 객체(Object)는 1급시민의 조건을 만족하는 1급 객체이다. 

 


1급함수

Swift는 1급시민의 조건을 만족하는 1급 함수이다. 따라서

  • Swift의 함수는 변수에 할당할 수 있다.
func firstCitizenFunction(parameter: String){
   print("Hi, Swift \(parameter) ")
}

//변수 temp에 firstCitizen 함수를 할당해준다.
let temp = firstCitizen

//변수를 이용해 함수를 실행할 수 있다.
temp("student")
  • Swift의 함수는 매개변수로 전달할 수 있다.
func simplePrint(parameter: String){
    print("output : \(parameter)")
}

func firstCitizen(parameter: String) -> String{
  return "\(parameter) is firstCitizen"
}

//simplePrint 함수의 매개변수로 firstCitizen함수를 전달한다.
simplePrint(parameter: firstCitizen(parameter: "Swift"))

출력 : Swift is firstCitizen
  • Swift의 함수는, 함수를 반환할 수 있다.
func firstCitizen(parameter: String) -> String {
  return "Hello! \(parameter)"
}
func printHello() -> String{
    return firstCitizen(param : "Swift")
}

print(printHello())

출력 : Hello! Swift

Closure란?

Closure는 Named Closure(함수를 의미)와 Unamed Closure 두가지로 나누어 생각할 수 있으며 우리가 흔히 Closure라고 부르는 것은 Unamed Closure를 의미한다. 

Closure는 앞서 살펴보았던 일급 시민으로서의 역할을 한다. 이 예시는 밑에서 살펴보도록 하겠다.

 

Clousre 형태

Closure의 형태는 다음과 같으며 중괄호 안에 {} Parameter와 Return Type 그리고 구현부분으로 작성된다.(구현 부분은 in 키워드로 구분하여 작성된다.)

{ (Parameter) -> Return in

	(구현)...
}

 

Clousre는 일급시민으로서의 역할을 한다고 했는데 그 예시를 알아보도록 하겠다. example이라는 상수에 closure를 선언한 것이며 이렇게 example은 parameter를 받아 print해주게 됩니다.

//String을 parameter로 받아 Retrun은 아무것도 해주지 않는다.

let example = { (parameter : String) -> () in
    print("output : \(parameter)")
}


exmaple("Hello World!")

 

 

728x90
반응형