Swift - Closure ( iOS )(1)

김제형·2024년 11월 25일

이 글은 swift를 공부하는 누가 봐도 이해할 수 있도록 설명하는 것이 목적인 글이다.
또한 언제 다시봐도 이해가 가능한 글을 쓰는 것 또한 주된 목적이다.

Closure

클로저는 특정 컨텍스트에서 값을 캡처할 수 있는 독립적인 실행 단위이며 1급 객체이다.

구조

{(파라미터)->Return Type in 실행구문}
 //Head                   //Body
  • 클로저는 Head와 Body 그리고 그 둘을 이어주며 구분해주는 in이 존재한다.
let closure = { () -> () in print("Closure") }

클로저는 파라미터와 Return Type이 존재하고 둘다 생략할수 있다.
또한 클로저에선 리턴값이 존재하더라도 생략이 가능하다

함수는 이름이 있는 클로저라고 할 수 있다.

  • 모든 함수는 클로저지만 모든 클로저는 함수가 아니다!

클로저 실행

  • 클로저가 대입된 변수나 상수 호출
let closure = { () -> String in
    return "Hello Sodeul!"
}
//호출
closure()
  • 클로저 직접 실행
  1. 클로저 자체를 소괄호로 감싼 뒤 호출구문인 ()를 추가해준다.
({ () -> () in
    print("Hello Sodeul!")
})()
  • 이렇게 직접적으로 실행하게 되면 일회성 클로저를 만들 수 있다.

클로저 특징

  1. 클로저는 인자 명(argument name)을 사용하지 않는다.
//클로저 선언
let closure = { (name: String) -> String in
    return "Hello, \(*name)"
}                  	 

//클로저 호출
closure("Sodum")
closure(name: "Sodum")  //error

*은 함수에서처럼 argument name과 parameter name이 결합된 것이 아니고 단일 parameter name이다

  1. 클로저는 변수나 상수에 대입이 된다.
//클로저를 선언과 동시에 상수에 대입
let closure = { () -> () in
    print("Closure")
}

//만들어진 클로저를 상수에 대입
let closure2 = closure
  1. 함수의 매개변수와 리턴값으로 전달할 수 있다.
// 함수에 매개변수 대입
doSomething(closure: { () -> () in
    print("Hello!")
})

// 함수의 리턴값으로 클로저 사용
func doSomething() -> () -> () {
    
    return { () -> () in
        print("Hello Sodeul!")
    }
}

//실행
let closure = doSomething()
closure()
profile
개발자 지망생

0개의 댓글