IBAction, IBOutlet 알아보기

슆공부·2022년 7월 6일
0

IBAction, IBOutlet 역할이 무엇일까?

스토리보드를 사용할 때 생각없이 레이블을 연결하곤 했었는데 문득 두 가지의 의미가 궁금해져서 찾아봤다.

위의 두 가지의 역할은 스토리보드와의 연결고리를 담당하며, 변수나 함수를 정의할 때 앞에 @IBAction 또는 @IBOutlet 키워드를 통해 StoryBoard에서 버튼이나 레이블같은 컴포넌트와 연결할 수 있다.

IBAction은 Event 발생 시 호출되는 Action을 작성한 것이고, IBOutlet은 값에 접근하기위한 변수인 것이다.

IBAction, IBOutlet의 정의

IBAction은 입력 시 어떤 행동할 지를 알려주는 것, IBOutlet은 데이터를 가져오는 것이다.
IB는 interface builder의 약자라고 한다. 그래서 IBAction은 인터페이스 빌더를 통해 받아온 정보로 액션을 수행하겠다는 의미가 된다.

인터페이스 빌더- 스토리보드나 xib 파일 같은 인터페이스 파일들을 열고 편집할 수 있는 툴이다.

@은 뭘까?

@는 컴파일러에게 어떤 속성을 가지고있다고 전하는 역할을 하는 예약어이다. 컴파일러에게 @가 붙은 명령어에 대해 어떤 attribute가 부여되었음을 말한다.

@IBAction // Interface Builder와 연결된 Action이다.

@UIApplicationMain // App의 Main이 여기에 있다.

@IBAction의 속성이 func의 정의 앞에 붙어있다면, 이 함수는 Interface Builder에서 사용될 수 있고 UI로 연결이 가능하다는 의미를 가진다.

강제 언래핑을 하는 이유는?

옵셔널 타입이 nil일 때 참조를 하면 런타임 에러가 발생하기 때문에 강제 언래핑을 삼가는 편인데....

일단, outlet은 IBOutlet 키워드를 이용해 nib 또는 Storyboard에서 뷰를 설정할 수 있는 프로퍼티이며 IBOutlet, IBAction은 스토리보드 상에 선언한 객체를 인터페이스가 알아볼 수 있게 만드는 것이다.

그래서 찾아보니까 강제 언래핑이 괜찮은 이유는
1. IBOutlet은 스토리보드의 뷰 객체와 인터페이스 빌더를 연결한다.
2. 강제 언래핑은 nil 아닌 게 확실할 때만 사용한다.
3. 스위프트는 불필요한 객체 선언을 지양한다.

=> IBOutlet으로 선언한 뷰가 nil인 것은 에러이며 잘못된 시나리오로 흘러간 것이 아닐 가능성이 높다.
만약 IBOutlet 객체가 nil일 때는 앱을 크래시 해서라도 수정해야하고 사용하지 않을 것이면 선언도 하지 말라는 의미인 것 같다.

참고) https://jeong9216.tistory.com/191

0개의 댓글