일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- MAC address
- AWS
- docker
- kubectl
- EC2
- OS
- Packet
- PostgreSQL
- kubernetes
- log
- helm
- airflow
- JavaScript
- java
- Operating System
- Python
- tcp
- ip
- grafana
- Vision
- Trino
- aws s3
- CSV
- zookeeper
- jvm
- Spring
- Kafka
- CVAT
- Network
- kubeadm
Archives
- Today
- Total
JUST WRITE
Static 본문
Static
사전적으로 정적이라는 의미를 가지고 있다.
Java에서 static 키워드를 변수, Method, block에 사용할 수 있다.
이번 글에서 적용하는 방법과 이유에 대해 정리해보았다.
static 키워드를 사용하면 인스턴스 멤버가 아닌 Class에 고정된 멤버가 된다.
인스턴스 멤버가 적재되는 Heap Memory가 아닌 다른 JVM Memory 공간에 적재된다.
(Java 8 이상 Metaspace, 8 아래는 Permanent Generation(PermGen) 공간에 적재)
Static Field
public class Car {
private String name;
private String engine;
public static int numberOfCars; // Static Field
public Car(String name, String engine) {
this.name = name;
this.engine = engine;
numberOfCars++;
}
// getters and setters
}
Static Field를 사용할 경우는 아래 2가지로 정리할 수 있다.
- 인스턴스에 종속적인 field가 아닌 경우
- 모든 인스턴스에 공유되어야 할 field인 경우
Static Field는 Class 레벨에서 정의된다.
인스턴스의 생성 없이 Class명으로 바로 접근이 가능하다.
Static Method
// Static Method
public static void setNumberOfCars(int numberOfCars) {
Car.numberOfCars = numberOfCars;
}
Static Method를 사용할 경우는 아래 2가지로 정리할 수 있다.
- 인스턴스에 상관없이 Static Field나 다른 Static Method를 접근해야 될 경우
- 보통 utility나 helper Class에서 사용
특징
- Static Method는 Compile Time에 Memory에 올라가므로 Overriding이 불가능
- Abstract Class에서 Static Method를 정의 불가능
- Static Method에서 'this', 'super' 키워드를 사용 불가능
- Static Method에서 인스턴스 변수나 Method에 직접 접근 불가능
Static Block
public class StaticBlockDemo {
public static List<String> ranks = new LinkedList<>();
// Static Block
static {
ranks.add("Lieutenant");
ranks.add("Captain");
ranks.add("Major");
}
// Static Block
static {
ranks.add("Colonel");
ranks.add("General");
}
}
Static block은 Static Field를 초기화할 때 사용한다.
Static Field 초기화는 정의하면 가능하지만, 약간의 logic이 필요한 경우 Static Block를 활용한다.
Static Class
public class Singleton {
private Singleton() {}
// Static Class
private static class SingletonHolder {
public static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
Java에서는 Class 안에 Class 선언이 가능하다.
Class 안에 선언된 Class를 Inner Class라 하는데, Inner Class에 Static 키워드를 사용할 수 있다.
특징
- Group한 Class들을 한 곳에 모아 놓을 수 있어 캡슐화 증가
- Outer Class가 굳이 인스턴스 멤버에 접근 안해도 된다면 Static Class로 Static 멤버들을 Control
- 인스턴스를 굳이 생성 안함으로써 Heap Memory 사용 절감
[참고사이트]
728x90
반응형
'Programing > Java' 카테고리의 다른 글
Immutable Objects (0) | 2021.09.25 |
---|---|
Wrapper Class (0) | 2021.09.24 |
접근 제어자 (0) | 2021.08.26 |
OOP (0) | 2021.08.25 |
Java 특징 (0) | 2021.08.22 |
Comments