티스토리 뷰

Swift/Swift 문법

[클로저 - 1] 클로저와 함수

내일은개발천재🎵 2022. 12. 28. 21:40

클로저

  • 이름이 없는 익명 함수
    • 이름이 없는 코드의 묶음이다.
    • 이름 없이 호출할 수 있는 형태로 사용된다.
  • 클로저와 함수는 기능은 완전히 동일하지만, 형태가 다르다.
    • 클로저가 함수보다 더 큰 범위이다.
    • Python의 lambda와 동일하다.

함수와 클로저의 비교

// 함수의 타입 표기법
let functionA: (String) -> String      // 1)파라미터 문자열, 2)리턴형 문자열
let functionB: (Int) -> ()             // 1)파라미터 정수, 2)리턴형 없음
let functionC: (String) -> Void        // 1)파라미터 문자열, 2)리턴형 없음

// 함수로 표현
func aFunction(str: String) -> String {
    return "Hello, \\(str)"
}

// 클로저로 표현 -> **중괄호**는 클로저라고 생각하자.
let _ = { (str: String) -> String in
    return "Hello, \\(str)"
}

let aClosureType = { () -> () in              // 변수에 담아서 호출 가능
    print("안녕")
}

Swift는 함수를 1급 객체로 취급한다.

  1. 함수를 변수에 할당할 수 있다.
  2. 함수를 파라미터로 전달할 수 있다.
  3. (함수에서) 함수를 반환할 수 있다.
func aFunction1(_ param: String) -> String {
    return param + "!"
}

func aFunction2(name: String) -> String {
    return name + "?!??"
}

// 1. 함수를 변수에 할당할 수 있다.
var a: (String) -> String = aFunction1
a("안녕")

a = aFunction2
a("hello")

// 2. 함수(클로저)를 변수에 할당하여 파라미터로 전달할 수 있다.
let closureType = { (param: String) -> String in         // 클로저 리터럴
    return param + "!"
}

함수에서 클로저로 변형시키기

  1. 함수의 이름을 없앤다.
  2. 중괄호를 맨 앞으로 보내고, 그 자리에 **in**을 넣는다.
  3. 리턴형은 보통 생략한다. (타입 추론 가능)
  4. 타입 추론이 가능한 경우, 파라미터의 자료형을 생략한다. (대부분 생략 가능)
func add(a: Int, b: Int) -> Int {
	let result = a + b
	return result
}

{ (a, b) in
	let result = a + b
	return result
}

앨런님의 강의를 듣고 공부하며 정리한 글입니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함