자바의 메모리 정리

이희수·2025년 1월 17일

코드가 실행될 때 선언된 필드, 메서드 등이 메모리로 올라간다. 메모리로 올라가 있는 필드와 메서드 등이 코드가 실행되면서 사용되는 것이다.

클래스를 만들고, 메인 메서드에서 해당 클래스의 필드와 메서드를 사용하려 할 때
Class.feild;
Class.method();
이러한 방식으로 호출할 수 없는 이유는, 인스턴스화 되지 않은 클래스는 실체가 없어서 해당 클래스가 메모리에 올라오지 않았기 때문이다.
클래스가 메모리에 없기 때문에, 해당 클래스의 필드와 메서드도 사용할 수 없는 것은 당연한 일 일거다.

클래스를 사용하려면
Class class = new Class();
와 같이 먼저 인스턴스화 시켜줘야 한다.

객체로 만들어진 클래스는 메모리로 올라오고, 메모리에 있기 때문에 사용할 수 있다.
class.feild;
이렇게 말이다.

그렇다면
System.out.print()
이런 경우는 어떻게 가능할까??

해당 클래스가 static인 경우 인스턴스화 시킬 필요 없이 사용할 수 있다.

static 키워드가 붙어있는 경우, 실행될 때 바로 메모리에 올라간다. 따라서 객체를 만들 필요 없이 바로 사용 가능!

그럼 전부 static으로 만들지, 왜 굳이 힘들게 인스턴스화 시키고 어쩌구 저쩌구 복잡하게 하냐고??
->
static 은 정적이라는 뜻을 가지고 있다. 즉 한 번 메모리에 올라가서 변하지 않는다.

Human human1 = new Human();
Human human2 = new Human();

human1.name = 장원영;
human2.name = 차은우;

이렇게 만들어진 객체별로 다른 이름을 가질 수 있어야 하는데, static으로 메모리에 올라간 경우에는 위의 경우 human1, human2 모두 차은우 이름을 가지게 된다.

따라서 의도적으로 static을 사용하는 경우를 제외하고, 대부분의 경우 static을 사용하지 않는다.

0개의 댓글