Static
- 실행하자마자 메모리에 고정적으로 할당되어 종료될 때 해제되는 변수나 메서드
- Static 변수 = 클래스 변수
- Static 메서드 = 클래스 메서드
- 클래스 변수는 인스턴스를 생성하지 않고 사용할 수 있음
- 프로그램이 실행될 때, 즉, 클래스가 메모리에 올라갈 때 자동적으로 생성되기 때문임
- 그래서 호출이 되면 찾는 과정이 없기 때문에 호출 시간이 빠름
- 모든 인스턴스가 공통적으로 사용해야 하는 멤버 변수에 붙임
- 인스턴스는 각각 독립적이기 때문에 서로 다른 값을 유지함
- 프로그램 실행 시 생성되고, 종료 시 없어지기 때문에 GC(Garbage Collectior)의 관리를 받지 않음
- 하지만 종료까지 메모리가 할당된 채로 존재하기 때문에 자주 사용하게 되면 성능에 영향을 줌
- 클래스 메서드에서는 non static 변수, 즉, 인스턴스 변수를 사용할 수 없음
- 호출 시점에 사용하는 인스턴스의 생성 여부를 알 수 없기 때문임
- 메서드 내에서 인스턴스 변수를 사용하지 않는다면 메서드에 static 붙이는 것을 고려
▽ 예제 코드 1 ▽
public class Temp {
public int a; // instance member field
public static int b; // class member field, 전역 변수
// static 변수는 instance 내부에 생성되지 않음
// new 선언할 때 생성되지 않고, 프로그램이 실행될 때 생성됨
// Heap 메모리가 아닌 data 메모리에 생성됨
}
▽ 예제 코드 2▽
// static 변수는 인스턴스를 생성하지 않아도 바로 사용 가능
// 인스턴스들 간의 공유 변수
Temp.b = 50;
Temp t1 = new Temp();
Temp t2 = new Temp();
Temp t3 = new Temp();
System.out.println(t1.b);
System.out.println(t2.b);
t1.b = 30;
System.out.println(t3.b);
'자바 - Java > 이론' 카테고리의 다른 글
[Java] Java Programming - 네트워크 프로그래밍, Server, Client, 프로토콜, Socket, Server Socket, Stream (0) | 2020.04.02 |
---|---|
[Java] Java Programming - 상속, 다형성, 추상화, Overriding, Implements (0) | 2020.04.02 |
[Java] Java Programming - 생성자(Constructor) (0) | 2020.04.02 |
[Java] Java Programming - 정보 은닉, 멤버 변수, 지역 변수 (0) | 2020.04.02 |
[Java] Java Programming - 객체 지향, 클래스 (0) | 2020.04.02 |