반응형
SMALL
[1] 싱글톤 패턴
(1) 싱글톤 패턴 정의
- 프로그램에서 인스턴스가 1개만 생성되어야 할때 사용하는 디자인 패턴
- static 변수와 메서드를 활용한다
[2] 싱글톤 패턴 구현하기
(1) 생성자와 인스턴스를 private로 생성한다
package 패키지;
public class Company {
// 유일한 인스턴스
private static Company instance = new Company();
//생성자
private Company() {}
//가져오는 인스턴스는 유일한 인스턴스로만 출력한다
public static Company getInstance() {
if(instance == null) {
instance = new Company();
}
return instance;
}
}
(2) 인스턴스 출력
- 인스턴스의 값이 없었기 때문에 company1로 인스턴스가 설정되었고
- 이미 인스턴스가 있어서 company2는 인스턴스1로만 출력되었다
public class CompanyService {
public static void main(String[] args) {
//인스턴스1
Company company1 = Company.getInstance();
//인스턴스2
Company company2 = Company.getInstance();
System.out.println(company1);
System.out.println(company2);
}
}
[3] 싱글톤 패턴 + static 활용
- 자동차 클래스
- 시리얼넘버 (static)
- 자동차 고유넘버
package 패키지;
public class Car {
// 자동차가 생성될때마다 , 공통 변수
private static int seiealNum = 10000;
private int carNum;
// 자동차 생성될때마다 증가
public Car () {
seiealNum++;
carNum = seiealNum;
}
public int getCarNum() {
return carNum;
}
public void setCarNum(int carNum) {
this.carNum = carNum;
}
}
- 자동차공장 클래스
- 자동차 공장은 유일한 인스턴스
- 자동차공장 이름 가져올때 유일하게 적용되도록 하는 함수
- 자동차 공장에서 자동차가 생성될때마다 자동차 인스턴스가 생긴다는 함수
package 패키지;
public class CarFactory {
//유일한 인스턴스
private static CarFactory instance = new CarFactory();
private CarFactory( ) {}
public static CarFactory getInstance() {
if(instance == null) {
instance = new CarFactory();
}
return instance;
}
public Car createCar() {
Car car = new Car();
return car;
}
}
- 서비스 패키지
- 자동차 공장의 이름 factory로 넣기
- 자동차 공장에서 소나타1이 생성되었다
- 자동차 공장에서 소나타2가 생성되었다
- 소나타1과 소나타2의 고유번호를 출력하라
package 패키지;
public class Service {
public static void main(String[] args) {
//자동차 공장의 이름 가져오기
CarFactory factory = CarFactory.getInstance();
// 자동차 공장에서 소나타1 생성 + 고유번호 추가
Car 소나타1 = factory.createCar();
//자동차 공장에서 소나타2 생성 +고유번호 추가
Car 소나타2 = factory.createCar();
System.out.println(소나타1.getCarNum()); // 10001출력
System.out.println(소나타2.getCarNum()); // 100022출력
}
}
반응형
LIST
'🌈 백엔드 > 객체 지향' 카테고리의 다른 글
JAVA_객체지향_상속 & super (0) | 2023.06.18 |
---|---|
JAVA_객체지향_디자인 > 템플릿 메서드 패턴 (0) | 2023.06.03 |
JAVA_객체지향_this (0) | 2023.06.03 |
JAVA_객체지향_접근제어 지시자 & 캡슐화 (0) | 2023.06.03 |
JAVA_객체지향_생성자 (0) | 2023.06.03 |