본문 바로가기
Java

[Java] static

by 쁘니쁘나 2020. 6. 30.

오늘은 static에 대해 공유합니다.

보시다가 부족한부분이나 잘못된부분을 알려주시면 감사히듣고 수정하겠습니다 :)

 

Static 의 의미

  • 정적, 고정의 뜻으로 모든 객체가 공유한다는 의미입니다.
  • 공유변수 or 공유메소드 라고도 불립니다.
  • int a = 1 과 같이 미리 자료형을 고정하는 것도 static 의 개념입니다.
  • 객체와 묶이는 데이터가 아니라 클래스와 묶이는 데이터입니다.

static 사용의 장점

  • 변수 or 메소드를 공유하므로 변수 크기만큼 메모리를 아낄 수 도 있습니다.
  • 미리 메모리에 올라가 있으므로 인스턴스(객체) 생성 없이 바로 사용 가능하며 속도도 빠릅니다.

static 사용의 단점

  • Garbage Collector의 관리 영역 밖에 존재하므로 자주 사용하면 프로그램의 종료 시까지 메모리가 할당된 채로 존재하므로 시스템의 퍼포먼스에 악영향을 주게 됩니다.

static 사용시 유의사항

  • static은 인스턴스가 생성되길 기다려주지 않고 미리 메모리에 올라가 고정시키기 때문에 static 메서드 내부에 일반 멤버변수나 메서드를 사용할 수 없습니다. (static은 static만 가능)
  • 모두가 접근할 수 있는 공유자원 이기 때문에 this라는 내것이라는 개념이 존재하지 않습니다.

static이 실행되는 시점

  • static은 클래스가 메모리상에 올라갈 때, 즉 우리가 프로그램을 실행하면 필요한 클래스가 메모리상에 로딩되는 과정을 거치게 된다. static은 바로 이 시점에 동작한다. 클래스가 메모리상에 올라가자마자 실행되면서 필요한 처리를 하게 된다. 따라서 static은 객체의 생성과는 관계없이 클래스가 로딩되는 시점에 단 한 번만 실행하고 싶은 처리를 하기 위해 사용한다.

어떤 경우에 static 을 사용할까?

  • 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통적으로 사용해야 하는 것
  • 객체가 데이터를 보관할 필요가 없다면 static 메소드로 만들어도 된다.
  • 자주 변하지 않는 일정한 값이나 설정 정보 같은 공용자원에 대한 접근

static 의 메모리

댓글