객체지향 프로그래밍 5가지 설계 원칙, SOLID- 단일책임의 원칙

2023. 8. 12. 13:38·JAVA-기초/JAVA기본
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
'JAVA-기초/JAVA기본' 카테고리의 다른 글
  • 자바(java) - Optional이란?
  • [Java] 객체지향개념(OOP) 캡슐화와 정보은닉
  • 자바(Java) - 쓰레드란? start와 run의차이
  • 자바(Java) 참조변수의 형변환(업캐스팅/다운캐스팅)
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (325) N
      • 면접 준비 (22) N
        • OS (6)
        • Spring Security (0)
        • Java (3)
        • DB (11) N
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      CSS
      자바기초
      redis
      스프링프레임워크
      리눅스
      백준
      redis 채팅
      리눅스마스터2급
      spring redis
      JSP
      jsp request
      자바
      자바 면접질문
      JavaScript
      자바스크립트
      자바 알고리즘
      프로그래머스
      jsp기초
      JS
      자바 반복문
      레디스
      java
      Spring
      springsecurity
      Springframework
      Til
      Spring Data Redis
      리눅스마스터2급정리
      HTML
      자바 면접
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    객체지향 프로그래밍 5가지 설계 원칙, SOLID- 단일책임의 원칙
    상단으로

    티스토리툴바