Instance 메서드와 Type 메서드의 차이점을 설명하시오.
2022. 5. 8. 13:30ㆍSwift/기술 면접
Instance Method
- 특정 클래스, 구조체 또는 열거형의 인스턴스에 속하는 함수
특정 타입의 인스턴스에서 호출되는 메서드
class Sample {
var something : String?
func useInstanceMethod() {
print("instance method!!")
}
}
// 인스턴스 메서드를 사용하기 위해서는?
// 1. 인스턴스를 생성해준다.
var some : Sample = Sample()
// 2. 인스턴스 메서드는 생성한 인스턴스와 함께 사용할 수 있다.
some.useInstanceMethod()
// ----- 출력값
// instance method!!
📌 some이라는 인스턴스를 만들어주고, some의 내부함수인 useInstanceMethod()를 호출하여 값을 받을 수 있다.
📌 여기서!! 인스턴스를 만들고 내부함수를 호출 한다는 것이 중요하다!!
Type Method
타입 자체에서 호출되는 메서드- Type Method 키워드에는
Class와Static이 있다. - 이 두 키워드가 붙은 메서드는
인스턴스의 생성 없이 사용이 가능하다.
Class 키워드
- class 키워드는 class에서만 사용 가능하다.
class SomeClass {
// 인스턴스 메서드
func InstanceMethod() {
print("Instance!!!")
}
// 타입 메서드
// 일반적인 클래스와는 쓰임새가 다르다.
class func getSomething() {
print("Type!!!")
}
}
// 인스턴스 메서드 사용
var some : SomeClass = SomeClass()
//
some.InstanceMethod()
// ----- 출력값
// Instance!!!
// 타입 메소드로 지정한 것은 인스턴스 메소드처럼 사용이 불가능하다.
// 에러
// some.getSomething()
// 타입 메서드는 타입 자체에서 호출해준다.
SomeClass.getSomething()
// ----- 출력값
// Type!!!
Class 키워드의 장점
반복적으로 일어나는 것을 처리하기에 좋다.
인스턴스를 따로 생성하지 않기 떄문에 메모리 걱정을 할 필요가 없다.
Class 키워드의 단점
확장성이 좋지 않다.
당연한 값들로만 리턴을 하고, 초기화가 없기 떄문에 변수를 쓰지 못한다.
Static 키워드
- class 키워드와의 차이점은
override 가능 여부이다. - static 키워드는 override가 불가하다.
class 키워드는해당 클래스를 상속 받았을 경우 오버라이드가 가능하다.class func를 하위 클래스에서static func로 override하는 것도 가능하다.- class 키워드 앞에
final 키워드를 붙이게 되면override를 막을 수 있다.
// SomeClass를 SubClass가 상속받아 오버라이드 가능
class SubClass: SomeClass {
override class func getSomething() {
print("wow")
}
}
SubClass.getSomething()
// ----- 출력값
// wow
// class func를 하위 클래스에서
// static func로 override 하는 것 가능
class SubClass: SomeClass {
override static func getSomething() {
print("wow")
}
}
SubClass.getSomething()
// ----- 출력값
// wow
// SomeClass의 getSomething키워드를 static으로 변경한다면
class SomeClass {
func InstanceMethod() {
print("Instance!!!")
}
// static으로 선언
static func getSomething() {
print("Type!!!")
}
}
class SubClass: SomeClass {
// static method는 오버라이드가 불가하다라는 에러메시지가 뜬다.
// error: Can not override static method
override class func getSomething() {
print("wow")
}
}
참고
'Swift > 기술 면접' 카테고리의 다른 글
| Bounds와 Frame의 차이점을 설명하시오. (0) | 2022.05.11 |
|---|---|
| Singleton Pattern에 대해 설명하시오. (0) | 2022.05.08 |
| 스토리보드를 이용했을 때의 장단점을 설명하시오. (0) | 2022.05.08 |
| Struct가 무엇이고 어떻게 사용하는지 설명하시오. (0) | 2022.05.08 |
| Optional이란 무엇인지 설명하시오. (0) | 2022.05.08 |