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