야곰 스위프트 프로그래밍(7. 접근제어, 클로저)

🌈 devleeky16498·2022년 5월 20일
0

접근제어

  1. 파일간 또는 모듈간의 접근을 제한하는 기능이다. 이를 통해서 코드의 상세구현은 숨기고 허용된 기능만 사용하는 인터페이스 구축이 가능하다.
  2. 스위프트의 접근제어는 모듈과 소스파일을 기반으로 설계되어 있다. 모듈은 배포할 코드의 묶음단위이다. import키워드를 통해서 호출이 가능하다.
  3. 접근수준은 open, public, internal, fileprivate, private 순으로 다섯가지 분류가 가능하다. open이 가장 개방적이며, private이 가장 폐쇄적인 단계이다.
  4. open은 클래스에서만 사용이 가능하다. 구조체는 public부터 사용이 가능하다.
  5. 접근 수준은 폐쇄적인 타입 안에 그보다 개방적인 타입을 가질 수 없다. 예를 들어서 클래스가 private이면 메소드는 private 이상의 접근 제어수준을 가질 수 없다.
  6. 기본적으로 접근수준은 모두 interal수준을 가지고 있다. 명시되어 있지 않은 경우 interal 접근 수준을 가진다.

클로저

  1. 클로저는 변수나 상수가 선언된 위치에서 참조를 획득하고 저장할 수 있다.
  2. 클로저에는 대표적인 3가지 형태가 있다. 첫째는 '이름이 있으면서 어떤 값도 획득하지 않는 전역함수 형태', '이름이 있으면서 다른 함수 내부의 값을 획득할 수 있는 중첩함수의 형태', '이름이 없고 주변 문맥에 따라 값을 획득하는 축약 문법으로 작성한 형태'.
  3. 클로저는 매개변수와 반환 값의 타입을 문맥을 통해 유추 가능하므로 생략이 가능하다.
  4. 클로저에 단 한줄의 표현만 있다면 암시적으로 이를 반환값으로 유추한다.
  5. 축약된 전달인자 이름을 사용 가능하다.
  6. 후행 클로저 문법을 사용할 수 있다. 후행 클로저는 함수나 메서드의 마지막 전달인자로 위치하는 클로저이며, 이는 소괄호를 닫은 후 {} 안에 클로저 표현을 해주는 문법이며 가독성이 좋다. 후행 클로저는 맨 마지막 전달인자로 전달되는 클로저만 해당되며, 여러개를 전달 시 맨 마지막 클로저만 후행클로저 사용이 가능하다.
  7. 매개변수에 클로저가 여러개인 경우 다중 후행 클로저 문법을 사용할 수 있다.
  8. 클로저에서는 전달되는 파라미터에 대해서 단축 인자 이름을 사용할 수 있으며, $0, $1 순으로 표현이 가능하다.
  9. 함수와 클로저는 기본적으로 참조 타입이다. 따라서 함수나 클로저를 상수나 변수에 할당할 때 사실 상수나 변수에 함수나 클로저의 참조를 설정하는 것이다.

탈출 클로저와 자동 클로저

  1. 함수의 전달인자로 전달한 클로저가 함수 종료 후 호출될 때 클로저가 함수를 탈출한다고 표현한다. @escaping 키워드를 파라미터에 명시하여 나타낼 수 있다.
  2. 매개변수로 사용되는 클로저들은 기본적으로 비탈출 클로저이다. 함수로 전달된 클로저가 함수의 동작이 끝난 후 사용할 이유가 없는 경우는 비탈출 클로저를 사용한다.
  3. 예를 들어서 비동기 작업을 위해서 컴플리션 핸들로 전달인자를 이용해 클로저 형태로 받는 함수가 있다. 함수가 작업을 종료하고 난 이후(return이후에) 클로저를 호출하게 되므로 클로저는 함수를 탈출해 있어야 한다.
  4. 전달하는 표현을 자동으로 변환해주는 클로저를 자동 클로저라고 하며, 이 자동 클로저는 전달인자가 없는 클로저이다. 자동 클로저는 클로저 문법을 사용하지 않고도 클로저 사용이 가능도록 문법 편의를 제공한다.
  5. 자동클로저는 @autoclosure 라는 키워드를 통해서 명시해준다. 또한 자동클로저는 기본적으로 비탈출 클로저이므로, 자동 탈출클로저를 위해선 키워드를 병렬로 나타내줘야한다. @autoclosure @escaping () -> ()이런 것처럼 해줘야 한다.
profile
Welcome to Growing iOS developer's Blog! Enjoy!🔥

0개의 댓글