"어떤 클래스를 변경 해야 하는 이유는 오직 하나뿐 이어야 한다 - 로버트 C 마틴"
단일 책임 원칙 : SRP (Single Responsibility Principle)
SRP는 객체는 단 하나의 책임만 가져야 한다는 원칙을 의미한다.
여기서 '책임' 이라는 의미는 하나의 '기능 담당'으로 보면 된다.
즉,하나의 클래스는 하나의 기능만을 담당하여 하나의 책임을 수행하는데 집중되어 있어야 한다는 의미다.
하나의 클래스에 여러 기능(책임)을 넣는 설계와 클래스를 분리하여 기능(책임)을
분산시키는 설계는 프로그램의 유지보수와 밀접한 관련이 있다.
클래스를 따로 분리하지 않고 하나의 클래스에 여러 기능(책임)을 넣는 설계를 한다면
클래스 내부에서 서로 다른 기능을 수행하는 코드끼리 강하게 결합될 가능성이 높아진다.
즉, 한 클래스가 여러 책임을 가지게 된다면 요구사항이 변하게 될 때 마다
엄청난 코드의 변경이 이루어지게 될 것입니다.
이러한 문제가 발생되는 것 때문에 클래스 내부 기능을 변경하더라도 내부에 있는
다른 기능에 영향이 가지 않도록 독립적으로 변경되고,
확장할 수 있도록 하기 위해서 SPR 원칙을 따르는 것이다.
간단한 예시
public class Car {
private String brand;
private String color;
private int price;
public void accelerator(){}
public void break(){}
public void chargeFuel(){}
public void changeOil(){}
public void changeTire(){}
}
위의 Car 클래스에는 자동차들의 정보도 저장하면서
운전자가 가져야하는 역할인 엑셀밟기, 멈추기, 연료 보충과
정비사의 역할인 오일교체와 타이어 교체가 한 클래스안에 같이 있다.
이렇게 되면 "하나의 클래스는 하나의 책임만 진다"라는 SRP 원칙을 위배하게 됩니다.
따라서 현재 3가지의 책임을 가지고 있는 Car 클래스를 아래처럼 분리해야합니다.
public class Car{
private String brand;
private String color;
private int price;
}
class Driver{
void accelerator(){}
void break(){}
void chargeFuel(){}
}
class Mechanic{
void changeOil(){}
void changeTire(){}
}
이처럼 책임별로 클래스 분리를 한다면 코드의 복잡도를 줄이고 가독성과 유지보수성을
향상 시킬 수 있습니다.
'TIL' 카테고리의 다른 글
Request와 Response (0) | 2024.09.27 |
---|---|
Database - DBMS, SQL (1) | 2024.09.26 |
[TIL] 9월 19일 (2) | 2024.09.19 |
[TIL] 9월 13일 (1) | 2024.09.13 |
[TIL] 숫자 야구 게임 만들기 (2) | 2024.09.12 |