ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] Static 키워드
    자바 2023. 4. 27. 11:03

    코드를 짜면서 static이라는 키워드에 대해 생각을 하지 않았다

    면접 준비할 때 static이 뭔지에 대해서 암기만 했을 뿐...

    이번에 왜 메서드와 클래스에 static을 넣었냐는 질문을 받으니 그냥...이라는 말 밖에 할 수 없었다

    정리해 보니 지금은 작은 프로그램이라 상관이 없지만, 큰 프로그램을 다룰 때는 반드시 고려해야 하는 것이구나 느꼈다

     

     


     

     

    static 키워드 (static : 정적, 고정된)

    static 변수, static 메서드 > 정적필드와 정적메서드

    > 정적멤버

    > 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버

    > 공용으로 사용하느냐 아니냐에 따라 static 키워드 사용할지말

    > main 메서드보다 먼저 실행

     

     

     

    1. 메모리에 고정적으로 할당된다.

    - static이 붙지 않는 메서드/변수는 객체가 생성될 때마다 호출되어 서로 다른 값을 가질 수 있다.

    - 각 객체들에서 공통적으로 하나의 값이 유지되어야 할 경우 static을 유용하게 사용할 수 있다.

     

     

     

    2. 객체 생성 없이 사용할 수 있다.

    - 어떤 객체에 소속되어 있다는 뜻은 new 키워드를 이용하여 객체를 생성해야만 해당 변수나 메서드를 사용할 수 있다는 뜻

    - 이런 경우 "callApi"라는 객체가 생성되어야 실행될 수 있다.

    - static이 있는 경우 바로 호출 가능, static 키워드를 붙이면 객체 생성 없이도 메서드나 변수를 사용할 수 있다

     

     

     

    3. 프로그램이 시작되면 메모리의 static 영역에 적재되고 프로그램이 종료될 때 해제된다.

    - 일반적인 메서드 : 일반적인 메서드는 객체를 생성하면 메모리의 Heap 영역에 올라간다. 메모리의 heap 영역은 GC에 의해 자동으로 관리된다. GC는 사용하지 않는 객체의 경우 알아서 삭제시킴으로써 메모리를 관리한다.

    - static 메서드 : static 영역이 존재하기 때문에 GC의 관리를 받지 않는다. 따라서 프로그램이 종료될 때 해제하게 되는데, 이 때문에 과도하게 많은 ststic을 선언할 경우 과부하가 올 수 있다. 또한 프로그램 시작 시 static 영역의 메모리 크기를 넘어서는 양의 static 메서드들이 존재하면 시작과 동시에 에러가 발생한다. 사용하기 쉽다고 해서 static을 남발하는 것은 조심해야 한다.

    > 인스턴스 변수는 인스턴스가 생성될 대마다 생성되므로 인스턴스마다 각기 다른 값을 가지지만 정적 변수는 모든 인스턴스가 하나의 저장공간을 공유하기에 항상 같은 값을 가진다.

     

     

     

    4. static 메서드 내에서는 인스턴스 변수를 사용할 수 없다.

    static 메서드는 프로그램 실행과 동시에 메모리에 올라가기 때문에 인스턴스 변수는 사용할 수 없다. 메서드에 static 키워드를 사용하고 싶다면, 해당 메서드 내부에 인스턴스 변수나 인스턴스 메서드를 사용하는지 확인해야 한다.

     

     

     

     

     


    (참고)

    https://kingofbackend.tistory.com/131

    https://jooona.tistory.com/m/164

    https://ojava.tistory.com/50

    728x90
Designed by Tistory.