클래스 메소드, 인스턴스 메소드 선언 비교
Objective-C 에서는 클래스 메소드와 인스턴스 메소드 두 가지로 메소드를 호출할 수 있다.
클래스 메소드는 리시버가 클래스인 메소드이고 인스턴스 메소드는 리시버가 객체인 메소드이다.
메소드 정의 시 +로 시작하는지 - 로 시작하는지로 구분할 수 있는데 코드로 살펴보자.
※ convertInchToCm 는 Inch값을 Cm 값으로 변환하는 클래스 메소드
※ convertCmToInch 는 Cm값을 Inch 값으로 변환하는 인스턴스 메소드
여기까지는 + 와 - 차이 말고 별 차이가 없어 보인다.
그럼 이제 각각의 메소드를 호출해보자.
메소드 호출
보다시피 직접 메소드를 호출해보면 클래스 메소드와 인스턴스 메소드의 차이가 확연히 드러난다.
클래스 메소드는 인스턴스 생성을 하지 않고 클래스명을 그대로 사용해서 메소드를 호출하고
인스턴스 메소드는 반드시 인스턴스 생성을 해서 그 주소값(메모리의 Heap 영역)을 가지고 있는 변수를 통해 메소드에 접근해야 한다.
그리고 우리는 이미 클래스 메소드와 인스턴스 메소드를 알고 썼든 모르고 썼든 항상 사용하고 있다.
접근 가능한 데이터 영역의 차이점
클래스 메소드는 인스턴스를 생성하지 않고 사용하는 메소드라고 했다.
따라서 인스턴스가 생성된 후 런타임 시점에 메모리의 heap 영역에 할당되는 @property 데이터는 클래스 메소드에서 사용할 수 없고, 컴파일 시점에 존재 여부나 값을 확인할 수 있는 전역변수, 클래스 메소드에 사용되는 매개변수 등만을 사용할 수 있다.
코드로 다시 보자
이처럼 클래스 메소드는 전역변수 값은 활용 가능하지만 self.propertyNumber 와 같이
인스턴스가 만들어지고 값이 할당되어 접근해야 하는 @property 값은 사용할 수 없다.
다만, 아래 코드와 같이 self, super 등을 통한 클래스 메소드 접근은 가능하고
상속받은 클래스 메소드에 대한 오버라이딩도 가능하다.
https://m.blog.naver.com/PostView.nhn?blogId=itperson&logNo=220822532771&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F
'IT' 카테고리의 다른 글
IE11 에서 DOM7009 에러 (0) | 2019.05.22 |
---|---|
지금 배울 만한 9가지 최첨단 프로그래밍 (0) | 2019.05.16 |
모든 콘텐츠 표시 (보안 콘텐츠만 표시됩니다.) (0) | 2019.05.14 |
Object c Pdf (0) | 2018.01.04 |
jquery 새로고침(reload) (0) | 2018.01.03 |
Objective C pdf (0) | 2017.12.28 |
윈도우10 설치시 필요한 프로그램 (0) | 2017.06.19 |