Swift) Instance 메서드와 Type 메서드의 차이점을 설명하시오.

Instance Method

  • 특정 클래스, 구조체 또는 열거형의 인스턴스에 속하는 함수
  • 특정 타입의 인스턴스에서 호출되는 메서드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 키워드에는 ClassStatic이 있다.
  • 이 두 키워드가 붙은 메서드는 인스턴스의 생성 없이 사용이 가능하다.

Class 키워드

  • class 키워드는 class에서만 사용 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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를 막을 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// 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) Instance 메서드와 Type 메서드의 차이점을 설명하시오.

https://suzumsz.github.io/2021/10/06/Swift/Instance vs Type/

Author

Sujeong Kim

Posted on

2021-10-06

Updated on

2022-01-10

Licensed under

댓글