프로그램 작성시 인스턴스를 하나만 가져야 되는 경우가 있는데, 예를 들면 학교의 경우 학생은 많아야 되고 학교는 하나만 있어야 하는 경우가 있는데 이럴 경우 singleton pattern 을 쓴다.
- 생성자는 private
- static으로 유일한 객체 생성
- 외부에서 유일한 객체를 참조할 수 있는 public static get() 메서드 구현 (일반 메서드는 인스턴스를 통해서 호출해야 되는데 다른데서 호출할 수 없게 private static으로 인스턴스를 하나 만들어둔 것이므로 외부에서 호출하게 하기 위해서 public static으로 getter를 만들 때 선언을 해줘야 한다. 그 이유는 static 메소드는 클래스 메소드라고 불리는 만큼 인스턴스가 생기지 않아도 쓸 수 있으므로 static 메소드로 만들어야 한다.)
public class Company {
//singleton pattern
private static Company instance = new Company();
private Company() {}
public static Company getInstance() {
if (instance == null){
instance = new Company();
}
return instance;
}
}
위와 같이 getter를 만들 때 static함수로 만들어줘야 한다.
public class CompanyTest {
public static void main(String[] args) {
Company company1 = Company.getInstance();
Company company2 = Company.getInstance();
System.out.println("company1 = " + company1);
System.out.println("company2 = " + company2);
}
}
<출력>
company1 = staticex.Company@1554909b
company2 = staticex.Company@1554909b
이런식으로 코드를 짜줬을 때 출력값을 보면 주소값이 같은 것으로 보아 singleton pattern 임을 확인할 수 있다.
자바 객체지향 프로그래밍 - 11 [다형성] (0) | 2023.01.10 |
---|---|
자바 객체지향 프로그래밍 - 10 [매서드 오버라이딩] (0) | 2023.01.10 |
자바 객체지향 프로그래밍 - 8 [static] (0) | 2022.12.23 |
자바 객체지향 프로그래밍 - 7 [this] (0) | 2022.12.23 |
자바 객체지향 프로그래밍 - 6 [정보 은닉] (0) | 2022.12.17 |