Static?

김동규·2022년 11월 2일

JAVA

목록 보기
22/38

👨‍👨‍👦-Static?

정적(static)은 고정된이란 의미를 가지고 있다. Static이라는 키워드를 사용하여 Static변수와 Static메소드를 만들 수 있는데 정적 필드와 정적 메소드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이다. 그렇기에 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할때 클래스별로 관리된다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있게된다.

static 변수 = 클래스 변수 = 공유 변수 = 정적 변수 = 정적 변수

즉 Static 이란 한번 먼저 올려서 공유하는 변수,메소드 이다.

public static void main(String[] args){}

일반 메서드는 객체가 new 키워드를 이용해 생성이 되야 객체가 메모리에 할당되어 접근/호출이 가능하다. 그렇다면 우리가 프로그램을 실행할 경우를 보자. 일반적으로 cmd 창에서 자바 프로그램을 실행할 경우 java "메인 클래스"로 실행을 한다. 여기서 main() 함수에 static이 붙지 않다는 하나의 가정을 한다. 그러면 cmd창에 java "메인 클래스" 를 입력해 프로그램을 실행할 경우 내부적으로 아래와 같은 코드가 실행 되어야만 한다. 하지만 이러한 코딩은 어디에도 존재하지 않는다. 밑의 코드와 같이 객체를 생성하지 않는 데 어떻게 main() 메서드가 자동으로 할당되는 것일까?

 메인클래스 변수 = new 메인클래스(); 

 변수.main();

왜냐하면 main()함수가 static으로 선언되어 있기 때문이다. 위에서 말했듯이 static으로 선언한 메서드는 자바 가상머신(JVM)에서 객체 생성 없이 메모리에 할당시켜 호출 가능한 형태로 만든다. 실제로 cmd창에 java "메인 클래스"를 입력하면 JVM은 메인 클래스의 객체를 생성하는 것이 아니라, 클래스의 static으로 선언된 메서드를 객체 생성 없이 메모리에 할당시키고 할당된 메서드 중 "main"으로 네이밍된 메서드가 있는지 찾아 호출하게 된다. 즉 "(메인 클래스).main()"이 JVM 상에서 실행되는 것이다. 따라서 Entry Point 즉, main() 메서드는 static 이어야 한다.

profile
HigasiHosi

0개의 댓글