iOS/iOS 앱 개발 올인원 패키지 Online

[iOS] 패스트캠퍼스 챌린지 15일차 - Closure(2)

2021. 9. 20. 17:26
목차
  1. Closure 선언
  2. Capturing Value

Closure 선언


다음과 같이 closure를 선언할 수 있다.

// 두개의 정수를 받아 곱한 결과를 반환하는 closure이다.
// 정석대로 closure를 선언하였다.
var multiplyClosure: (Int, Int) -> Int = { (a: Int, b: Int) -> Int in
    return a*b
}

// 간략하게 closure를 선언하였다.
var simipleMultiplyClosure: (Int, Int) -> Int = { a, b in
    return a * b
}

closure는 아래와 같이 사용할 수 있다.

func operateTwoNum(a: Int, b: Int, operation: (Int, Int) -> Int) -> Int {
    
    let result = operation(a,b)
    return result
}
operateTwoNum(a: 4, b: 2, operation: multiplyClosure)

var addClosure: (Int, Int) -> Int = {a, b in
    return a + b
}
operateTwoNum(a: 4, b: 2, operation: addClosure)

// 즉석으로 closure 내용으로 구현하여 함수 파라미터로 넘겨줄 수 있다.
operateTwoNum(a: 4, b: 2) { a, b in
    return a / b
}

operateTwoNum() 함수는 두 개의 정수값을 받아 operation 함수를 이용하여 값을 계산하여 반환한다.

구현된 closure(multiplyClosure, addClosure)를 인수로 넘겨줘도 되지만, 함수 호출 시 closure를 즉석으로 구현하여 넘겨줄 수도 있다.

 

Closure Expression Syntax

{ (parameters) -> returnType in
     statements
}

in 키워드를 기준으로 앞에는 파라미터와 리턴 타입, 뒤에는 로직이 나온다.

// Example1. 초간단 closure

let choSimpleClosure = {
    
} // 파라미터, 리턴 타입, statement도 없는 클로저

choSimpleClosure()
// Example2. 코드블록을 구현한 closure
let choSimpleClosure2 = {
  print("Hello, 클로져, 코로나 바이!")
}

choSimpleClosure2()
// Example3. 인풋 파라미터를 받는 closure

let inputClosure: (String) -> Void = { name in
    print("Hello, 클로져, 코로나 바이! 나의 이름은 \(name)입니다.")
}

inputClosure("Dew")
// Example4. 값을 리턴하는 closure

let returnClosure: (String) -> String = { name in
    let message = "iOS 개발 만만세, \(name)님 경제적 자유를 얻으실 거에요!"
    return message
}

let value = returnClosure("Dew")
print(value)
// Example5. closure를 파라미터로 받는 함수 구현

func someSimpleFunction(choSimpleClosure: () -> Void) {
    print("함수에서 호출이 되었어요.")
    choSimpleClosure()
}

someSimpleFunction(choSimpleClosure: {
    print("바이 코로나 from closure")
})
// Example6. Trailing closure

func trailingClosureFunction(message: String, choSimpleClosure: () -> Void){
    print("함수에서 호출됨. 메시지는 \(message)")
    choSimpleClosure()
}

trailingClosureFunction(message: "로나로나 코로나 극혐", choSimpleClosure: {
    print("바이 코로나 from closure")
})

trailingClosureFunction(message: "로나로나 코로나 극혐") {
    print("바이 코로나 from closure")
} // 맨마지막 클로저를 생략하여 이렇게 사용할 수 있다. 코드 작성을 할 때 코드를 간소화 보여주므로 깔끔한 코드 작성 가능!!

 

Capturing Value


Scope

안쪽에서 선언한 변수 및 상수는 지역변수이므로, 중괄호를 벗어나는 바깥쪽 코드에서는 접근할 수 없다. 

안쪽 scope는 바깥쪽 scope에 접근할 수 있지만, 역으로는 불가능하다.

 

그런데 다음과 같은 경우를 보자. printClosure는 조건문 안에 선언된 지역변수인 name을 print한다.

name은 지역변수이므로 조건문 중괄호를 벗어나는 순간 사라진다. 하지만 closure는 지역변수가 아니므로 중괄호를 벗어나도 여전히 사용할 수 있다. 이때, 중괄호를 벗어나도 printClosure는 print(name)을 수행할 수 있을까?

정답은 YES이다!! 클로저한테 잡혀서 바깥 scope에서 사용할 수 있는 값을 Capturing value라고 한다. 

 

오늘의 공부 모습

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

'iOS > iOS 앱 개발 올인원 패키지 Online' 카테고리의 다른 글

[iOS] 패스트캠퍼스 챌린지 17일차 - Structure(2).예제  (0) 2021.09.22
[iOS] 패스트캠퍼스 챌린지 16일차 - Structure(1). Structure vs. Class  (0) 2021.09.21
[iOS] 패스트캠퍼스 챌린지 14일차 - Closure(1)  (0) 2021.09.19
[iOS] 패스트캠퍼스 챌린지 13일차 - Collection(2). Dictionary & Set  (0) 2021.09.18
[iOS] 패스트캠퍼스 챌린지 12일차 - Collection(1). Array  (0) 2021.09.17
  1. Closure 선언
  2. Capturing Value
'iOS/iOS 앱 개발 올인원 패키지 Online' 카테고리의 다른 글
  • [iOS] 패스트캠퍼스 챌린지 17일차 - Structure(2).예제
  • [iOS] 패스트캠퍼스 챌린지 16일차 - Structure(1). Structure vs. Class
  • [iOS] 패스트캠퍼스 챌린지 14일차 - Closure(1)
  • [iOS] 패스트캠퍼스 챌린지 13일차 - Collection(2). Dictionary & Set
듀IT
듀IT
듀IT
듀 IT
듀IT
전체
오늘
어제
  • 분류 전체보기 (55)
    • iOS (50)
      • iOS 앱 개발 올인원 패키지 Online (34)
      • Swift (16)
    • 자격증 (0)
      • 정보처리기사 (0)
    • 컴퓨터공학 (4)
      • 운영체제 (3)
      • 네트워크 (1)
    • 프로젝트 (1)
      • 환경설정 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 생성자
  • closure
  • 패스트캠퍼스
  • 직장인인강
  • 직장인자기계발
  • enum
  • swift
  • 패스트캠퍼스후기
  • UITableView
  • Optional
  • UIImage
  • 상속
  • 패캠챌린지
  • iOS 앱 개발 올인원 패키지 Online
  • structure
  • ViewController
  • 구조체
  • Convenience
  • 열거형
  • ios

최근 댓글

최근 글

hELLO · Designed By 정상우.
듀IT
[iOS] 패스트캠퍼스 챌린지 15일차 - Closure(2)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.