일급 객체 First-Class object
- 조건
- 전달 인자로 전달 가능할 것
- 변수나 데이터 구조 안에 저장할 수 있을 것
- 함수 자체를 변수에 집어넣음
- 반환 값으로 사용 가능할 것
- 고유하게 구별이 가능할 것
변수나 상수처럼 사용할 수 있어야 한다
- swift는 함수형 언어로서, 함수를 일급 객체로 취급한다
- 함수를 호출, 전달, 반환하는 동작만으로 프로그램의 구현이 가능하다
- 중첩함수
- 함수 내부에 작성된 함수 = 내부함수
- 내부 함수를 포함하는 바깥쪽 함수 = 외부함수
- 외부함수가 종료되면 내부 함수도 함께 종료 = 내부함수의 생명 주기
- 내부함수는 외부함수를 거치지 않으면 접근 불가능, 외부 코드로부터 차단된다 = 함수의 은닉성
- 내부함수는 선언된 외부함수에서만 참조할 수 있다
- 내부 함수에 외부 함수의 지역 상수, 지역변수가 참조된다면?
- 1번에서 basic 함수 실행 후 내부함수인 append를 리턴
- 리턴된 함수 append를 result가 참조하고 있음
- 소멸되지 않은 append 내부함수가 2번에서 실행됨
> append 함수가 클로저 Closure 를 갖기 때문에 2번에서 실행이 진행된다
클로저 Closure
- 클로저란?
- 익명함수, 일회용함수
- 한 번만 사용할 구문의 집합
- 형식은 함수로 작성되어야 한다
- 내부함수와 내부함수에 영향을 미치는 주변 환경을 모두 포함한 객체
- 내부함수, 내부함수가 만들어진 주변 환경으로 구성되어 있다
- 외부함수 내에서 내부함수를 반환하고, 내부함수가 외부함수의 지역변수나 상수를 참조할 때 만들어진다
- 함수는 이름이 있는 클로저이다
- 함수의 전달인자로 주로 사용한다 (콜백)
- 종류
- 전역함수
- 중첩함수
- 클로저 표현식
- 이름 없음
- 주변환경에서 값을 가져올 수 있는 간단한 문법으로 작성됨
- 클로저 표현식
- func 키워드와 함수명을 생략함
- 클로저 전체에 소괄호를 붙이고 맨 뒤에 호출 연산자를 붙이면 클로저 표현식이 실행됨
- 매개변수를 이용할 수 있다
- 후행 클로저
- 클로저가 함수의 마지막 전달인자라면, 마지막 매개변수 이름을 생략하고 함수 소괄호 외부에 클로저를 구현할 수 있음
- 반환 타입 생략 가능
- 해당 예시에서 calculate 함수의 method 매개변수는 Int 타입을 반환해 줄 것을 컴파일러가 이미 알고 있다
- 따라서 클로저에서 반환 타입을 생략할 수 있다
- in 키워드는 생략할 수 없다
- 인자이름 단축
- 클로저의 매개변수 이름이 불필요하다면 생략할 수 있다
- 클로저의 매개변수 순서대로 $0, $1, $2 ... 등으로 표현한다
- in 키워드를 생략할 수 있다
- 암시적 반환
- 클로저의 반환값이 있다면, 마지막 줄은 암시적으로 반환값으로 취급한다
- return 키워드를 생략할 수 있다
'iOS > Swift' 카테고리의 다른 글
[Swift] 열거형 enum (0) | 2023.11.20 |
---|---|
[Swift] 구조체 Struct / 클래스 Class (0) | 2023.11.16 |
[Swift] 함수,매개변수,inout 키워드 (0) | 2023.11.14 |
[Swift] 옵셔널 Optional (0) | 2023.11.14 |
[Swift] 배열,집합,튜플,딕셔너리 (0) | 2023.11.13 |