1. Getter 와 Setter

πŸš€  객체의 ν•„λ“œ(데이터)λ₯Ό μ™ΈλΆ€μ—μ„œ λ§ˆμŒλŒ€λ‘œ 읽고 λ³€κ²½ν•  경우 객체의 무결성이 깨질 수 μžˆλ‹€.

       ex. μžλ™μ°¨μ˜ 속λ ₯은 μŒμˆ˜κ°€ 될 수 μ—†λŠ”λ°, μ™ΈλΆ€μ—μ„œ 음수둜 λ³€κ²½ν•˜λ©΄ 객체의 무결성이 깨짐

πŸš€  μ΄λŸ¬ν•œ 문제점 λ•Œλ¬Έμ— OOPμ—μ„œλŠ” 직접적인 μ™ΈλΆ€μ—μ„œμ˜ ν•„λ“œ 접근을 막고 λŒ€μ‹  λ©”μ†Œλ“œλ₯Ό 톡해 ν•„λ“œμ— μ ‘κ·Όν•˜λŠ” 것을 μ„ ν˜Έν•¨

       βž‘️  λ©”μ†Œλ“œλŠ” 데이터λ₯Ό κ²€μ¦ν•΄μ„œ μœ νš¨ν•œ κ°’λ§Œ ν•„λ“œμ— μ €μž₯ν•  수 있기 λ•Œλ¬Έ

       βž‘️  μ΄λŸ¬ν•œ 역할을 ν•˜λŠ” λ©”μ†Œλ“œκ°€ Setter

πŸš€  ν•„λ“œκ°’μ΄ 객체 μ™ΈλΆ€μ—μ„œ μ‚¬μš©ν•˜κΈ°μ— λΆ€μ μ ˆν•œ 경우, λ©”μ†Œλ“œλ‘œ μ μ ˆν•œ κ°’μœΌλ‘œ λ³€ν™˜ν•΄μ„œ 리턴할 수 μžˆλ‹€.

       βž‘️  μ΄λŸ¬ν•œ 역할을 ν•˜λŠ” λ©”μ†Œλ“œκ°€ Getter


  
private νƒ€μž… fieldName;
// Getter
public νƒ€μž… getFieldName() {
return fieldName;
}
// Setter
public void setFieldName(νƒ€μž… fieldName) {
this.fieldName = fieldName;
}

 

  • field νƒ€μž…μ΄ boolean일 κ²½μš°μ—λŠ” GetterλŠ” get으둜 μ‹œμž‘ν•˜μ§€ μ•Šκ³  is둜 μ‹œμž‘ν•˜λŠ” 것이 κ΄€λ‘€

  
public class Car {
// ν•„λ“œ μ„ μ–Έ
private int speed;
private boolean stop;
// speed ν•„λ“œμ˜ Getter/Setter μ„ μ–Έ
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
if(speed < 0) {
this.speed = 0;
return;
} else {
this.speed = speed;
}
}
// stop ν•„λ“œμ˜ Getter/Setter μ„ μ–Έ
public boolean isStop() {
return stop;
}
public void setStop(boolean stop) {
this.stop = stop;
if(stop == true) this.speed = 0;
}
}

  
public class CarExample {
public static void main(String[] args) {
//객체 생성
Car myCar = new Car();
//잘λͺ»λœ 속도 λ³€κ²½
myCar.setSpeed(-50);
System.out.println("ν˜„μž¬ 속도: " + myCar.getSpeed());
//μ˜¬λ°”λ₯Έ 속도 λ³€κ²½
myCar.setSpeed(60);
System.out.println("ν˜„μž¬ 속도: " + myCar.getSpeed());
//멈좀
if(!myCar.isStop()) {
myCar.setStop(true);
}
System.out.println("ν˜„μž¬ 속도: " + myCar.getSpeed());
}
}

 

 


2.  싱글톀 νŒ¨ν„΄  Singleton

πŸš€  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ „μ²΄μ—μ„œ 단 ν•œ 개의 객체만 μƒμ„±ν•΄μ„œ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ 싱글톀 νŒ¨ν„΄μ„ 적용

πŸš€  핡심은 μƒμ„±μžλ₯Ό private μ ‘κ·Ό μ œν•œν•΄μ„œ μ™ΈλΆ€μ—μ„œ new μ—°μ‚°μžλ‘œ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  수 없도둝 λ§‰λŠ” 것

πŸš€  λŒ€μ‹  정적 λ©”μ†Œλ“œλ₯Ό 톡해 κ°„μ ‘μ μœΌλ‘œ 객체λ₯Ό 얻을 수 μžˆλ‹€.


  
public class 클래슀 {
// private μ ‘κ·Ό κΆŒν•œμ„ κ°–λŠ” 정적 ν•„λ“œ μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™”
private static 클래슀 singleton = new 클래슀();
// private μ ‘κ·Ό κΆŒν•œμ„ κ°–λŠ” μƒμ„±μž μ„ μ–Έ
private 클래슀() {}
// public μ ‘κ·Ό κΆŒν•œμ„ κ°–λŠ” 정적 λ©”μ†Œλ“œ μ„ μ–Έ
public static 클래슀 getInstance() {
return singleton;
}
}
  • μ™ΈλΆ€μ—μ„œ 객체λ₯Ό μ–»λŠ” μœ μΌν•œ 방법은 getInstance() λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 것.
  • getInstance() λ©”μ†Œλ“œκ°€ λ¦¬ν„΄ν•˜λŠ” κ°μ²΄λŠ” 정적 ν•„λ“œκ°€ μ°Έμ‘°ν•˜λŠ” 싱글톀 객체이닀.
  • λ”°λΌμ„œ μ•„λž˜ μ½”λ“œμ—μ„œ λ³€μˆ˜1κ³Ό λ³€μˆ˜2κ°€ μ°Έμ‘°ν•˜λŠ” κ°μ²΄λŠ” λ™μΌν•œ 객체가 λœλ‹€.

  
클래슀 λ³€μˆ˜1 = 클래슀.getInstance();
클래슀 λ³€μˆ˜2 = 클래슀.getInstance();


  
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {}
static Singleton getInstance() {
return singleton;
}
}

  
public class SingletonExample {
public static void main(String[] args) {
/*
Singleton obj1 = new Singleton(); //컴파일 μ—λŸ¬
Singleton obj2 = new Singleton(); //컴파일 μ—λŸ¬
*/
//정적 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•΄μ„œ 싱글톀 객체 μ–»μŒ
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
//λ™μΌν•œ 객체λ₯Ό μ°Έμ‘°ν•˜λŠ”μ§€ 확인
if(obj1 == obj2) {
System.out.println("같은 Singleton κ°μ²΄μž…λ‹ˆλ‹€.");
} else {
System.out.println("λ‹€λ₯Έ Singleton κ°μ²΄μž…λ‹ˆλ‹€.");
}
}
}

 

 

 

*  λ‚΄μš© μ°Έκ³  - μ±… '이것이 μžλ°”λ‹€'

+ Recent posts