Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발새발

Static 본문

자바

Static

개발하는후추 2022. 11. 14. 12:29

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
Comments