오늘 공부한 내용
- 베이직반 보충수업 / CRUD 작성 복습
- 코드카타 2문제
- 스프링 입문 영상 재시청
새로 알게된점
* SOLID (객체 지향 설계)
SOLID 원칙이란 로버트 마틴이 소개한 객체 지향 프로그래밍 및 설계의 5가지 기본 원칙을 말하며, 5가지의 원칙의 앞 글자를 따서 “SOLID”라고 부른다.
- SRP (Single Responsibility Principle) : 단일 책임 원칙
- OCP (Open/Closed Principle) : 개방/폐쇄 원칙
- LSP (Liskov Substitution Principle) : 리스코프 치환 원칙
- ISP (Interface Segregation Principle) : 인터페이스 분리 원칙
- DIP (Dependacny Inversion Principle) : 의존관계 역전 원칙
- 단일 책임 원칙
하나의 객체는 반드시 하나의 기능만을 수행하는 책임을 갖는다는 원칙이다.
이는 클래스를 변경하는 이유는 오직 하나뿐이어야 한다는 것과 같은 의미를 말한다.
객체가 담당하는 동작, 즉 책임이 많아질 수록 그 객체의 변경에 따른 영향도의 양과 범위가 매우 되는데
SRP를 코드에 적용하면, 책임 영역이 확실해져 한 책임의 변경에서 다른 책임의 변경의 연쇄작용에서 자유로워 지며
즉, 코드의 의존성과 결합도를 줄이게 된다.
단일 책임 원칙은 특정 객체의 책임 의존성 과중을 지양하기 위한 중요하고 기본적인 원칙입니다.
SRP를 위반한 코드
다음의 코드는 단일 책임 원칙을 위반하고 있다.
public class Animal {
private String animal;
public void setAnimal(String animal) {
this.animal = animal;
}
public void cry () {
if(animal == "Dog") { // 강아지
System.out.println("bark!");
}
else if(animal == "Cat") { // 고양이
System.out.println("meow..");
}
}
}
다음의 Animal 클래스에서는 동물의 울음소리를 출력하는 cry() 메서드를 구현하고 있다. cry() 메서드는 Animal의 값이 "Cat"이면 고양이 울음소리를, "Dog"면 강아지 울음 소리를 출력하는데 즉, 두 기능이 분리되어 있지 않고 하나의 메서드가 두 기능을 모두 가지고 있으므로 단일 책임 원칙을 위반하고 있다.
SRP를 적용한 코드
다음 코드에서는 단일 책임 원칙 위반 문제를 해결하기 위해 추상 클래스를 만들어 각각의 하위 클래스에서 메서드를 상속 받아 사용하고 있다.
abstract class Animal {
abstract void cry();
}
class Dog extends Animal {
@Override
void cry() {
System.out.println("bark!!!");
}
}
class Cat extends Animal {
@Override
void cry() {
System.out.println("Meow...");
}
}
위의 코드에서는 공통기능인 추상 메서드 cry()를 가진 추상 클래스 Animal을 만든 것이다.
그리고 각각의 Dog, Cat 클래스를 만들어 Animal을 상속 받아 각자의 클래스에 자신의 울음소리만을 구현한다.
즉, 하나의 클래스에 하나의 기능을 가지고 있게 되는것 이다.
⭕️ 정리! 단일 책임 원칙 (SRP)
작성된 클래스는 하나의 기능만을 가지며, 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는 데 집중되어 있어야 한다.
'개발자 일지 > TIL' 카테고리의 다른 글
스파르타 내일배움캠프 71일차 231214 (0) | 2023.12.15 |
---|---|
스파르타 내일배움캠프 70일차 231213 (0) | 2023.12.13 |
스파르타 내일배움캠프 65일차 231208 (0) | 2023.12.11 |
스파르타 내일배움캠프 64일차 231207 (0) | 2023.12.11 |
스파르타 내일배움캠프 63일차 231206 (0) | 2023.12.06 |