안녕하세요!
Kio
입니다 👻
여러분은self
와Self
의 차이가 무엇인지 아시나요?
저는대문자
,소문자
차이가 아닌가 라고 생각했는데
그 차이였다면... 헤매지 않았을거에요...😱
그래서 오늘은 어떤 차이가 있는지 알아볼게요!
Let's get started 🥰
포스팅을 읽으면서 헷갈릴 수 있으니
self(소문자)
에는 🟡
Self(대문자)
에는 🔵
🟡 self
와🔵 Self
⬅️ 이렇게 표시할게요
프로코토콜
,프로토콜 확장
을 사용할 때
🟡 self
와🔵 Self
에는 차이점이 있습니다.
🔵 Self
를 사용할 때는
프로토콜을 준수하는Type
을 나타냅니다.
ex) String, Int, Double
🟡 self
를 사용할 때는
해당Type
내부의 값을 나타냅니다.
ex) "Hello kio", 234
당연히 예시가 있어야겠죠?!
저는 예시 없이는 이해하지 못합니다...😱
extension BinaryInteger {
func squared() -> Self {
return self * self
}
func plus() -> Self {
return self + self
}
}
아니,
BinaryInteger
가 뭔지 알려줘야 하는 거 아냐?
네... 저도 몰라서 찾아봤습니다.
BinaryInteger protocol
은
모든integer types
의 기초가 되는 프로토콜입니다.
쉽게 말해서Int
,Int64
,UInt32
등의
integer types
은 모두BinaryInteger protocol
을 따르고 있다는 거죠 👻
그럼 실제 코드를 볼까요?!
저는 머리가 안 좋은 관계로Int
만 사용해보았습니다 👀
extension
으로 확장해서 선언했던 메서드가 사용가능하네요!
10.squared()
10.plus()
어떻게 이 결과가 나온 지 이해가 되시나요?!
🟡 self
와🔵 Self
를 여기서 설명해볼 수 있을 것 같은데요!
10
이라는Int
를 사용했으니Int
로 해볼게요!
extension으로 BinaryInteger를 이렇게 확장했었죠
extension BinaryInteger {
func squared() -> 🔵 Self {
return 🟡 self * 🟡 self
}
func plus() -> 🔵 Self {
return 🟡 self + 🟡 self
}
}
그리고 실제 넣었던 값인 10 을 넣어볼게요!
Int
는BinaryInteger
를 준수하므로
아래처럼 동작된다고 생각해볼 수 있습니다.
extension Int {
func squared() -> 🔵 Int {
return 🟡 10 * 🟡 10
}
func plus() -> 🔵 Int {
return 🟡 10 + 🟡 10
}
}
10.squared() // 100
10.plus() // 20
이제 왜 이런 값이 나오는 지 이해가 되실 것 같네요!
🔵 Self
를 사용할 때는
프로토콜을 준수하는Type
을 나타냅니다.
위의 예시 코드에서Int
는BinaryInteger
를 준수하므로
10
이라는Int Type
을 넣으면 return 값이
🔵 Self
이기 때문에 처음 넣었던Int Type
를 반환합니다.
🟡 self
는
해당 Type이 보유하는 모든 값을 나타냅니다.
위의 예시에서10
이라는 값을 호출하였으니
squared()
를 사용한다면10 * 10
이 됩니다.
이렇게
🟡 self
와🔵 Self
에 대해 알아보았는데요!
이제 어떤 차이인지 아셨을 거에요 👻
But... 확실히 알려면 아래도 알아야합니다(?)
🟡 self
에는
1) 인스턴스 내부에서 인스턴스 속성을 가르킬 때
2) 타입속성 메서드에서 타입자체를 가르킬 때
3) 타입자체의 형태를 가르킬 때
🔵 Self
에는
1) 프로토콜에서 채택하는 타입을 지칭할 때
2) 타입을 확장할 때 내부에서 타입을 선언할 때
3) 타입 내부에서 타입 속성 및 타입 메서드를 지칭할 때
그런데 이거는 왜 포스팅 안하냐구요?!
너무 힘들어요... 안할 거에요...~공부하세요(아쿠마,,,)~
저는 이 부분을 정리한 것만으로도 기분이 아주 좋습니다 🥰
Self vs self - what's the difference? - Hacking with Swift
BinaryInteger - developer.apple
앨런 Swift문법 마스터 스쿨
잘못된 정보가 있으면 언제든 코멘트 부탁드립니다 👻