본문 바로가기
back-end/JAVA

15)객체지향-static메서드와 인스턴스 메서드(클래스 메서드)/static method and instance method(class method)

by 모두의 향연 2021. 5. 20.
728x90
반응형

인스턴스 메서드와 클래스 메서드

 

15-1) 인스턴스 메서드란?

-인스턴스 생성 후, '참조변수.메서드이름()'으로 호출

-인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드

-메서드 내에서 인스턴스 변수(iv) 사용 가능

 

15-2) static 메서드(클래스 메서드)란?

-객체 생성 없이 호출(ex. Math.random()의 경우 객체 생성 없이 사용했었죠?)

-인스턴스 멤버(iv, im)와 관련 없는 작업을 하는 메서드

-메서드 내에서 인스턴스 변수(iv) 사용불가


15-3) 인스턴스 메서드와 static메서드의 차이점

반환 타입(long), 메서드 이름(add)은 같은데, 매개변수가 다릅니다.

static메서드에서 매개변수는 지역변수(lv)죠?

그럼 'return a+b'에서 a, b는 인스턴스 변수일까요 지역변수일까요?

지역변수입니다. static메서드의 3번째 특징 '메서드 내에서 인스턴스 변수(iv) 사용불가'를 잊지 마세요.

 

 

15-4) 메서드 사용하기

메서드 사용하기

static메서드를 한마디로 정의하면? 객체 생성 없이 호출 가능한 메서드

(인스턴스 메서드의 경우 'Method mm =new Method();'와 같이 객체를 먼저 생성해야 변수와 메서드를 사용할 수 있습니다.)

그럼 코딩을 할 때 메서드에 static을 붙일지 말지는 어떻게 결정하나요? iv를 사용하지 않으면 static을 붙입니다.

인스턴스 메서드의 경우 매개변수가 없기 때문에 iv값을 쓰는 것이고, iv가 있기 때문에 매개변수를 쓰지 않는 것입니다.

객체란 무엇인가요? iv의 묶음입니다. 이해할 필요가 없어요. 그냥 외우세요.

클래스 메서드의 경우 iv가 필요 없습니다. 즉, 객체 생성이 필요 없다는 뜻이죠. 그러니 객체 생성 없이 바로 호출 가능하죠.


15-5) static을 언제 붙여야 할까?

변수의 경우, 속성 중에서 공통 속성에 static을 붙입니다.

이전에 변수에 대해선 설명을 했으니 이걸 보시면 됩니다.

 

8) 객체지향-클래스 변수와 인스턴스 변수의 차이점

8) 객체지향-클래스 변수(cv)와 인스턴스 변수(iv)의 차이점 포커 카드 하나하나가 객체이지요. 지금 위 사진에는 카드가 3장이니 객체가 3개 있습니다. 숫자와 무늬는 객체마다 다르게 유지(숫자:A

feastforall.tistory.com

 

메서드의 경우, 인스턴스 멤버(iv, im)를 사용하지 않는 메서드에 static을 붙입니다.

변수처럼 공통 속성에 static을 붙이지 않습니다.

메서드의 경우 명령문의 집합입니다. 객체마다 다르고 공통인 그런 게 없고, 메서드는 다 똑같습니다.
iv를 쓰느냐 안 쓰느냐만 다른 거지 메서드 내용은 다 똑같습니다.
im도 어차피 iv를 사용하기 때문에 결론적으로 iv를 사용하지 않는 메서드가 static메서드다 라고 이해하시면 됩니다.

 

15-6) static메서드에서 인스턴스 변수/인스턴스 메서드 사용(에러)

static메서드에서 iv를 사용

static메서드에서 iv를 사용하니 에러가 납니다. 

static메서드에 iv를 사용하면 안 되니까요.

 

 

static메서드에서 im 사용

인스턴스 메서드에서 인스턴스 메서드와 static메서드는 호출 가능합니다.

하지만, static메서드에서 인스턴스 메서드는 에러가 납니다. 

인스턴스 멤버(iv, im) 사용은 불가능하니까요. 

왜? 인스턴스 메서드는 iv를 가지고 작업하는 것이니 객체가 필요합니다.

근데 객체가 생성이 되었는지 안되었는지 모르니까 사용 불가합니다.

 

 

<정리 퀴즈>

1. 객체란 무엇입니까?

iv의 묶음입니다.

2. static메서드를 한 마디로 정의하면?

객체 생성 없이 사용 가능한 메서드

3. static변수는 어떨 때 붙입니까?

공통 속성일 때

4. 메서드에서 static 붙일지 말지는 어떻게 결정합니까?

iv사용 여부에 따라

5. static메서드는 static메서드 호출 가능합니까?

6. static메서드는 인스턴스 변수 사용가능합니까?

아니요(인스턴스 변수는 객체를 생성해야 사용 가능한데, static메서드는 객체 생성 없이 사용 가능하다 보니 쓸 수 없다)

7. static메서드는 인스턴스 메서드 호출가능합니까?

아니요(인스턴스 메서드는 객체를 생성해야 사용 가능한데, static메서드는 객체 생성 없이 사용 가능하다 보니 쓸 수 없다)
8. 왜? static메서드는 인스턴스 멤버(iv, im)를 쓸 수 없나요?

static메서드는 호출 시 객체가 없을 수도 있어서

 

 



*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*

728x90
반응형