본문 바로가기

Swift의 모든것

[Swift의 모든것] Instance Method / Type Method

안녕하세요 ~
오늘은 Instance Method와 Type Method에 관해서 알아보려고 해요 ~!

두 Method의 차이를 찾아보게 된 계기는...
"객체(인스턴스)를 생성하지 않고 호출되는 Method를 뭐라고 부르더라...!" 라는 호기심에서 시작됐습니다.
결론부터 말하자면 제가 궁금해하던 메서드는 바로 Type Method였습니다 !!
그럼 본격적으로 Instance Method와 Type Method에 대해 알아보도록 하겠습니다.

 


일단 Method에 대해 알아보기 전에 Method와 헷갈릴 수 있는 개념인 함수와 Method의 차이는 아래 글에서 확인 부탁드리겠습니다 !
https://0ofkim.tistory.com/53

 

[Swift의 모든것] 함수(Function)과 메서드(Method)의 차이

안녕하세요 ~! 개발을 하면서 Instance Method를 생성하다가... (뒤늦게 표현할 줄 아는 Instance Method...) 갑자기 "function과 method의 차이가 뭐지?"란 생각을 해보는데 머리에 물음표가 뜨는겁니다... 그래

0ofkim.tistory.com


 

 

인스턴스 메소드(Instance Method) 란?
: 클래스, 구조체 또는 열거형과 같은 객체 타입이 만들어내는 인스턴스에 소속된 함수 
class Person {
    func introduce() {
        print("안녕하세요 저는 사람입니다.")
    }
}

let aPerson = Person()
aPerson.introduce() // "안녕하세요 저는 사람입니다."
타입 메소드(Type Method) 란?
: 인스턴스를 생성하지 않고 클래스나 구조체 자체에서 호출할 수 있는 메소드
class Person {
    static func introduce() {
        print("안녕하세요 저는 사람입니다.")
    }
}

Person.introduce()

 

예시만 봐도 바로 이해가 가실겁니다 !
[두 Method의 차이점]
Instance Method는 객체 타입의 인스턴스에 대한 호출을 하지만,
Type Method는 객체 자체에 대한 호출을 한다는 것입니다.

 

Type Method를 선언할 때는 static 키워드를 사용하고 Instance Property 또한 참조할 수 없습니다.
예를 들어

class Person {
	let name: String = "홍길동"

    static func introduce() {
        print("안녕하세요 저는 \(name)입니다.") //Instance member 'name' cannot be used on type 'Person'
    }
}

Person.introduce()

위와 같이 사용하면 에러가 납니다 !!
왜냐하면 Type Method 자체에는 Instance가 존재하지 않기 때문입니다.
에러를 해결하기 위해서는 Property 또한 Type Property를 선언해주고 사용해야 합니다.

추가로 하위 클래스에서 재정의 가능한 Type Method를 선언할 때는 class 키워드를 사용하는데,,,
앞서 사용했던 static 키워드와 방금 언급한 class 키워드의 차이에 관련해서는 다른 글에서 새로 다루도록 하겠습니다.

 

오늘은 이만...! 부실한 내용 읽어주셔서 감사합니다.
추가로 궁금하신 사항이나 수정/보완해야할 사항이 있다면 댓글 남겨주세요 ~!