본문 바로가기
언어와 프레임워크/Java

[JAVA] 클래스 메서드와 인스턴스 메서드

by Unagi_zoso 2022. 6. 25.

클래스의 내부에는 클래스 메서드와 인스턴스 메서드가 존재한다.

 

클래스 메서드는 메서드 앞에 static을 붙임으로 선언할 수 있고

클래스 메서드는 객체를 생성하지 않고도 다음과 같은 식으로 호출할 수 있다.

 

'클래스이름.메서드이름(매개변수)'

 

 

그에 반해 인스턴스 메서드는 static을 붙이지 않고 선언하며

객체를 생성해야만 호출할 수 있다.

 

 

이는 JVM가 관리하는 메모리 영역에서 생성되는 시점에 따른 차이 때문이다.

 

 

클래스 메서드(클래스변수 포함)는 해당 클래스가 사용될 시 JVM의 메서드 영역에 저장된다. 

인스턴스 메서드(인스턴스 변수 포함)는  그 인스턴스가 생성될 때 메모리 상에 유효하게 되어 사용이 가능하다.

그렇기에 늘 상 클래스 메서드가 인스턴스 메서드보다 먼저 태어난다.

 

한 클래스 안에 클래스 메서드와 인스턴스 메서드가 존재할 때 

인스턴스 메서드는 클래스 메서드를 호출할 수 있는 반면

클래스 메서드는 인스턴스 메서드를 호출할 수 없다.

앞서 말한듯 클래스 메서드가 태어날 땐 인스턴스는 태어나지 않았기 때문이다.

 

 

그럼 클래스, 인스턴스 메서드는 어떻게 구분하고 어떤때 클래스 메서드를 사용하면되나?

 

인스턴스 메서드는 인스턴스 변수와 관련된 작업을 하는, 즉 메서드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드이다.

반면 메서드 중 인스턴스와 관계없는 메서드를 클래스 메서드로 정의하면 된다.

 

 

다음은 클래스를 설계 시 고려해볼 사항이다.

 

1.클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.

- 인스턴스 변수들은 각 인스턴스마다 독립적이지만, 인스턴스 변수는 값이 공유 되기 때문이다.

 

2. 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.

- 메서드의 작업내용 중에서 인스턴스변수를 필요로 하지 않는다면 static을 붙여, 메서드 호출시간이 짧아지므로 성능이 향상된다. static을 안 붙인 메서드는 실행 시 호출되어야 할 메서드를 찾는 과정이 추가적으로 필요하기 때문에 시간이 걸린다.

 

 

이 글은 자바의 정석 책을 참고하여 작성하였습니다.

 

읽어주셔 감사합니다.

틀린 부분이나 부족한 부분이 있다면 알려주세요. 감사합니다.

댓글