[Java] Static 이란?

무지성개발자·2023년 7월 17일

static의 정의

static은 정적 이란 뜻으로 고정된 의미를 지니고 있다.
주로 클래스 멤버에 대해 사용되고 해당 맴버가 객체가 아닌 클래스에 고정되어 사용된다(클래스 인스턴스화 없이 사용한다는 뜻).


static의 특징

  • 클래스에 인스턴스화 없이 접근 가능.

  • 객체가 아닌 클래스와 연결되어 있음.

  • 오버로딩은 가능 하지만 오버라이딩은 불가.

  • non-static 멤버에는 액세스를 할 수 없음.


static의 장점

  • Static 메모리 영역에 한번 등록 되어 사용하기에 메모리 측면에서 효율이 좋다.

  • 클래스가 메모리에 등록 되는 시점에 같이 메모리에 올라가 있어 속도가 빠르다.


static의 단점

static을 잘 못 사용하면 어떤 문제가 있을까?

  • 런타임 종료까지 Static 메모리 영역에 남아있다.

    • 사용을 안해도 메모리는 계속 차지하니 남발해서 사용x.
  • 값을 수정하게 된다면 사용 중인 모든 곳에 영향을 미쳐 무슨 문제가 발생 할 지 알 수 없다.

  • thread safe 하지 않아 동시성 문제가 있다.


Static을 사용해보자!

Circle이라는 클래스를 작성한다고 생각해보자!
원주율π은 모든 Circle이 3.14로 똑같다.(수리7등급은 타원 모른다)
원주율은 어떤 Circle객체든 같은 값을 필요로 하니 객체와 분리하여 클래스에 고정시켜 놓고 사용하면 좋다.

글 처음에 static은 객체가 아닌 클래스에 고정되어 사용 된다고 했다.

그렇다면 눈 여겨 봐야할 곳은 3군데 이다.

  • 변수 pi는 static이기에 <클래스.변수>와 같이 Circle.pi로 사용했다.

  • static 메서드인 getCount()역시 <클래스.메서드>인 Circle.getCount()로 사용했다.

  • count변수는 왜 static일까? 바로 static 메서드는 static 변수만 접근 가능하며, 전체 객체의 갯수를 알아야하니 하나의 고정값을 써야한다.

한줄 평 : static 값은 웬만하면 수정하지 말자!

참고 -
https://www.geeksforgeeks.org/static-keyword-java/

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

글이 많은 도움이 되었습니다, 감사합니다.

답글 달기