self와 클래스이름.self의 차이점
안녕하세요 강사님
섹션8에 활용 앱 30강을 수강 중 self, FirstViewController.self의 차이점이 궁금해서 질문드립니다.
영상의 나온 코드를 작성 후 정상적으로 작동이 되었습니다. 그런데 Xcode에서는 self 대신 FirstViewController.self를 사용하면 경고창이 사라진다고 하길래 Fix 후 실행시켰지만 backbutton 클릭 시 앱이 종료되었습니다.
self와 FirstViewController.self는 어떤 차이점이 있길래 back누를 시 앱이 종료되는 걸까요?
let backButton: UIButton = {
let button: UIButton = UIButton()
button.setTitle("Back", for: .normal)
button.setTitleColor(.white, for: .normal)
button.backgroundColor = .blue
button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 20)
// self -> FirstViewController.self 변경
button.addTarget(FirstViewController.self, action: #selector(backButtonTapped), for: UIControl.Event.touchUpInside)
return button
} ()
답변 1
1
안녕하세요! S W 님.
해당 내용은 사실 Swift 문법적인 내용이라..
자세하게 답변드리기 보다는.. 아래와 같은 "메타 타입"의 개념을 살펴보시는 것이 좋습니다.
(구글링 ===> Swift + 메타타입)
https://woozzang.tistory.com/160
1) self는 ===> 메모리에 올라가 있는 실체, 즉 인스턴스를 가리키는 것이고요.
2) 타입.self는 ===> 타입 자체를 가리키는 것이예요.
그래서..
예를 들어,
1)
let myClass: MyClass = MyClass( )
오른쪽에서 MyClass 인스턴스를 생성해서 왼쪽 상수에 담으면.. 힙 메모리에 올라간 (데이터의) 실체가 왼쪽 상수에 담긴것이지요.
그리고 이 데이터 실체를 클래스 내부에서 self라고 합니다. (인스턴스 자신)
그래서 보통은 MyClass 내부에서 자신의 인스턴스를 가리킬때, self를 사용하는 것이고요.
(쉽게 이야기 하자면 self는 붕어빵을 가리키는 것이고요.)
2)
let myClassType: MyClass.Type = MyClass.self
이런 개념도 있어요. 이건 뭐냐면.. 타입 자신입니다. 즉, 구체적인 힙 메모리의 데이터를 가리키는 것이 아니라, 데이터 영역에 존재하는 클래스 타입을 가리키는 것입니다.
(쉽게 이야기 하자면, 붕어빵 틀을 가리키는 것이예요. 그리고 그 붕어빵 틀의 타입을 타입.Type 이라고 표현합니다.)
그래서 최대한 간단히 설명드려볼려고 했지만, 어쨌든.. 해당 자리에는 self를 쓰셔야 하고, 일단 let을 lazy var로 선언하셔야할 것 같네요.
감사합니다. :)
수강연장부탁드려도될까요..
0
41
2
Drawing Cycle 관련 질문
0
72
1
앱 제작 시 주로 코드로 작성하시는 이유가 있을까요?
0
95
2
델리게이트 패턴 관련 질문
0
66
2
수강 기간 연장 부탁드릴 수 있을까요?
0
61
1
활용 앱 57강 질문입니다.
0
55
1
활용 앱 30강 에러 질문입니다
0
64
2
기초앱 17강 Contraints 설정 질문입니다.
0
67
2
기초 앱 4강 Type Any -> UIButton
0
65
2
34강 유용한 앱 추천에 나오는 UIKitViewer에 대해서 질문이 있습니다
0
78
1
깃에 코드는 올려도 된다고 하셨는데
0
109
1
수강기간 연장신청 드려도 될까요?
0
82
1
수강 기간 연장 부탁드려도 될까요?
0
120
2
수강 기간 연장 신청 요청드립니다.
0
131
2
playground에서 상단 실행?아이콘 회전 관련하여...
0
136
1
활용앱53강에서 질문있습니다.
0
164
2
Project 명칭 변경방법이 궁금합니다.
0
140
1
override 에 대해서 궁금한 것이 있습니다.
0
124
2
섹션8] 코드 리팩토링 문의
0
99
1
xcode 에서 ios 버전 선택 및 시뮬레이터 관련 질문
0
564
2
수강 기간 연장 부탁드려도 될까요?
0
130
2
뷰모델의 상태변화 와 didSet
0
98
1
@Sendable 키워드
0
94
1
클로저
0
105
2





