728x90
반응형
SMALL
해당 게시물을 이용한 2차 창작은 댓글 부탁드립니다.
🟰객체 지향프로그래밍을 하면서 지켜야 하는 5대 원칙중 하나 단일책임의 원칙부터 알아보자
❗다음 원칙도 모두 포스팅 되어 있으니 천천히 읽어보세요
☀️단일 책임의 원칙(Single Responsibility Principle)
하나의 모듈이 하나의 책임을 가져야한다.
다른 말로 모듈을 변경할 때에는 오직 한가지 목적을 위해 변경해야 한다는 것이다.
어떤 클래스가 하나의 책임 만을 갖고 있다면, 특정 행위자들로부터 변경을 확실한 목표를 갖고 수행할 수 있다.
⏬예시 코드package solid; public class SingleResponsibilityPrinciple { private final String cook = "살아있는 가재"; private final String chef = "주방장"; private final String alba = "주방알바생"; private String orderedMenu; public String Cook(String cook, String orderedMenu) { this.orderedMenu = orderedMenu; System.out.println("chef가 요리합니다."); System.out.println("alba가 요리에 필요한 식재료를 준비하고 조리합니다."); return "완성된"+orderedMenu; } }
쉽게 알려주기 위해 간단한 주방요리를 하는 주방을 예시로 들었다.
위 클래스는 주방장과 알바생이 메뉴가 들어오면 요리를 해서 완성된 메뉴를 반환하는 클래스다.
📌액터
주방장, 주방알바생
☀️해당 클래스에서 주방장과 주방알바생이 요리 방식을 변경하려고 한다.
☀️만약 요리중 문제가 생기면 누구에게 책임이 있을까?
☀️서로에게 책임을 전가하며 책임이 모호해질 수 있다.
☀️이러한 책임을 확실히 하기 위해 클래스를 분리해서 각자의 역할을 수행할 수 있도록 한다.
⏬해결 코드
public class AlbaCooking { private final String cook = "살아있는 가재"; private final ChefCooking chef = new ChefCooking(); private final String alba = "주방알바생"; private String orderedMenu; public String Cook(String cook) { System.out.println(alba+"가"+cook+"를 손질합니다."); return "손질한"+cook; } public class ChefCooking { private final String cook = "살아있는 가재"; private final String chef = "주방장"; private final AlbaCooking alba= new AlbaCooking(); private String orderedMenu; public String Cook(AlbaCooking alba , String orderedMenu) { alba.Cook(cook); this.orderedMenu = orderedMenu; System.out.println("chef가 손질한 "+cook+"를 요리합니다."); return "완성된"+orderedMenu; } }
📌두 액터의 기능을 분리하여 클래스를 만들었다.
📌각각의 액터는 각자의 클래스에서 본인의 역할을 수행하고 책임의 소재가 확실해졌다.
☀️위와 같은 상황이 단일 책임의 원칙이 잘 지켜졌다고 할 수 있겠다.
☀️이러한 단일 책임의 원칙은 시스템이 거대해질 수록 빛을 발한다.
☀️서로 영향을 최소화 하며 각 기능을 분리하여 어떤 곳이 잘못되거나 변경할 곳이 생기면 다른 기능은 변경할 필요없이 해당 문제점의 모듈로 찾아가 기능을 수정하면 되기 떄문이다.
728x90
반응형
SMALL
'JAVA-기초 > JAVA기본' 카테고리의 다른 글
자바(java) - Optional이란? (2) | 2023.12.06 |
---|---|
[Java] 객체지향개념(OOP) 캡슐화와 정보은닉 (3) | 2023.09.03 |
자바(Java) - 쓰레드란? start와 run의차이 (0) | 2023.04.03 |
자바(Java) 참조변수의 형변환(업캐스팅/다운캐스팅) (0) | 2023.02.09 |
자바(Java) 다형성(조상클래스,자손클래스) (0) | 2023.02.09 |