2022-11-29 @이영훈
Single Responsibility Principal, 단일 책임 원칙
객체 지향 프로그래밍(OOP)에서 단일 책임원칙이란 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다.
LED 스탠드 예시
스탠드는 독서 모드와 공부 모드에 따라 색온도를 변경할 수 있고,
빛의 세기를 조절할 수 있습니다
class LEDStand {
private int lux;
private int kelvin;
public LEDStand(int lux, int kelvin) {
this.lux = lux;
this.kelvin = kelvin;
}
// 독서 모드
void turnOnReadingMode() {
kelvin = 5000;
lux = 1500;
}
// 공부 모드
void turnOnStudyMode() {
kelvin = 6000;
lux = 1500;
}
// 빛 세기 up
void lightUp() {
if (lux <= 1900) {
lux += 100;
}
}
// 빛 세기 down
void lightDown() {
if (lux >= 600) {
lux -= 100;
}
}
}
Java
복사
만약 스탠드에 현재 상태를 로깅하는 기능을 추가하거나 스탠드의 책임 이외의 기능을 포함하면 SRP 위반입니다.
LED 스탠드에 현재 상태를 로깅하는 기능 추가
만약 스탠드의 현재 상태를 로깅하는 기능을 추가하고 싶으면 다음과 같이 구현하면 SRP 원칙을 위반하지 않고 구현할 수 있습니다.
로깅의 기능은 로거가 책임지고, 스탠드는 getter를 구현하여 현재 상태를 가지고 올 수 있게 해줍니다.
그리고 로거에서 스탠드의 정보 값을 가지고 와서 스탠드의 현재 상태를 로깅합니다.
// LEDStand.java
class LEDStand {
private int lux;
private int kelvin;
public LEDStand(int lux, int kelvin) {
this.lux = lux;
this.kelvin = kelvin;
}
// 독서 모드
void turnOnReadingMode() {
kelvin = 5000;
lux = 1500;
}
// 공부 모드
void turnOnStudyMode() {
kelvin = 6000;
lux = 1500;
}
// 빛 세기 up
void lightUp() {
if (lux <= 1900) {
lux += 100;
}
}
// 빛 세기 down
void lightDown() {
if (lux >= 600) {
lux -= 100;
}
}
public int getLux() {
return lux;
}
public int getKelvin() {
return kelvin;
}
}
// Application.java
Logger logger = LoggerFactory.getLogger(Application.class);
LEDStand stand = new LEDStand();
logger.info("LED Stand lux: " + stand.getLux() + " kelvin: " + stand.getKelvin());
Java
복사