클로저 Closure

이유진·2024년 3월 12일
0

Swift 문법

목록 보기
6/9

클로저란?

  • func 키워드를 이용해 이름을 붙여주는 함수들
  • 종류
    • 함수 Named Closure
      func doSomething() {
          print("Name Closure")
      }
    • 익명함수 Unnamed Closure (보통 클로저라고 하면 익명함수를 말한다)
      let closure = { print("Unnamed Closure") }
  • 특징
    • 함수이기 때문에 변수와 상수에 대입, 리턴, 파라미터 받기 등이 가능하다.
    • 자료형Type을 가지고 있다.

클로저(익명함수) 표현식

  • 익명이기 때문에 func 키워드 사용하지 않는다
  • Head in Body 형식으로 구성되어 있다
{ (Parameters) -> Rturn Type in
	 실행구문
	}

// 여기서 
// (Parameters) -> Rturn Type 이 Clousure Head
// in
// 실행구문 이 Closure Body
  • 활용
    1. 파라미터(Parameter)와 리턴 타입(Return Type) 모두 가지지 않는 클로저

      let Closure = {() -> () in
      		print("Closure")
      }
    2. 파라미터(Parameter)와 리턴 타입(Return Type) 모두 가지는 클로저

      let Closure = {(name: String) -> (String) in
      		return "Closure!"
      }

1급 객체로서 클로저

  • 1급 객체 함수의 특징과 클로저
    1. 변수나 상수에 대입 가능, 실행 가능

      //작성 시 클로저 대입
      let closure = { () -> () in
          print("Closure")
      }
      
      //새로운 변수나 상수에 기존 클로저 대입
      let closure2 = closure
    2. 함수의 파라미터 타입으로 전달 가능

      //함수를 파라미터로 전달 받는 함수doSomething
      
      //파라미터로 함수를 전달
      func doSomething(closure: () -> ()) {
          closure()
      }
      
      //파라미터로 클로저 전달
      doSomething(closure: { () -> () in
          print("Closure!")
      })
      
      /* 
      { () -> () in
      print("Closure!")
      }
      이 부분이 "클로저"로 작성된 영역*/
      
    3. 함수의 반환 타입으로 사용 가능

       //선언
       func doSomething() -> () -> () {
       }
       
       //example
       func doSomething() -> () -> () {
           
           return { () -> () in
               print("Closure!")
           }
       }
       //실행
       let clousure = doSomething()
       closure()

      클로저 실행

    • 실행 방법
      1. 클로저가 대입된 변수 혹은 상수 호출

             
             let closure = { () -> String in
                 return "Closure!"
             }
             
             closure()
             
      1. 클로저 직접 실행
        { () -> () in
            print("Closure!")
        }) ()
        
        //1.클로저 소괄호()로 감싸기
        //2.호출 구문 () 붙이기

      자료 출처

      https://babbab2.tistory.com/81

0개의 댓글