개발새발
Static 본문
Static 이란?
정적(Static)은 고정된이란 의미를 가지고 있다.
static이라는 키워드를 사용하여 static변수와 static메소드를 만들 수 있는 데 다른 말로 정적필드와 정적메소드라고도 하며, 이 둘을 합쳐서 정적멤버(클래스 멤버)라고 한다.
정적필드와 정적메소드는 객체에 소속된 멤버다 아니라 클래스에 고정된 멤버이기에 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할때 클래스별로 관리된다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있다.
- static 키워드를 통해 생성된 정적멤버들은 Heap영역이 아닌 Static영역에 할당된다.
Static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점을 갖지만, GC의 관리 영역 밖에 존재하기 때문에 프로그램이 종료될 때까지 메모리에 값이 유지된 채로 존재하게 된다.
1. 인스턴스에 공통적으로 사용하애하는 것에 쓴다
- 인스턴스를 생성하면, 각 인스턴스들은 서로 다른 독립적인 메모리에 할당받기 때문에 서로 다른 값을 유지한다.
- 경우에 따라 인스턴스들이 공통적인 값이 유지되어야 하는 경우에는 static을 쓴다
2. static이 붙은 멤버변수는 인스턴스르 생성하지 않아도 사용할 수 있다
- static이 붙은 멤버변수는 클래스가 메모리에 올라갈 때 이미 자동적으로 생성되기 때문이다
3. static이 붙은 메소드에선 인스턴스 변수를 사용할 수 없다.
- static메소드는 인스턴스 생성 없이 호출 가능한 반면, 인스턴스 변수는 인스턴스를 생성해야만 존재하기 때문에 static이 붙은 메소드를 호출할 때 인스턴스가 생성되어 있을 수도 있기 때문에 static이 붙은 메소드에서 인스턴스 변수의 사용을 허용하지 않는다.
- 반대로, 인스턴스변수, 메소드에선 static이 붙은 멤버들을 사용하는것은 가능하다(인스턴스 변수가 존재한다는 것은 static 멤버들은 이미 메모리에 존재한다는 것을 의미)
4. 메소드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.
- 메소드 호출시간이 짧아지기 때문에 효율이 높아진다.
5. 클래스 설계시 static의 사용지침
- 클래스의 멤버변수중 모든 인스턴스에 공통된 값을 유지해야하는 것이 있는지 보고 있다면 static을 붙여준다.
- 작성한 메소드 중 인스턴스 변수를 사용하지 않는 메소드에 대해서 static을 붙일 것을 고려한다.
'자바' 카테고리의 다른 글
List, Set, Map (0) | 2022.11.03 |
---|---|
제네릭 (0) | 2022.10.31 |
OOP(Object Oriented Programming) (0) | 2022.10.24 |
재귀함수 #for문 (0) | 2022.08.04 |
#재귀 (0) | 2022.08.03 |