YunDaeHyeon
← Lab

IBOutlet과 IBAction

스터디2025.08.15
  • UIKit
  • Swift

IBOutlet과 IBAction

IBOutlet , IBAction은 UIKit의 스토리보드에서 자주 쓰이며 두 역할은 다르다!

🤔 IBOutlet이란?

IBOutlet 은 Interface Builder Outlet의 약자이다.

UI 요소(Button이나 Label 등..)를 수정할 수 있도록 프로퍼티로 연결해주는 역할을 수행한다.

IBOutlet을 통해 스토리보드에서 생성한 요소 객체에 접근하여 조작할 수 있게 한다!

@IBOutlet weak var titleLabel: UILabel!

스토리보드에 추가하고 싶은 요소가 있다면 Command + Shift + L을 입력한 뒤 아래처럼 Label을 추가한다.

그 후 스토리보드에서 생성한 Label 객체에 접근할 수 있도록 코드 프로퍼티로 연결하기 위해 스토리보드에서 생성한 Label를 control 를 꾹 누른 상태로 코드에 드래그 엔 드랍을 수행하면 다음과 같은 창이 팝업된다.

원하는 옵션과 라벨명을 입력한 뒤 Connect를 입력할 시 아래와 같이 스토리보드와 연결된다.

이제 titleLabel 객체를 통해 titleLabel.text = "Hello S022" 와 같이 속성을 수정할 수 있다.


🤔 IBAction이란?

IBAction은 Interface Builder Action의 약자이다.

스토리 보드에서 연결된 UI 요소들의 이벤트(터치, 클릭 등..)을 메서드로 연결해주도록 한다.

즉, 버튼 클릭이나 값 변경과 같은 동작을 코드에서 처리하기 위해 사용된다.

@IBAction func didTapButton(_ sender: UIButton) {
	print("버튼을 눌렀어요!")
}

// 스토리보드에서 didTapButton이 연결된 버튼을 클릭할 경우 해당 메서드가 호출된다.

스토리보드에서 IBAction을 추가하는 방법은 아래와 같이 간단하다.

IBOutlet을 코드로 가져올 때와 동일하게 컨트롤을 누른 뒤 코드로 가져오면 설정창이 팝업된다.

동일하게 원하는 옵션(Connection, Type, Event 등)을 설정한 뒤 Connect 시키면 된다.

그 뒤 IBAction으로 연결된 버튼을 Tap 했을 때 titleLabel 값이 변경되도록 아래와 같이 코드를 작성한 뒤 빌드해보자.

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var titleLabel: UILabel!
    var count: Int = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        titleLabel.text = "\(count)"
    }
    
    @IBAction func didTapButton(_ sender: UIButton) {
        print("titleLabel을 수정했습니다.")
        count += 1
        titleLabel.text = "\(count)"
    }
    
}

실제 기기로 빌드해보면 정상적으로 작동하는 것을 확인할 수 있다.

🤔 왜 IBOutlet을 선언할 때 weak와 strong의 차이가 있을까?

IBOutlet을 생성하고자 할 때 weak가 기본값인 이유가 무엇인지 궁금했다.

또, strong으로 선언하면 어떤 문제가 발생할 수 있을지도 탐구하고 싶다.

weak과 strong은 ARC와 아주 깊은 관련이 있다는 것은 알고 있지만, 스토리보드와 실제 코드를 연결할 때 발생할 수 있는 문제는 무엇이 있을 지 시나리오를 세워보고 탐구할 예정이다.