ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 아웃렛 변수와 액션 함수
    Swift 2020. 2. 15. 01:59

    스토리보드에 오브젝트를 추가하는 방법을 알아보았으니 이번에는 화면에 추가한 오브젝트를 변수, 함수와 연결하는 방법을 알아보자.

     

    아웃렛(Outlet) 변수?

    스토리보드에 등록한 오브젝트를 접근하여 컨트롤하기 위해 변수에 바인딩 한 오브젝트 변수를 아웃렛 변수라고 한다.

    텍스트 필드 오브젝트에 대해서 사용자가 키보드로 입력할 경우 데이터를 변수에 저장하기 위해서 아웃렛 변수를 사용한다.

     

     

    액션(Action) 함수?

    액션 함수는 이벤트를 발생시키기 위한 함수를 의미한다.

    버튼 오브젝트가 존재한다고 할 때, 이 버튼 오브젝트를 터치하면 어떠한 행위(Action)이 일어나게 하기 위해 액션 함수가 필요하다.

     

     

    소스 편집기 활성화

    변수와 함수를 작업하려면 소스 편집기가 필요하다.

    기본적으로 소스 편집기는 닫혀있는 상태이므로 직접 열어줘야 한다.

     

    1. 스토리보드 상단에서 Adjust Editor Options 메뉴를 클릭하고 Assistant 메뉴를 클릭하자. CTRL + OPTION + COMMAND + ENTER로 열 수도 있다.

     

    2. 숨어있던 소스 편집기가 나타난다.

     

     

     

    아웃렛 변수 추가

    이제 소스편집기를 이용해 아웃렛 변수를 만들어보자.

    방법은 매우 간단하다.

     

    1. 스토리보드에서 보여지는 Hello 레이블 오브젝트를 마우스 오른쪽 클릭 (혹은 트랙패트로 두 손 터치) 후 소스 편집기 멤버 필드에 드래그 & 드랍하자.

     

     

    2. 드래그 & 드랍에 성공하면 다음과 같이 팝업 메뉴가 나타난다. 빨간 박스친 내용과 동일하게 작성하여 Connect를 눌러주자.

     

     

    3. 멤버 필드에 아웃렛 변수가 추가되었다.

    아웃렛 변수는 보통 멤버 필드에 등록 하는 것이 암묵적 룰이다.

     

    1. @IBOutlet var lblHello: UILabel! - @IBOutlet으로 정의된 변수를 아웃렛 변수라고 부른다. IB는 Interface Builder의 약자로, @IB로 시작되는 변수나 함수는 인터페이스 빌더와 관련된 변수나 함수라는 것을 의미한다.
      1. @IBOutlet - 오브젝트를 소스 코드에서 참조하기 위해 사용하는 키워드이며, 색상, 크기, 모양, 선의 두께, 텍스트 내용 등의 속성을 제어하는데 사용한다.
    2. var lblHello - 변수를 선언할 때 var 키워드를 사용한다.
      1. 상수 - let 구문이 상수다. let pi = 3.141592 를 작성하면 pi는 다른 값을 할당할 수 없다.
      2. 변수 - var 구문이 변수다. var age = 22 를 작성하여 초기화한 후 다시 age에 다른 값을 할당할 수 있다.
        1. 선언한 변수 중 값이 재할당 되지 않는 변수는 Xcode에서 상수(let)으로 변경하라고 경고 메시지로 알려준다.
    3. UILabel! - 선언하고자 하는 변수의 타입을 나타낸다. 
    4. Strong / weak - 메모리 회수 정책을 나타내는 키워드다. 객체를 참조하기 위한 아웃렛 변수는 strong을 사용한다. weak을 선택하고 connect할 경우 변수 선언 구문 앞에 weak 구문이 추가된다.
      1. strong - strong으로 선언된 변수는 다른 곳에서 참조하고 있을 경우 메모리에서 제거가 되지 않는다.
      2. weak - 다른 곳에서 참조하고 있더라도 시스템(가비지 컬렉터?)이 임의적으로 메모리에서 제거한다.

     

    ✓ 메모리 회수 정책

    strong으로 선언된 변수들끼리 상호 참조하는 일이 생기는 경우 앱이 종료되기 전까지 메모리에서 제거가 되지 않아 메모리 누수가 발생한다.

    이 경우 한 쪽 변수나 모든 변수를 weak으로 선언하면 시스템에서 임의로 제거할 수가 있어 서로 참조하더라도 사용하지 않을 경우 메모리에서 제거가 된다.

    즉, 메모리 관리에서 이득을 봐야할 때 사용하여 설계하면 된다.

     

     

     

    4. 텍스트 필드 오브젝트도 레이블 오브젝트와 같이 아웃렛 변수를 만들어주자.

     

     

     

    액션 함수 추가

    이번엔 버튼에 대한 액션 함수를 추가해보자.

     

    1. 버튼을 오른쪽 클릭 후 클래스 맨 하단에 드래그 & 드랍하자.

     

     

    2. Connection을 Action으로 하고 액션 함수 명(Name)을 작성한 뒤 Type을 UIButton(오브젝트 타입)으로 지정하여 Connect버튼을 눌러주자.

     

    3. 그럼 다음과 같이 @IBAction func btnSend 함수가 생성된다.

     

     

     

     

    참고 및 주의사항

    아웃렛 변수, 액션 함수를 만들게 되면 코드 라인에 ⦿ 요런 모양의 아이콘이 생기는 걸 볼 수 있다.

    이 아이콘은 스토리보드의 오브젝트들과 연결되어 있다는 것을 의미한다.

     

    이 위치에 마우스를 가져다대면 현재 연결되어 있는 오브젝트가 무엇인지 스토리보드에 하이라이팅이 되어 표시가 되어 확인할 수가 있다.

    (유지보수가 참 쉽겠지?)

     

     

    아웃렛 변수나 액션 함수를 추가하고 삭제하는 일이 생길 수가 있는데, 코드 상에서 코드만 제거하면 실제 오브젝트에는 아웃렛 변수나 액션 함수가 바인딩 된 상태로 남아있게 된다. (무슨 버그가 발생할 지 모르겠지?)

    따라서 이를 확인하여 완벽하게 바인딩을 제거해줘야 한다.

    인스펙터에서 [Show the Connection Inspector] 메뉴를 클릭하면 현재 오브젝트에 바인딩되어 있는 액션 함수나 아웃렛 변수를 볼 수 있다.

    스토리보드에서 오브젝트를 선택하면 실시간으로 해당 오브젝트에 연결된 변수나 함수들을 보여준다.

    이 곳에서 x버튼을 눌러 완벽하게 바인딩을 제거할 수 있다. 

     

     

    해당 포스트는 "Do It! 스위프트로 아이폰 앱 만들기 입문" 책을 통해 학습하며 작성한 포스트입니다.

    글의 내용은 책의 흐름을 따라가지만 직접 공부하며 이해한 내용으로 설명하고 작성하려고 노력합니다.

    'Swift' 카테고리의 다른 글

    이미지 뷰 란?  (0) 2020.02.16
    액션 함수 동작 구현  (0) 2020.02.16
    스토리보드 꾸며보기  (0) 2020.02.15
    Hello World!  (0) 2020.02.13
    주석  (0) 2019.03.18
Designed by Tistory.