리셋 되지 말자

클래스 멤머 메서드의 정적화 본문

Java(폐지)/Java 공부

클래스 멤머 메서드의 정적화

kyeongjun-dev 2020. 7. 20. 16:36

소스 코드


분명 펭귄 클래스를 인스턴스화 하여 객체참조변수인 뽀로로로 test() 메서드를 실행했는데 디버그의 스택 정보를 보면 실행이 '펭귄.test()'로 되어있는것을 확인할 수 있다.

JVM의 정적화

만약 펭귄 배열 100칸을 만든다고 하면 힙 메모리 영역에 똑같은 test()메서드를 100개 만드는 것은 메모리 낭비라고 할 수 있다. 그래서 JVM은 지능적으로 객체 멤버 메서드 test()를 스태틱 영역에 단 하나만 보유한다.
그리고 눈에 보이지 않지만 test() 메서드를 호출할 때 객체 자신을 나타내는 this 객체 참조 변수를 넘긴다.
즉, 위의 코드는 JVM에 의하여 아래의 코드로 변경된다고 생각하면 된다.

package stack01;

class 펭귄 {
	static void test(펭귄 펭귄참조변수) {
 		System.out.println("Test");
	}
}

public class Driver{
	public static void main(String[] args) {
		펭귄 뽀로로 = new 펭귄();
		펭귄.test(뽀로로);
	}
	
}

맞는건지 확실하지 않음. 펭귄참조변수 자리에 this 키워드를 쓰면 에러가 남.

(애초에 test() 메서드가 static으로 변경되는데 this 키워드를 못 쓰는게 맞는듯. 그냥 이런식으로 생각해라인 코드임!)

'Java(폐지) > Java 공부' 카테고리의 다른 글

super 키워드  (0) 2020.07.20
this 키워드  (0) 2020.07.20
java 8 람다  (0) 2020.07.20
interface 키워드와 implements 키워드  (0) 2020.07.20
package 키워드  (0) 2020.07.20
Comments