📁 ex01
☕ Setting.java
public class Setting {
private int volume = 5;
public int getVolume() {
return volume;
}
public void incVolume() { volume++; }
public void decVolume() { volume--; }
}
☕ Tab.java
public class Tab {
private Setting setting = new Setting();
public Setting getSetting() {
return setting;
}
}
☕ Main.java
Tab tab1 = new Tab();
Tab tab2 = new Tab();
Tab tab3 = new Tab();
System.out.println(tab1.getSetting().getVolume());
System.out.println("\\n- - - - -\\n");
tab1.getSetting().incVolume();
tab1.getSetting().incVolume();
System.out.println(tab1.getSetting().getVolume());
// ⚠️ 각 인스턴스는 서로 다른 Setting 인스턴스를 가짐
// - 설정값이 공유되지 못함
System.out.println(tab2.getSetting().getVolume());
System.out.println(tab3.getSetting().getVolume());
📁 ex02
☕ Setting.java
public class Setting {
private int volume = 5;
public int getVolume() {
return volume;
}
public void incVolume() { volume++; }
public void decVolume() { volume--; }
}
☕ Tab.java
public class Tab {
private Setting setting = null;
public Tab() {}
// ⭐️ 두 번째 생성자
public Tab(Setting setting) {
this.setting = setting;
}
// ⭐️ 세터
public void setSetting(Setting setting) {
this.setting = setting;
}
public Setting getSetting() {
return setting;
}
}
☕ Main.java
// 공유시킬 인스턴스
Setting setting = new Setting();
// 💡 방법 1 : 생성자로 주입
Tab tab1 = new Tab(setting);
Tab tab2 = new Tab(setting);
// 💡 방법 2 : setter로 주입
Tab tab3 = new Tab();
tab3.setSetting(setting);
System.out.println(tab1.getSetting().getVolume());
System.out.println(tab2.getSetting().getVolume());
System.out.println(tab3.getSetting().getVolume());
System.out.println("\\n- - - - -\\n");
tab1.getSetting().incVolume();
tab1.getSetting().incVolume();
System.out.println(tab1.getSetting().getVolume());
System.out.println(tab2.getSetting().getVolume());
System.out.println(tab3.getSetting().getVolume());
// 🤔 인스턴스를 공유할 수 있게 되었지만 번거로움이 남음
// - 해당 인스턴스를 외부에서 주입해주어야 함
// - 협업 등의 경우 잘못 사용될 여지가 있음
// - 더 편리하고 안전한 방법은 없을까?