Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
반응형
Archives
Today
Total
관리 메뉴

슈프림 블로그

[Swift] Closure 클로저가 도대체 뭔데? 본문

iOS_Swift

[Swift] Closure 클로저가 도대체 뭔데?

_슈프림 2020. 8. 4. 17:44
728x90

Swift에서 함수형 프로그래밍 패러다임을 접할 때 클로저를 잘 이해해야 명확하게 이해할 수 있다.

  • Swift의 클로저는 다른 언어의 **람다(Lambda)**와 유사하다
  • 일정 기능을 하는 코드를 하나의 블록으로 ({} 안에) 모아 놓은 것.
  • 함수도 클로저의 한 형태이다.
  • 변수나 상수를 클로징한다 : 변수나 상수가 선언된 위치에서 참조를 획득하고 저장할 수 있다.

 

클로저 표현

{ (매개변수...) -> 반환타입 in 
	실행 코드
}
더보기

예시 ) String Type의 배열의 이름들을 담아 내림차순으로 정렬하는 코드

Swift 라이브러리의 sorted(by:) 메서드 정의

public func sorted(by areInIncreasingOrder: (Element,Element) -> Bool) -> [Element]

 

String 배열 선언

let names: String = ["Suhyun", "Jenny", "Yuna"]

 

메서드에 함수 전달

func backwards(first: String, second: String) -> Bool { 
	return first > second
} 
let reversed = names.sorted(by: backwards) 
print(reversed) // ["Yuna", "Suhyun", "Jenny"]

 

클로저 표현 예시

let reversed = names.sorted(by: { (first: String, second: String) -> Bool in 
	return first > second 
}

 

후행 클로저

클로저가 맨 마지막 전달인자로 사용될 경우, 메서드의 소괄호를 닫고 사용해도 된다.

전달인자가 딱 하나일 경우, 소괄호까지 생략 가능하다.

더보기
// 마지막 인자이므로 소괄호를 닫고 사용
let reversed = names.sorted(){ (first: String, second: String) -> Bool in
	return first > second
}
// 마지막 인자이므로 소괄호를 닫고 사용
let reversed = names.sorted(){ (first: String, second: String) -> Bool in
	return first > second
}

 

클로저 표현 간소화

  • 매개변수 타입반환 타입 생략 가능
  • 단축 인자 이름 사용 : 매개변수의 순서에 따라 $0, $1, $2, ...
  • 암시적 반환 표현 : 반환값이 있는 클로저이고, 실행 코드가 1줄이라면 return 키워드를 생략할 수 있다.
더보기
// 매개변수 타입과 반환 타입 생략
let reversed = names.sorted(){ (first, second) in
	return first > second
}
// 단축 인자 이름 사용
let reversed = names.sorted(){ return $0 > $1 }
// return 키워드 생략
let reversed = names.sorted(){ $0 > $1 }

 

연산자 함수

(💡클로저와 다른 내용이지만 참고용💡)

<, > 등 비교 연산자도 함수의 일종이다.

매개변수 타입과 반환 타입이 같으므로 sorted(by:)의 인자값으로 넘겨줄 수 있다!

let reversed = names.sorted(by: >)

 

반응형
Comments