โถ static ์์ฉ ใ ก ์ฑ๊ธํค ํจํด
โ
๋จ๊ณ 1. ์์ฑ์๋ฅผ private์ผ๋ก ๋ง๋ค๊ธฐ
package singleton;
public class Company {
private Company() {
}
}
-์ฑ๊ธํค ํจํด์์๋ ์์ฑ์๋ฅผ ๋ฐ๋์ ๋ช ์์ ์ผ๋ก ๋ง๋ค๊ณ ๊ทธ ์ ๊ทผ ์ ์ด์๋ฅผ private์ผ๋ก ์ง์ ํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ฉด ์์ฑ์๊ฐ ์์ผ๋ฏ๋ก ์ปดํ์ผ๋ฌ๊ฐ ๋ํดํธ ์์ฑ์๋ฅผ ๋ง๋ค์ง ์๊ณ , ์ ๊ทผ ์ ์ด์๊ฐ private์ด๋ฏ๋ก ์ธ๋ถ ํด๋์ค์์ ๋ง์๋๋ก Company ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๊ฒ ๋๋ค.
โ
โ
๋จ๊ณ 2. ํด๋์ค ๋ด๋ถ์ static์ผ๋ก ์ ์ผํ ์ธ์คํด์ค ์์ฑํ๊ธฐ
package singleton;
public class Company {
private static Company instance = new Company(); // ์ ์ผํ๊ฒ ์์ฑํ ์ธ์คํด์ค
private Company() {
}
}
-๋จ๊ณ 1์์ ์ธ๋ถ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋๋ก ๋ง๋ค์๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ ์ธ์คํด์ค ํ๋๋ ํ์ํ๋ค. ๋ฐ๋ผ์ Company ํด๋์ค ๋ด๋ถ์์ ํ๋์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค. ์ด ์ธ์คํด์ค๊ฐ ํ๋ก๊ทธ๋จ ์ ์ฒด์์ ์ฌ์ฉํ ์ ์ผํ ์ธ์คํด์ค๊ฐ ๋๋ค.
โ
โ
๋จ๊ณ 3. ์ธ๋ถ์์ ์ฐธ์กฐํ ์ ์๋ public ๋ฉ์๋ ๋ง๋ค๊ธฐ
package singleton;
public class Company {
private static Company instance = new Company(); // ์ ์ผํ๊ฒ ์์ฑํ ์ธ์คํด์ค
private Company() {
}
public static Company getInstance() { // ์ธ์คํด์ค ์ธ๋ถ์์ ์ฐธ์กฐํ ์ ์๋๋ก public get() ๋ฉ์๋ ๊ตฌํ
if (instance == null) {
instance = new Company();
}
return instance;
}
}
-์ด์ private์ผ๋ก ์ ์ธํ ์ ์ผํ ์ธ์คํด์ค๋ฅผ ์ธ๋ถ์์๋ ์ฌ์ฉํ ์ ์๋๋ก ์ค์ ํด์ผ ํ๋ค. ์ด๋ฅผ ์ํด public ๋ฉ์๋๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ผํ๊ฒ ์์ฑํ ์ธ์คํด์ค๋ฅผ ๋ฐํํด ์ค๋ค. ์ด ๋, ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ๋ฉ์๋๋ ๋ฐ๋์ static์ผ๋ก ์ ์ธํด์ผ ํ๋ค. ์๋ํ๋ฉด getInstance( ) ๋ฉ์๋๋ ์ธ์คํด์ค ์์ฑ๊ณผ ์๊ด์์ด ํธ์ถํ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
โ
โ
๋จ๊ณ 4. ์ค์ ๋ก ์ฌ์ฉํ๋ ์ฝ๋ ๋ง๋ค๊ธฐ
package singleton;
public class CompanyTest {
public static void main(String[] args) {
Company myCompany1 = Company.getInstance(); // ํด๋์ค ์ด๋ฆ์ผ๋ก getInstance() ํธ์ถํ์ฌ ์ฐธ์กฐ ๋ณ์์ ๋์
Company myCompany2 = Company.getInstance(); // ํด๋์ค ์ด๋ฆ์ผ๋ก getInstance() ํธ์ถํ์ฌ ์ฐธ์กฐ ๋ณ์์ ๋์
System.out.println(myCompany1 == myCompany2); // ๋ ๋ณ์๊ฐ ๊ฐ์ ์ฃผ์์ธ์ง ํ์ธ
}
}
-์ธ๋ถ ํด๋์ค์์๋ Company๋ฅผ ์์ฑํ ์ ์์ผ๋ฏ๋ก static์ผ๋ก ์ ๊ณต๋๋ getInstance( ) ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
Company.getInstance( );์ ๊ฐ์ด ํธ์ถํ๋ฉด ๋ฐํ ๊ฐ์ผ๋ก ์ ์ผํ ์ธ์คํด์ค๋ฅผ ๋ฐ์์จ๋ค.
โ
โ
<๊ฒฐ๊ณผ๊ฐ>
-myCompany1๊ณผ myCompany2๋ฅผ ๋น๊ตํด ๋ณด๋ฉด ๊ฐ์ ์ฐธ์กฐ ๊ฐ์ ๊ฐ์ง๋ ๋์ผํ ์ธ์คํด์ค์์ ์ ์ ์๋ค.
์ด ๋ฒ, ๋ฐฑ ๋ฒ์ ํธ์ถํด๋ ํญ์ ๊ฐ์ ์ฃผ์์ ์ธ์คํด์ค๊ฐ ๋ฐํ๋ ๊ฒ์ด๋ค.
๋, Company ํด๋์ค๋ ๋ด๋ถ์ ์์ฑ๋ ์ ์ผํ ์ธ์คํด์ค ์ธ์๋ ๋ ์ด์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค.
์ด์ ๊ฐ์ด static์ ์ฌ์ฉํ์ฌ ์ ์ผํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ฑ๊ธํค ํจํด์ ๊ตฌํํ ์ ์๋ค.
์ค์ต ) ์ฑ๊ธํค ํจํด์ผ๋ก ํด๋์ค ๊ตฌํ ์ฐ์ตํ๊ธฐ
์๋์ฐจ ๊ณต์ฅ์ด ์๋ค. ์๋์ฐจ ๊ณต์ฅ์ ์ ์ผํ ๊ฐ์ฒด์ด๊ณ , ์ด ๊ณต์ฅ์์ ์์ฐ๋๋ ์๋์ฐจ๋ ์ ์๋ ๋๋ง๋ค ๊ณ ์ ๋ฒํธ๊ฐ ๋ถ์ฌ๋๋ค. ์๋์ฐจ ๋ฒํธ๊ฐ 10001๋ถํฐ ์์๋์ด ์๋์ฐจ๊ฐ ์์ฑ๋ ๋๋ง๋ค 10002, 10003 ์ด๋ ๊ฒ ๋ฒํธ๊ฐ ๋ถ๋๋ก ์๋์ฐจ ๊ณต์ฅ ํด๋์ค, ์๋์ฐจ ํด๋์ค๋ฅผ ๋ง๋ค์ด ๋ณด์. ๋ ํด๋์ค๋ ๋ค์ CarFactoryTest.java ํ ์คํธ ์ฝ๋๊ฐ ์ํ๋ ์ ์๋๋ก ๊ตฌํํด ๋ณด์.
โ
โ
<๋ด๊ฐ ํ ๊ฒ>
package singleton;
public class CarFactory {
String createCar;
private static CarFactory instance = new CarFactory();
public String getCreateCar() {
return createCar;
}
public void setCreateCar(String createCar) {
this.createCar = createCar;
}
public static CarFactory getInstance() {
if (instance == null) {
instance = new CarFactory();
}
return instance;
}
public Car createCar() {
return new Car();
}
}
package singleton;
public class Car {
int carNum;
private static int serialNum = 10000;
public Car() {
serialNum++;
carNum = serialNum;
}
public int getCarNum() {
return carNum;
}
public void setCarNum(int carNum) {
this.carNum = carNum;
}
}
package singleton;
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());
System.out.println(yourSonata.getCarNum());
}
}
<๊ฒฐ๊ณผ๊ฐ>
โ<์ ์๋์ด ํ ๊ฒ>
package singleton;
public class CarFactory {
private static CarFactory instance;
private CarFactory() {
}
public static CarFactory getInstance() {
if (instance == null) {
instance = new CarFactory();
}
return instance;
}
public Car createCar() {
return new Car();;
}
}
package chapter6.singleton;
public class Car {
private static int serialNum = 10000;
int carNum;
public Car() {
serialNum++;
carNum = serialNum;
}
public int getCarNum() {
return carNum;
}
}
์ฐ์ต๋ฌธ์ Q5 ) ์์นจ ์ถ๊ทผ๊ธธ์ ๊น ์จ๋ 4000์์ ๋ด๊ณ ๋ณ๋ค๋ฐฉ์์ ์๋ฉ๋ฆฌ์นด๋ ธ๋ฅผ ์ฌ ๋ง์ จ๋ค. ์ด ์จ๋ ์ฝฉ๋ค๋ฐฉ์์ 4500์์ ๋ด๊ณ ๋ผ๋ผ๋ฅผ ์ฌ ๋ง์ จ๋ค.
'06-2 ๊ฐ์ฒด ๊ฐ ํ๋ ฅ' ์ ์ฐธ๊ณ ํ์ฌ ์ด ๊ณผ์ ์ ๊ฐ์ฒด ์งํฅ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํด๋ณด์.
โ
โ
<๋ด๊ฐ ํ ๊ฒ>
package singleton;
public class Person {
String personName;
int money;
public Person(String personName, int money) {
this.personName = personName;
this.money = money;
}
public Person() {
}
public void takeStar(Star star) {
star.take(4000);
this.money -= 4000;
}
public void takeKong(Kong kong) {
kong.take(4500);
this.money -= 4500;
}
public void showInfo() {
System.out.println(personName + "๋์ ์์ก์ " + money + "์ ์
๋๋ค.");
}
}
package singleton;
public class Star {
String personName;
int money;
public Star(String string) {
}
public void take(int money) {
this.money += money;
}
public void showInfo() {
System.out.println("์คํ1ํธ์ ์ ์์ก์ " + money + "์
๋๋ค.");
}
}
package singleton;
public class Kong {
String personName;
int money;
public Kong(String string) {
}
public void take(int money) {
this.money += money;
}
public void showInfo() {
System.out.println("์ฝฉ1ํธ์ ์ ์์ก์ " + money + "์
๋๋ค.");
}
}
package singleton;
public class CafeTest {
public static void main(String[] args) {
Person kim = new Person("๊น์จ", 10000);
Person lee = new Person("์ด์จ", 15000);
Star star1 = new Star("์คํ1ํธ์ ");
Kong kong1 = new Kong("์ฝฉ1ํธ์ ");
kim.takeStar(star1);
lee.takeKong(kong1);
kim.showInfo();
lee.showInfo();
star1.showInfo();
kong1.showInfo();
}
}
<๊ฒฐ๊ณผ๊ฐ>
<์ ์๋์ด ํ ๊ฒ>
package singleton;
public class Person {
String name;
int money;
public Person(String name, int money) {
this.name = name;
this.money = money;
}
public void takeStar(Star star, int money) {
star.take(money);
this.money -= money;
}
public void takeKong(Kong kong, int money) {
kong.take(money);
this.money -= money;
}
public void showInfo() {
System.out.println(name + "๋์ ๋จ์ ๋์ " + money + "์ ์
๋๋ค.");
}
}
package singleton;
public class Star {
String starNum;
int customerCnt;
int money;
public Star(String name) {
starNum = name;
}
public void take(int money) {
this.money += money;
customerCnt++;
}
public void showInfo() {
System.out.println(starNum + "์ ๋งค์ถ์ " + money + "์ ์
๋๋ค.");
}
}
package singleton;
public class Kong {
String kongNum;
int customerCnt;
int money;
public Kong(String name) {
kongNum = name;
}
public void take(int money) {
this.money += money;
customerCnt++;
}
public void showInfo() {
System.out.println(kongNum + "์ ๋งค์ถ์ " + money + "์ ์
๋๋ค.");
}
}
package singleton;
public class CafeTest {
public static void main(String[] args) {
Person kim = new Person("๊น์จ", 10000);
Person lee = new Person("์ด์จ", 15000);
Star star1 = new Star("์คํ1ํธ์ ");
Kong kong1 = new Kong("์ฝฉ1ํธ์ ");
kim.takeStar(star1, 4000);
lee.takeKong(kong1, 4500);
kim.showInfo();
lee.showInfo();
star1.showInfo();
kong1.showInfo();
}
}
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ฐฐ์ด (0) | 2021.02.19 |
---|---|
[Java] ์ฐ์ต๋ฌธ์ (0) | 2021.02.19 |
[Java] ๋ณ์ ์ ํจ ๋ฒ์ (0) | 2021.02.19 |
[Java] ํด๋์ค ๋ฉ์๋ (0) | 2021.02.18 |
[Java] Static ๋ณ์ (0) | 2021.02.18 |
๋๊ธ