개발
home
🪐

[SOLID] SRP(Single Responsibility Principle) 단일 책임 원칙

Created
2022/11/29
Tags
SOLID
SRP
2022-11-29 @이영훈

Single Responsibility Principal, 단일 책임 원칙

객체 지향 프로그래밍(OOP)에서 단일 책임원칙이란 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다.

LED 스탠드 예시

LED 스탠드는 불빛의 세기(lx, 럭스)와 색온도(K, 켈빈) 가지고 있습니다.
스탠드는 독서 모드와 공부 모드에 따라 색온도를 변경할 수 있고,
빛의 세기를 조절할 수 있습니다
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
복사

Reference