@IBAction과 @IBOutlet은 무엇이고 어떤 차이가 있을까?!
@IBOutlet weak var slider: UISlider!
@IBAction func sliderChanged(_ sender: UISlider) {}
storyboard로 기초적인 타이머 앱을 만들던 중 버튼을 코드 영역에 연결시켰을 때 생성되는 @IBOutlet과 @IBAction에 궁금증이 생겼다. 일단 하나씩 뜯어보며 생각해보자.
'@' 는 컴파일러에게 특정 속성을 갖고 있다고 전해주는 예약어이다. at을 줄여 '@'기호를 사용한 것이다.
IB는 Interface Builder의 줄임말이다. 즉 Interface Builder에서 생성된 정보를 가져온다면 @IBOulet이 되는 것이고 @IBAction은 Interface Builder의 생성된 정보를 이용해 Action을 수행하겠다는 뜻이다.
강한 참조와 약한 참조?
강한 참조(Strong Reference)
- 기본적으로 Swift에서의 참조는 강한 참조이다.
- 강한 참조는 인스턴스를 참조하는 변수나 상수가 해당 인스턴스에 대한 소유권을 가지고 있다는 의미이다.
- 객체에 대한 강한 참조가 하나 이상 존재한다면 해당 객체는 메모리에서 해제되지 않는다.
- 주로 객체가 필요한 동안 유지해야 할 때 사용된다.
- 하지만, 강한 참조 사이클(Strong Reference Cycle)일 발생할 수 있으며, 이로 인해 메모리 누수(memory leak)가 발생할 수 있다.
약한 참조(Weak Reference)
- 약한 참조는 인스턴스를 소유하지 않고 참조한다. 즉, 소유권을 가지지 않는다.
- 약한 참조는 객체의 생명 주기에 영향을 미치지 않으며, 해당 객체의 참조 카운트를 증가시키지 않는다.
- 만약 해당 객체에 대한 강한 참조가 모두 해제되면, 해당 객체는 자동으로 메모리에서 해제된다.
- 강한 참조 사이클을 방지하는 데 사용된다.
참조에 관한 내용은 추후에 더 포스팅 하도록 하겠다.
var
변수를 선언하는 키워드이다. 상수를 선언하는 키워드로는 let이 있다. 하지만 지금 상황에서는 slider의 값이 funcSliderChanged라는 함수에 의해 변경되므로 var로 선언해야만 한다.
slider
실제로 UISlider 클래스의 인스턴스를 참조하는 변수의 이름이다.
UISlider
UISlider는 UI 요소 중 하나로, 수평 또는 수직으로 움직일 수 있는 슬라이더를 나타내는 클래스이다. 사용자가 슬라이더를 움직여 값을 선택하거나 조정할 수 있다.
!
'!'는 Swift에서 옵셔널 타입을 나타내는 표기법으로, UISlider 타입의 인스턴스이거나 nil일 수 있음을 의미한다.
func
함수를 선언하는 키워드이다.
sliderChanged
UISlider를 @IBAction으로 연결해 만든 실질적인 메서드의 이름이다. 슬라이더의 값이 변경될 때 호출되는 콜백 메서드이다.
(_ sender: UISlider)
메서드의 매개변수로 UISlider 타입의 sender 매개변수를 받는다. 슬라이더가 이벤트를 발생시킬 때 해당 메서드로 슬라이더 인스턴스가 전달된다.
마무리 하며
단순히 지나칠 수 있는 단어들까지 정확하게 알고 사용해야만 완성도 있는 앱을 만들 수 있게 된다고 생각한다.
언제나 기초는 탄탄히! 사고는 유연하게!