훌이
후리스콜링개발
훌이

블로그 메뉴

  • 왈 (iOS APP)
  • Github
전체 방문자
오늘
어제
  • 전체 (171)
    • ⭐️ 개발 (140)
      • JAVA (4)
      • Web (5)
      • iOS & Swift (94)
      • iOS Concurrency (4)
      • Rx (18)
      • Git (6)
      • WWDC (1)
      • Code Refactor (3)
      • Server (1)
    • ⭐️ Computer Science (22)
      • 운영체제 (10)
      • 네트워크 (5)
      • PS (7)
    • 경제시사상식 (8)
    • 기타 등등 (0)

인기 글

최근 글

05-19 13:37

티스토리

hELLO · Designed By 정상우.
훌이

후리스콜링개발

[Swift] Closure 클로저란?
⭐️ 개발/iOS & Swift

[Swift] Closure 클로저란?

2020. 12. 16. 16:14
728x90
반응형

👩🏻‍💻 2020/12/16 ~ 스위프트 클로저에 대해 공부하기

 

 

☄️ Function -> Closure 로 변환하기

multiply function을 closure로 변환하려면

✅ func 키워드와 function 이름 삭제

✅ output 타입 뒤의  {  curly braket 을 파라미터 앞으로 이동

✅ output 타입 뒤에 in 대입

func multiply(no1: Int, no2: Int) -> Int {
    return no1 * no2
}
{ (no1: Int, no2: Int) -> Int in
    return no1 * no2
}


// 한 줄로 정리하면,,
{ (no1: Int, no2: Int) -> Int in return no1 * no2 }

 

 

예시 >>>

아래 코드와 같은 두 개의 정수와 하나의 operation을 파라미터로 가지는 calculator라는 함수가 있다고 할 때

func calculator(n1: Int, n2: Int, operation: (Int, Int) -> Int) -> Int {
    return operation(n1, n2)
}

func multiply(no1: Int, no2: Int) -> Int {
    return no1 * no2
}

 

 

해당 함수를 사용하려면 아래와 같이 입력해줘야 한다.

operation(2, 3)을 반환하기 때문에 multiply 함수에서 2 * 3 으로 계산해 6을 반환한다.

calculator(n1: 2, n2: 3, operation: multiply)  // 6

 

 

operation에 multiply 함수를 입력하는 것 대신 closure값을 넘겨주면 된다.

func calculator(n1: Int, n2: Int, operation: (Int, Int) -> Int) -> Int {
    return operation(n1, n2)
}

calculator(n1: 2, n2: 3, operation: { (no1: Int, no2: Int) -> Int in return no1 * no2 })

이렇게 closure를 통해 코드의 길이를 단축시킬 수 있다.

 

 


 

☄️ Closure 축약하기

코드의 길이를 더 단축시킬 수 있는데 그 단계를 차례대로 살펴보자면,

 

<기본 closure 코드>

calculator(n1: 2, n2: 3, operation: { (no1: Int, no2: Int) -> Int in return no1 * no2 })

 

<파라미터의 데이터 타입 지우기>

calculator(n1: 2, n2: 3, operation: { (no1, no2) -> Int in return no1 * no2 })

스위프트는 값을 보고 데이터 타입을 추론할 수 있기 때문에 operation의 파라미터들의 데이터 타입을 지워줄 수 있다.

n1과 n2의 데이터 타입은 정수로 이 input값을 closure에 넣어주면 컴파일러는 operation의 데이터 타입 또한 정수라는 것을 쉽게 추론할 수 있다.

 

 

<반환값의 데이터 타입 지우기>

calculator(n1: 2, n2: 3, operation: { (no1, no2) in return no1 * no2 })

n1 * n2를 반환한다는 것을 (정수 * 정수 = 정수) 통해 반환값의 데이터 타입도 추론할 수 있다.

 

 

<return 키워드 지우기>

calculator(n1: 2, n2: 3, operation: { (no1, no2) in no1 * no2 })

컴파일러는 closure의 프로레싱을 파악하고 있기 때문에 return 키워드를 지워줘도 잘 작동한다.

 

 

<파라미터 이름 변환하기>

calculator(n1: 2, n2: 3, operation: {$0 * $1})

closure는 익명으로 된 파라미터의 이름을 제공하기 때문에 no1, no2의 이름을 대체할 수 있다.

스위프트에서는 $0가 첫 번째 파라미터를 나타내고, $1이 두 번째 파라미터를 나타낸다. ($2 = 세 번째...)

 

 

<trailing closure = 후행 클로저>

calculator(n1: 2, n2: 3) {$0 * $1}

스위프트에서 마지막 파라미터가 closure이면, 마지막 파라미터의 이름을 생략하고 input 값들 뒤에 closure를 붙여줄 수 있다.

 

이렇게 코드의 길이를 단축시켜도 값은 6으로 동일하다.

 

 

☄️ Closure를 사용하면 코드의 길이를 아주 간결하게 줄일 수 있다.

그러나, 코드를 이렇게 축약시키면 가독성이 떨어져 협업할 때 다른 개발자가 나의 코드를 보고 헷갈릴 수 있다.

가독성과 간결함 사이에서 적당한 선을 지킬 것!!

 

 

 

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'⭐️ 개발 > iOS & Swift' 카테고리의 다른 글

[iOS] Object Library란? (그리고 하나하나 오브젝트에 대해)  (0) 2021.01.30
[iOS] info.plist란? (그리고 하나하나 속성 정리)  (0) 2021.01.30
[iOS] Project editor란?  (0) 2021.01.30
[Swift] Optional 옵셔널이란?  (0) 2020.12.08
[iOS] - 소수점 x자리 아래로 자르는 방법  (1) 2020.12.04
    '⭐️ 개발/iOS & Swift' 카테고리의 다른 글
    • [iOS] info.plist란? (그리고 하나하나 속성 정리)
    • [iOS] Project editor란?
    • [Swift] Optional 옵셔널이란?
    • [iOS] - 소수점 x자리 아래로 자르는 방법
    훌이
    훌이

    티스토리툴바