클래스의 내부에는 클래스 메서드와 인스턴스 메서드가 존재한다.
클래스 메서드는 메서드 앞에 static을 붙임으로 선언할 수 있고
클래스 메서드는 객체를 생성하지 않고도 다음과 같은 식으로 호출할 수 있다.
'클래스이름.메서드이름(매개변수)'
그에 반해 인스턴스 메서드는 static을 붙이지 않고 선언하며
객체를 생성해야만 호출할 수 있다.
이는 JVM가 관리하는 메모리 영역에서 생성되는 시점에 따른 차이 때문이다.
클래스 메서드(클래스변수 포함)는 해당 클래스가 사용될 시 JVM의 메서드 영역에 저장된다.
인스턴스 메서드(인스턴스 변수 포함)는 그 인스턴스가 생성될 때 메모리 상에 유효하게 되어 사용이 가능하다.
그렇기에 늘 상 클래스 메서드가 인스턴스 메서드보다 먼저 태어난다.
한 클래스 안에 클래스 메서드와 인스턴스 메서드가 존재할 때
인스턴스 메서드는 클래스 메서드를 호출할 수 있는 반면
클래스 메서드는 인스턴스 메서드를 호출할 수 없다.
앞서 말한듯 클래스 메서드가 태어날 땐 인스턴스는 태어나지 않았기 때문이다.
그럼 클래스, 인스턴스 메서드는 어떻게 구분하고 어떤때 클래스 메서드를 사용하면되나?
인스턴스 메서드는 인스턴스 변수와 관련된 작업을 하는, 즉 메서드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드이다.
반면 메서드 중 인스턴스와 관계없는 메서드를 클래스 메서드로 정의하면 된다.
다음은 클래스를 설계 시 고려해볼 사항이다.
1.클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
- 인스턴스 변수들은 각 인스턴스마다 독립적이지만, 인스턴스 변수는 값이 공유 되기 때문이다.
2. 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.
- 메서드의 작업내용 중에서 인스턴스변수를 필요로 하지 않는다면 static을 붙여, 메서드 호출시간이 짧아지므로 성능이 향상된다. static을 안 붙인 메서드는 실행 시 호출되어야 할 메서드를 찾는 과정이 추가적으로 필요하기 때문에 시간이 걸린다.
이 글은 자바의 정석 책을 참고하여 작성하였습니다.
읽어주셔 감사합니다.
틀린 부분이나 부족한 부분이 있다면 알려주세요. 감사합니다.
'언어와 프레임워크 > Java' 카테고리의 다른 글
[JAVA] Intellij JDK 한글 깨짐 (Open JDK18 이전, 이후 나눔) (1) | 2022.07.14 |
---|---|
[JAVA] java 입장에서 call by value와 call by reference의 짧은 고찰. (0) | 2022.06.26 |
[JAVA] JVM의 메모리 구조 (0) | 2022.06.25 |
[JAVA] 클래스변수, 인스턴스변수, 지역변수 (0) | 2022.06.25 |
국내 웹시장에선 왜 Java 그리고 Spring이 많이 쓰일까에 대하여. (0) | 2022.05.30 |
댓글