Static
정적(static)은 '고정된'이란 의미를 갖고 잇다.
클래스에 고정된 멤버로 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다.
필드와 메소드 선언 시 static 키워드를 추가적으로 붙이면 된다.
public class 클래스명{
//정적 필드
static 타입 필드 [=초기값];
//정적 메소드
static 리턴 타입 메소드( 매개변수선언, ...) {...}
}
클래스 로더가 클래스(바이트 코드)를 로딩해서 메소드 메모리 영역에 적재할 때 관리된다. 로딩 끝나면 바로 사용할 수 있음.
정적 필드를 사용하는 이유
1. 항상 값이 변하지 않는 변수인 경우 메모리 할당을 한번만 하여 메모리를 낭비하지 않기 위해
2. 공유하여 사용해야하는 변수인 경우 (보통 이 이유로 많이 사용한다)
정적블록
정적필드는 보통 초기값을 지정해주는데, 초기값 계산이 복잡하면 정적블록을 써서 그 안에 초기 값을 지정해줘도 된다.
public class 클래스명{
static String name;
static int cnt;
//정적블록
static{
name = "자바";
cnt = 5;
}
}
참고,
- 정적멤버는 클래스 객체를 생성하지 않고도 접근할 수 있다. 인스턴스 객체로도 접근이 가능하다.
(단 경고 표시 생김)
2. 정적메소드 및 블록 선언 시 주의사항
객체가 없어도 실행되기 때문에 정적 메소드 및 정적 블록 내부에 인스턴스 필드나 인스턴스 메소드를 사용할 수 없고, this키워드도 쓸 수 없다. (인스턴스 필드 및 메소드는 static이 붙지 않은 클래스 멤버를 말한다.)
싱글톤
전체 프로그램에서 단 하나의 객체만 생성되도록 하는 패턴을 싱글톤 패턴이라 한다.
싱글톤 패턴 예제
- 생성자를 private로 선언
- 자신을 타입으로 가진 정적필드에 자신의 객체를 생성하여 초기화한다.(private)
- 자신의 객체를 리턴해주는 정적메소드를 선언한다.
- getInstance()를 통해 해당 객체에 접근한다.
싱글톤 패턴은 객체를 단 한번만 선언해서 사용하게 된다. 자신을 타입으로 가진 정적필드에 자신의 객체를 생성 초기화하면서 private를 준다. 그리고 외부에서 객체를 생성할 수 없게 해야한다. 그래서 생성자도 private을 준다. 하지만 여기에 접근은 해서 값을 쓸 수 있어야 하기 때문에 getInstance()메소드를 만들어둔다.
class Singleton{
private static singleton = new Singleton(); // 싱글톤 객체를 생성, 하지만 접근 x
private Singleton(){ //생성자가 private니, 외부에서 new할 수 없다.
}
public static Singleton getInstance(){
return singleton; //싱글톤 패턴으로 만들어진 객체를 받아오기 가능
}
}
public class Main{
public static void main(String[] args){
Singleton st1 = Singleton.getInstance();
Singleton st2 = Singleton.getInstance();
System.out.println(st1 ==st2); //true
}
}
싱글톤은 객체 한 개만 생성해서 사용하는 개념이기 때문에 두 인스턴스가 결국 하나의 객체를 참조하게 된다. 결과값은 true
[참고] 자바기초] 클래스 -2 static 및 싱글톤|작성자 Su
'Java' 카테고리의 다른 글
예외 : 예외와 예외 클래스 (0) | 2021.03.25 |
---|---|
어노테이션(Annotation) (0) | 2021.03.11 |
상속 : 추상 클래스 (0) | 2021.03.07 |
상속 : 타입 변환과 다형성 (0) | 2021.03.07 |
상속 : Protected 접근 제한자 (0) | 2021.03.07 |
Uploaded by Notion2Tistory v1.1.0