inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지

화면 이동과 데이터 전달 (활용 앱30강)

self와 클래스이름.self의 차이점

해결된 질문

359

S W

작성한 질문수 1

1

안녕하세요 강사님
섹션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
    } ()

swift ios

답변 1

1

앨런(Allen)

안녕하세요! 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