오답노트
[swift] Hello World 본문
아웃렛 변수를 추가하는 코드
@IBOutlet var lblHello: UILabel!
@IBOutlet: 으로 정의 된 변수를 아웃렛 변수라고 한다.
(아웃렛 변수: 각 레이블이나 텍스트필드 등의 객체에 접근할 수 있는 변수이다.)
IB 는 Interface Builder 의 약자로 @IB 로 시작 되는 변수나 함수는 인터페이스 빌더와 관련 된 변수나 함수라는 것을 의미한다.
@IBOutlet 은 객체를 소스코드에서 참조하기 위해 사용하는 키워드이며 주로 색상이나 크기, 모양, 선의 두께, 텍스트 내용 등의 '객체의 속성을 제어'하는 데에 사용된다.
var lblHello: lblHello 라는 이름의 변수를 정의한다.
상수는 변수의 이름 앞에 let 을 사용하며 변수는 변수의 이름 앞에 var 를 사용한다.
UILabel!: 선언하고자하는 변수의 타입을 나타낸다. 해당 코드에서는 레이블 객체에 대한 변수를 선언했기 때문에 UILabel 클래스 타입을 선택했다.
strong / weak: 아웃렛 변수를 추가할 때 Storage 옵션에서 선택할 수 있었던 항목이다.
이 것은 메모리 회수 정책을 나타낸다. 객체를 참조하기 위해 일반적으로는 strong 을 사용한다. weak 을 선택하게 되면 변수의 앞에 weak var lblHello 처럼 weak 이 붙지만, strong 은 아무것도 붙지 않는다.
@IBOutlet weak var lblHello: UILabel!
strong, weak
strong 으로 선언 된 변수는 다른 곳에서 참조하고 있는 경우 메모리에서 제거 되지 않는다.
weak 으로 선언 된 변수는 다른 곳에 참조하고 있더라도 시스템이 임의적으로 메모리에서 제거할 수 있다.
이 차이는 메모리 관리 이슈 때문인데, strong 으로 선언 된 변수들끼리 상호 참조하는 일이 생길 경우에는 앱이 종료 되기 전까지는 메모리에서 제거 되지 않기 때문에 메모리 누수가 밣생한다. 이 경우 어느 한 변수 혹은 전체는 weak 으로 선언하는 경우 시스템에서 임의로 메모리에서 제거할 수 있으므로 상호 참조할 때에도 사용하지 않은 경우에는 메모리가 삭제 될 수 있다.
액션 함수를 추가하는 코드
@IBAction func btnSend(_sender: UIButton) {
lblHello.text = "Hello, " + txtName.text!
}
@IBAction: 으로 정의 된 함수를 액션함수라고 한다.
(액션 함수: 버튼을 누르거나 피커가 선택 되는 등, 특정 객체에서 원하는 이벤트가 발생했을 때 정해진 작업을 실행하기 위해 사용.)
func btnSend: 함수를 선언할 땐 키워드를 func 를 사용하고 그 뒤에 함수의 이름을 작성한다.
(_sender: UIButton): 액션 함수가 실행 되도록 이벤트를 보내는 객체이다. 버튼 객체에서 이벤트가 발생했을 때 해당 액션 함수를 실행시킬 것이므로 UIButton 클래스 타입을 선택했다.
lblHello.text: lblHello 객체가 갖고있는 속성 중 텍스트 내용을 의미한다.
txtName.text!: txtName 객체에서 입력 되는 텍스트 내용을 의미하는 속성이다. 끝에 붙는 ! 는 옵셔널 변수의 강제 언래핑을 의미한다.