728x90
정적(Static)이란?
정적은 고정된이란 의미를 가지고 있다.
static 키워드를 사용하여 정적 변수와 정적 메소드를 만들 수 있는데 이 둘을 합쳐 정적 클래스 멤버라고 한다.
정적 변수와 정적 메소드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버다.
그렇기에 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때 클래스 별로 관리된다.
정적(Static) 클래스 멤버 생성
정적 클래스 멤버들은 Heap 영역이 아닌 Static 영역에 할당된다.
정적 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점을 가지지만 Garbage Collector의 관리 영역 밖에 존재하기에 정적 영역에 있는 멤버들은 프로그램의 종료시까지 메모리가 할당된 채로 존재하게 된다.
그렇기에 Static을 너무 남발하게 되면 만들고자 하는 시스템 성능에 악영향을 줄 수 있다.
해제하려면 null로 리퍼런스를 재선언해야 한다.
정적(Static) 클래스 멤버 선언
static int variable = 0;
public static void method() {}
싱글톤 패턴(Singleton Pattern)
클래스를 통해 생성할 수 있는 객체가 하나만 되도록 만드는 것이다.
class Singleton {
private static Singleton one;
private Singleton() {
}
public static Singleton getInstance() {
if(one==null) {
one = new Singleton();
}
return one;
}
}
public class Sample {
public static void main(String[] args) {
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton1 == singleton2); // true 출력
}
}
※ 정적 메소드는 클래스가 메모리에 올라갈 때 정적 메소드가 자동적으로 생성된다.
그러므로 정적 메소드는 인스턴스를 생성하지 않아도 호출을 할 수 있으며 유틸리티 함수를 만드는데 유용하게 사용된다.
또한 정적 메소드 안에서는 정적 변수만 접근이 가능하다.
728x90
'2022 하계방학 SW 집중교육' 카테고리의 다른 글
[Java] Scanner (0) | 2022.08.11 |
---|---|
[Java] Constructor (0) | 2022.08.11 |
[Java] Object-Oriented Programming (0) | 2022.08.09 |
[Java] Getter/Setter (0) | 2022.08.08 |
[Java] Access Modifier (0) | 2022.08.08 |