본문 바로가기
XCode

아웃렛 변수(Outlet Variable), 액션 함수(Action Function)

by ljw 2023. 4. 17.
반응형

목차

    아웃렛 변수(Outlet Variable)

    인터페이스 빌더(Interface Builder)에서 만든 객체에 대한 참조를 제공하여 객체를 제어하는 데 사용된다.

    즉, 인터페이스 빌더에서 만든 객체를 코드에서 조작할 수 있다.

    앱의 View Controller나 View에서 객체의 속성을 변경하거나, 객체에 이벤트 핸들러를 추가하거나, 객체의 상태를 읽어올 수 있다.

    '@IBOutlet'로 선언한다.


    @IBOutlet

    '@IBOutlet' 으로 정의된 변수를 아웃렛 변수라고 한다.

    객체를 소스 코드에서 참조하기 위해 사용하는 키워드이며, 주로 색상, 크기, 모양, 선의 두께, 텍스트 내용 등 객체의 속성을 제어하는 데 사용한다.

    IB는 Interface Builder의 약자로, @IB로 시작되는 변수나 함수는 Interface Builder와 관련된 변수나 함수라는 뜻이다.


    액션함수(Action Function)

    사용자 인터페이스에서 버튼 또는 다른 컨트롤을 클릭하거나, 슬라이더를 움직이거나, 다른 이벤트를 실행하는 등의 액션을 트리거(trigger)할 때 호출되는 함수이다. 버튼, 레이블, 텍스트 필드 등의 UI 요소와 연결될 수 있으며, 해당 UI 요소의 이벤트가 발생하면 호출된다.

    즉, 사용자가 UI와 상호작용할 때 (ex. 버튼 클릭) 호출되는 함수를 의미한다.

    매개변수를 가질 수도 있고, 반환 값이 있을 수도 있다.

    '@IBAction' 을 사용하여 표시한다.


    @IBAction

    인터페이스 빌더(Interface Builder)와 연결된 액션 메서드를 정의할 때 사용되는 어노테이션(Annotation)이다.

    인터페이스 빌더에서 버튼, 텍스트 필드, 슬라이더 등의 객체와 액션 메서드(method)를 연결하여 사용자 인터페이스 구성 요소와 상호 작용할 수 있다.

    Objective-C와 Swift에서 사용 방법이 다르다.

    Objective-C

    '@IBAction'이 'IBAction'으로 표시된다.

    반환 형식이 'void'이고, 첫 번째 인수로 객체를 , 두 번째 인수로는 'UIControlEvents' 형식의 이벤트를 나타내는 'sender' 매개변수를 취한다.

    Swift

    '@IBAction' 어노테이션이 붙은 메서드가 IBAction으로 자동 인식된다.

    반환형이 'void'이며, 매개변수 중 첫 번째 매개 변수가 'Any' 형식이 메서드를 IBAction으로 선언할 수 있다.

    인터페이스 빌더에서는 'sender' 매개변수의 타입을 지정하지 않아도 된다.

    @IBAction func buttonTapped(_ sender: Any) {
        // 함수 내용
    }

    아웃렛 변수, 액션 함수 추가 방법

    1. 스토리보드에서 객체를 선택하고 마우스 오른쪽을 누른 채로 코드 편집기 영역으로 드래그한다.

    'Insert Outlet or Outlet Collection'이나 'Insert Action, Outlet, or Outlet Collection'이 뜰 수 있다.

    오른쪽으로 드래그하면 Insert Outlet or Outlet Collection 창이 뜬다.
    Insert Action, Outlet, or Outlet Collection

    2. 마우스 오른쪽 버튼을 놓으면 다음과 같은 창이 뜬다.

    객체마다 설정할 수 있는 옵션이 다르다.

    예를 들어,  Label 객체는 Connection 옵션을 Outlet, Outlet Collection 둘 중 하나로만 설정이 가능하다.

    그러나, TextField 객체는 Connection 옵션을 Outlet, Action, Outlet Collection 셋 중 하나로 설정이 가능하다.

     

    아웃렛 변수를 추가할 때 설정하는 옵션들

    아웃렛 변수를 추가할 때 설정하는 옵션들
    Connection 어떻게 연결할 지 설정한다.
    Outlet, Outlet Collection 두 가지 옵션이 있다.

    Outlet 인터페이스 요소에 대한 참조를 유지하는 변수를 연결한다.
    Outlet
    Collection
    여러 개의 객체를 그룹으로 묶어서 Outlet으로 설정한다.
    일반적으로 같은 유형의 객체를 다룰 때 사용된다.
    Outlet Collection을 생성하면 해당 컬렉션을 처리할 수 있는 배열이 자동으로 생성되고, 배열에는 Outlet Collection에 추가된 객체들의 참조가 저장된다. 따라서, Outlet Collection에서 객체를 추가하거나 제거하면 해당 배열에도 자동으로 반영된다.

    사용 예시) 여러 개의 버튼이 있는 화면에서 Outlet Collection을 사용하면 버튼들을 그룹으로 묶어서 코드에서 한 번에 처리할 수 있다.
    Object 해당 객체 와 연결할 변수를 지정한다.
    Name 인터페이스 요소의 이름을 나타내며 코드에서 사용된다.
    Type 인터페이스 요소의 클래스 유형을 나타내며, 해당 클래스의 인스턴스를 유지하는 변수를 선언한다.
    Storage 메모리 회수 정책을 설정하는 옵션이다. Strong, Weak 둘 중 하나로 설정할 수 있다.
    Strong으로 선언된 변수들끼리 상호 참조하는 일이 생길 경우에는 앱이 종료되기 전까지 메모리에서 제거되지 않아 메모리 누수가 발생한다. 이 경우에는 어느 한 변수나 모든 변수를 weak로 지정하면 시스템에서 임의로 제거할 수 있으므로 상호 참조할 때에도 사용하지 않을 경우에는 메모리가 삭제될 수 있다.
    Strong 일반적으로 객체를 참조할 때 사용하며, Xcode에서 기본값으로 설정되어 있다.
    다른 곳에서 참조하고 있을 경우 메모리에서 제거되지 않는다.

    예시 코드) @IBOutlet var lblHello: UILabel!
    strong은 사용할 때 strong 키워드를 사용하지 않는다.
    Weak 다른 곳에서 참조하고 있더라도 시스템이 임의적으로 메모리에서 제거할 수 있다.

    예시 코드) @IBOutlet weak var lblHello: UILabel!
    weak는 사용할 때 weak 키워드를 사용한다.

    Action 함수를 추가할 때 설정하는 옵션들

    Action 함수를 추가할 때 설정하는 옵션들
    Connection 어떻게 연결할 지 설정한다.
    Outlet, Action, Outlet Collection 3가지 옵션이 있다.
    Object 해당 객체 와 연결할 변수를 지정한다.
    Name 인터페이스 요소의 이름을 나타내며 코드에서 사용된다.
    Type 인터페이스 요소의 클래스 유형을 나타내며, 해당 클래스의 인스턴스를 유지하는 변수를 선언한다.
    Event 액션 함수를 호출할 이벤트를 설정한다.

    ex1. 'Touch Up Inside' 이벤트를 설정하였을 때 버튼을 클릭하면 'Touch Up Inside' 이벤트가 발생하고, 액션 함수가 호출된다.
    ex2. 'Editing Changed' 이벤트를 설정하였을 때 텍스트 필드에서 텍스트가 변경되면 'Editing Changed' 이벤트가 발생하고, 액션 함수가 호출된다.
    Arguments 설정한 이벤트에 대한 인자값을 설정한다.
    예를 들어, 버튼을 누르면 어떤 액션 함수가 실행되도록 하려면 해당 버튼에 연결된 액션 함수를 작성하고, 이 함수에 어떤 인자가 필요한지를 결정해야 합니다. 만약 해당 함수에 인자가 필요하지 않다면 'Arguments' 옵션을 'None'으로 설정하면 됩니다. 버튼 객체 자체가 인자로 전달되어야 한다면 'Arguments' 옵션을 'Sender'로 설정합니다. 버튼 객체와 버튼에서 발생한 이벤트 모두가 필요하다면 'Arguments' 옵션을 'Sender and Event'로 설정합니다.


    None 액션 함수에 인자를 전달하지 않는다.
    Sender 액션을 실행하는 객체를 인자로 전달한다.
    Sender and Event 액션을 실행하는 객체와 실행된 이벤트를 인자로 전달한다.

    아웃렛 변수, 액션 함수 연결 확인

    코드로 연결 확인

    아웃렛 변수 및 액션함수를 추가하면 스토리보드의 컴포넌트와 소스 코드가 연결되었다는 뜻으로 코드 왼쪽에 원으로 표시된다.

    코드 왼쪽에 원으로 표시되어 있다.

    원 위에 커서를 올려 두면 해당하는 컴포넌트가 표시되어 제대로 추가되었는지 알 수 있다.

    11번 라인의 원에 커서를 올려 두면, 11번 라인에 해당하는 컴포넌트 UILabel이 파랑색으로 표시된다.

    Inspector로 추가 확인

    연결이 잘 되었다면 Inspector 창의 'Show the Connection inspector'에서 연결 상태를 확인할 수 있다.

    아웃렛 변수가 연결이 잘 되어 있다.
    액션 함수에 연결이 잘 되어 있다.

    스토리보드파일에서 객체를 선택하고 마우스 오른쪽 버튼을 눌러도 'Show the Connection inspector' 창이 뜬다.

    스토리파일에서 객체를 선택하고 마우스 오른쪽 버튼을 눌렀을 때 뜨는 창


    아웃렛 변수, 액션 함수 삭제

    소스 코드를 삭제해도 연결은 끊어지지 않는다. 따라서, 소스 코드를 삭제하고, 연결도 끊어야 한다.

    1. 소스 코드를 삭제한다.
    2. Inspector 창의 'Show the Connection inspector'에서 삭제할 연결 상태를 확인하고, x 버튼을 눌러 연결을 끊는다.

    연결 상태 삭제

     

    반응형

    'XCode' 카테고리의 다른 글

    XCode Library  (0) 2023.04.15
    Storyboard, SwiftUI  (0) 2023.04.14
    XCode 프로젝트(Project) 설정  (0) 2023.04.14
    XCode 프로젝트(Project) 만들기  (0) 2023.04.14
    Xcode 템플릿(Template)  (0) 2023.04.14

    댓글