[Java] static 응용 - 싱글톤 패턴

2022. 9. 4. 21:02·🍞 BackEnd/Java

싱글톤 패턴

- 프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴

- static 변수, 메서드를 활용하여 구현할 수 있음

 

싱글톤 패턴으로 회사 객체 구현하기

- 클래스 내부에 유일한 private 인스턴스 생성

  유일한 객체 Company

private static Company instance = new Company();

 

- 생성자는 private으로 선언

  Company를 마음대로 new 할 수 없도록

private Company() {}

 

- 외부에서 유일한 인스턴스를 참조할 수 있는 public 메서드 제공

public static Company getInstance() {

	if(instance == null) { // 방어 코드
		instance = new Company();
	}
	return instance;
}

 

CompanyTest.java

//import java.util.Calendar;

public class CompanyTest {

	public static void main(String[] args) {
		// static일 경우 클래스 이름으로 가져와야 함
		Company company1 = Company.getInstance();
		Company company2 = Company.getInstance();

		System.out.println(company1);
		System.out.println(company2);

		//Calendar calendar = Calendar.getInstance();
	}
}

 

Singleton이라는 클래스 이름에 instance라는 private 멤버 변수가 하나 있고 Singletion이라는 생성자는 private이다.

getInstance는 public으로 제공 => getInstance 가져다 쓰면 됨

 

-는 private

+는 public 

 

 

 

 

 

 

실습

자동차 공장이 있습니다. 자동차 공장은 유일한 객체이고, 이 공장에서 생산되는 자동차는 제작될 때마다 고유의 번호가 부여됩니다. 자동차 번호가 10001부터 시작되어 자동차가 생산될 때마다 10002, 10003 이렇게 번호가 붙도록 자동차 공장 클래스, 자동차 클래스를 구현해보자! (CarFactoryTest.java 테스트 코드가 수행되도록)

 

CarFactoryTest.java

public class CarFactoryTest {

	public static void main(String[] args) {
		CarFactory factory = CarFactory.getInstance();
		Car mySonata = factory.createCar();
		Car yourSonata = factory.createCar();

		System.out.println(mySonata.getCarNum());     //10001 출력
		System.out.println(yourSonata.getCarNum());   //10002 출력
	}
}

 

CarFactory.java

public class CarFactory {
	// 클래스 내부에 유일한 private 인스턴스 생성
	private static CarFactory instance = new CarFactory();
	// 생성자는 private으로 선언 CarFactory를 마음대로 new 할 수 없도록
	private CarFactory() {}

	// 외부에서 유일한 인스턴스를 참조할 수 있는 public 메서드 제공
	public static CarFactory getInstance() {
		if(instance == null) { // 방어 코드
			instance = new CarFactory();
		}
		return instance;
	}

	public Car createCar() {
		Car car = new Car();
		return car;
	}
}

 

Car.java

public class Car {

	private static int serialNum = 10000;
	private int carNum;

	public Car() {
		serialNum++;
		carNum = serialNum;
	}

	public int getCarNum() {
		return carNum;
	}

	public void setCarNum(int carNum) {
		this.carNum = carNum;
	}
}

 

저작자표시 (새창열림)

'🍞 BackEnd > Java' 카테고리의 다른 글

[Java] 배열(array)의 응용  (0) 2022.09.04
[Java] 자료를 순차적으로 관리하는 방법 - 배열(array)  (0) 2022.09.04
[Java] 인스턴스에서 공통으로 사용하는 static 변수  (0) 2022.09.04
[Java] 참조 자료형 변수  (0) 2022.09.04
[Java] 접근 제어 지시자와 정보 은닉 & 캡슐화  (0) 2022.09.04
'🍞 BackEnd/Java' 카테고리의 다른 글
  • [Java] 배열(array)의 응용
  • [Java] 자료를 순차적으로 관리하는 방법 - 배열(array)
  • [Java] 인스턴스에서 공통으로 사용하는 static 변수
  • [Java] 참조 자료형 변수
박빵이
박빵이
2025년에도 갓생살기
  • 박빵이
    기억보다 기록
    박빵이
  • 전체
    오늘
    어제
    • 분류 전체보기 (337)
      • 🍞 FrontEnd (97)
        • HTML+CSS (4)
        • JavaScript (17)
        • TypeScript (4)
        • React (52)
        • Next.js (2)
        • Android (15)
      • 🍞 BackEnd (24)
        • Java (15)
        • Node.js (6)
        • Spring (1)
      • 🍞 Cloud & Infra (0)
        • AWS SAA (0)
        • Microsoft Azure (0)
      • 🍞 Algorithm (147)
        • C++ (4)
        • Baekjoon (41)
        • Programmers (97)
      • 🍞 Computer Science (18)
        • 운영체제 (1)
        • 데이터 통신 (6)
        • 네트워크 (6)
        • 데이터베이스 (1)
      • 🍞 대외활동 & 부트캠프 (42)
        • 삼성 청년 SW 아카데미 (1)
        • LG유플러스 유레카 (0)
        • 한국대학생IT경영학회 (1)
        • IT연합동아리 UMC (17)
        • 길벗 블로깅 멘토 (18)
        • IT연합동아리 피로그래밍 (3)
        • 개발 컨퍼런스 (2)
  • 블로그 메뉴

    • Admin
  • 링크

    • GitHub
  • 인기 글

  • 태그

    백준
    코딩자율학습
    길벗 블로깅 멘토링
    react
    길벗 블로깅 멘토
    level1
    유니온파인드
    위상정렬
    JavaScript
    umc
    안드로이드
    Java
    프로그래머스
    코틀린
    Front
    알고리즘
    level2
    C++
    Android
    map
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
박빵이
[Java] static 응용 - 싱글톤 패턴
상단으로

티스토리툴바