Example

[E-Java] 싱글톤 패턴 예시

송기동 2024. 2. 23. 17:43
728x90

싱글톤 패턴으로 회사 객체 구성하고 결과보기

package ch08;

public class Company {

	// 싱글톤 패턴으로 설계하는 방법
	// heap 메모리에 오직 객체가 하나만 존재해야 될 경우 사용 가능

	// 1. 생성자는 private 으로 선언 해야 한다.
	private Company() {
	}

	// 2. 클래스 내부에 유일한 private 인스턴스 객체를 생성
	private static Company instance = new Company(); // 선언과 동시에 초기화

	// 3. 외부에서 유일한 instance 변수에 접근할 수 있는 메서드를 제공해야 한다.
	public static Company getInstance() {
		if (instance == null) {
			instance = new Company();
		}
		return instance;
	}
} // end of class
package ch08;

public class CompanyMainTest {

	public static void main(String[] args) {
		// 1.
		// 생성자를 private 으로 선언 했기 때문에
		// 기본 생성자로 호출할 수 없다.
		// Company company = new Company(); -> X
		
		// 2.
		// Company.instance 접근 제어 지시자가 private 이다.
		
		// 3,
		// 외부에서 유일하게 Company 객체 주소값에 접근할 수 있는 메서드
		Company naver = Company.getInstance();
		Company tenco = Company.getInstance();
		System.out.println(naver);
		System.out.println(tenco);
		Company mata = Company.getInstance();
		System.out.println(mata);
	} // end of main

} // end of class
ch08.Company@7c30a502
ch08.Company@7c30a502
ch08.Company@7c30a502

게이트웨이 객체 구성하고 결과보기

package com.tencoding.starcraft;

/**
 * 
 * 1. 이름 짓는 방법 - 메서드는 무조건 소문자로 먼저 시작하세요 - 변수명은 무조건 소문자 단어간에 연결된 단어 --> 카멜기법 사용자
 * - 클래스와 생성자는 무조건 대문자 시작하기
 * 
 * 
 * -- 기능을 만드다는 것은 미리 머리속에 어떤 일을 할것이가를 명확히 하고 -- 코딩을 작성해야 한다.
 * 
 * 변수를 자세하게 구분지어 부른때 기준 -> 메모리 위치 기준으로 불러 보자 stack - 지역 변수 heap - 멤버 변수
 * static(데이터영역) - static 변수
 * 
 * 
 * 2단계 static 메모리안에 만들어지는 공간 -> 값이 들어간다 객체들간에 공유할 수 있다.
 * 
 * VS 객체안에 멤버 변수는 자기만에 값을 가진다.
 * 
 */

public class GateWay {

	private static int zealotCount = 0;

	private int myZealotCount = 0;

	// 질럿을 생산합니다.
	public Zealot createZealot() {
		zealotCount++;
		myZealotCount++;
		return new Zealot("질럿");
	}
	// 드라군을 생산합니다.
	// public Dragon createDragon() {
	// return new Dragon("드라군");
	// }

	// 전체 게이트웨이에서 생성된 질럿 수 보기 기능
	public static void showZelaotCount() {
		// 1. zealotCount <---
		System.out.println("전체 게이트 웨이가 생성한 질럿 카운트 " + zealotCount);
	}

	// 내가 직접 만든 질럿 수 보기 기능
	public void showMyZealotCount() {
		System.out.println("내가 직접 만든 질럿 수는 : " + myZealotCount);
	}

} // end of class
package com.tencoding.starcraft;

import java.io.ObjectInputStream.GetField;

public class GateWayMainTest {

	public static void main(String[] args) {

		GateWay gateWay1 = new GateWay();
		GateWay gateWay2 = new GateWay();

		gateWay1.createZealot();
		gateWay1.createZealot();
		gateWay1.createZealot();
		gateWay1.showMyZealotCount();
		System.out.println("-------------------");
		gateWay2.createZealot();
		gateWay2.createZealot();
		gateWay2.showMyZealotCount();
		System.out.println("-------------------");
		// 전체 수를 보고 싶다면 (static 변수를 활용할 수 있다 - 인스턴스(객체)끼리 공유하는 데이터)
		GateWay.showZelaotCount();

		// 연습 문제
		// 게이트웨이 2개 이상 생성
		// 각각 질럿을 뽑아주세요
		// 최종 게이트웨이간에 뽑아낸 질럿 마리 수를 화면에 출력
	} // end of main

} // end of class
내가 직접 만든 질럿 수는 : 3
-------------------
내가 직접 만든 질럿 수는 : 2
-------------------
전체 게이트 웨이가 생성한 질럿 카운트 5

728x90