static

0

JAVA

목록 보기
4/5

static이란?

소스에서 static으로 한다는 의미는 모든 객체가 공유한다라는 의미!
어떤 변수에 static을 붙이게 되면 이 변수는 모든 객체가 다 같이 공유하는 변수가 된다.

규칙

  1. static이 붙은 메소드들은 객체들의 데이터와 관계없는 완벽하게 공통적인 로직을 정의할 때 사용.
  2. 따라서 static 메소드에서는 인스턴스 변수나 객체의 메소드를 사용할 수 없다.

특징

단 한번만 동작!

static이 실행되는 시점은 클래스가 메모리상에 올라갈 때.
따라서 static 은 객체의 생성과는 관계없이 클래스가 로딩되는 시점에 단 한 번만 실행하고 싶은 처리를 하기 위해서 사용한다.

원리(공유되는)

static이 붙은 변수는 객체의 레퍼런스를 이용해서 사용하는 일반적인 객체지향 프로그래밍과는 달리 클래스의 변수이기 때문에 그냥 클래스 ‘이름, 클래스’변수라는 방식으로 사용하게 된다.
(new해서 객체생성 불요)

  • 접근 방법: static 클래스 이름. 함수(메소드)

static은 객체마다 다른 데이터를 가지고 동작하는 것을 막고 완벽하게 동일하게 동작하는 것을 보장하기 위해서 사용하기 때문에 굳이 객체를 사용해야 하는 이유가 없으므로 바로 ‘클래스 이름. 변수’나 ‘클래스 이름. 메소드’를 사용할 수 있다.

static이 붙은 메소드를 보면 객체와 무관! 객체의 영향 받지 않는 메소드!

→ 실무에서 static을 이용할 것인지 아닌지를 판단하는 데 있어서 가장 중요한 것은 객체마다 데이터를 활용해야 하는 경우인가. 그렇지 않은가 이다.

  • 주의: 속도는 빠르지만, 회수되지 않기 때문에 주의! (static이라는 키워드는 붙은 변수는 가비지 컬렉션의 대상X. static을 클래스 변수라고 말하듯이 static이 붙은 변수는 클래스와 같은 영역에 생기고, 클래스와 동일하게 메모리에서 항상 상주하고 있어서 메모리 회수가 안된다. 실제로 시스템이 가동되면서 점점 느려진다)

참고) java의 메모리 구조(JVM)

1) Heap 영역(객체 영역)

객체의 영역이란 객체들이 만들어지고 살다가 죽는 영역이다. 이 영역에서 가장 중요한 존재는 다름 아닌 가비지 컬렉터.

2) Method Area(비객체 영역)

비객체 영역인 Method Area는 클래스가 메모리상에 올라가는 영역이다. 이 영역은 가비지 컬렉터의 영향을 받지 않고 메모리에 상주한다. 비객체 영역은 가비지 컬렉터의 영향으로부터 자유롭고, 메모리에 상주하게 되어 있는데 이런 상주의 의미를 ‘static'이라는 뜻으로 사용된다.

profile
정리하는게 공부가 될 지 모르겠지만, 정리를 하면 마음만큼은 편해

0개의 댓글