Contents
Swift Access Control
Async & Await Function
Swift Access Control
Public
- 제한이 없는 접근 제어자
public
으로 선언된 클래스, 구조체, 열거형, 함수는 어디서든 접근 가능
- 다른 Module(모듈)에서도 접근 가능하며, 외부에서도 접근 가능
class Vehicle { public func drive() {...} }
하지만 상황에 따라 외부에서 접근하지 못하도록 해야하는 구간이 생길 수 있기 때문에 모든 곳에 무턱대고 사용하는 것은 바람직하지 않다고 생각한다.
Private
- 제한적인 접근 제어자
private
으로 선언된 멤버는 해당 선언이 속한 블록 구간 내에서만 접근 가능
- 다른 블록에서는 접근할 수 없으며, 같은 파일 내에서만 사용 가능
class Vehicle { public func drive() {...} private func engine() {...} }
클래스 내부에서
private
으로 선언된 변수는 해당 클래스 내의 메소드에서만 접근이 가능하다고 볼 수 있다.File Private
- Swift 4 이전까지 사용되던 접근 제어자
- Swift 4 이후에는
private
와 동일한 접근 제어 수준으로 대체
fileprivate
로 선언된 멤버는 해당 선언이 포함된 파일 내에서만 접근 가능
- 다른 파일에서 접근할 수 없으며, 같은 파일에서 사용 가능
class Vehicle { public func drive() {...} private func engine() {...} fileprivate func passkey() {...} }
Swift 4 이전 버전과의 호환성을 고려한다면 사용해보는 것도 괜찮아 보인다.
사실 접근 제어자 키워드를 선언하지 않아도 문제가 되지 않는다. 하지만 여기서 중요한 점은 명시적으로 접근 제어자를 지정하는 것은 코드를 더 명확하고 안전하게 만들 수 있다는 것이다. 오픈 소스 라이브러리를 제작한다면 다른 개발자가 코드를 확인할 때 불편하지 않도록 접근 제어자를 선언하는 것이 중요하다고 생각한다.
Async & Await Function
let miliseconds = UInt32(duration * 1000) usleep(miliseconds * 1000)
계산기 콘솔 앱을 작업 하면서 fake loading 시간을
usleep()
함수를 사용했다. Unix 기반이라서 사용이 가능했다. 따라서 해당하는 시스템의 시간을 초 단위로 일부러 지연시키는 데 활용할 수 있다.import Dispatch DispatchQueue.main.asyncAfter(deadline: .now() + 3) { print("Bang!") }
이처럼 비동기 대기 함수는 다양한 방법으로 구현할 수 있는데, 스위프트 언어에서는
DispatchQueue.main.asyncAfter
를 사용하는 방식으로 비동기 대기를 구현할 수 있기 때문에 이를 적극적으로 활용해보는 것도 좋은 방법일 것이다.꼭 필요한 기능은 아니지만, 실행 과정에서 일정 시간동안 지연이 필요한 상황에서 유용하게 사용할 수 있기 때문에 활용해보는 것이 좋다. 예를 들면 사용자 인터페이스에서 애니메이션을 보여준 후 일정 시간이 지난 후에 다음 동작을 수행하거나, 백그라운드 작업 후 결과를 처리하는 등의 상황에서 자주 사용될 수 있을 것이다.
References
Share article