본문 바로가기

객체지향설계 5원칙(S.O.L.I.D)

(4)
I. 인터페이스 분리 원칙(Interface Segregation Principle) 인터페이스 분리 원칙이란? 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다 라는 원칙이다. 어떠한 인터페이스가 서로 다른 메서드를 사용하는 클라이언트가 사용한다면 좋은 설계가 아니다. 인터페이스의 변화에 따라 모든 클라이언트에 영향을 줄 수 있기 때문에 사용 기능에 따라 인터페이스를 분리하는 것이 내부 의존도를 낮출 수 있고, 구현 클래스가 관심있는 메소드에 대해서만 관심을 가질 수 있다. 인터페이스 분리 원칙이 지켜지지 않은 코드 public enum Duty { PERSONAL_FINANCE("개인 금융 업무"), ENTERPRISE_FINANCE("기업 금융 업무"), PB("Private Banking 업무"); private final String desc; Duty(String..
L.리스코프 치환 원칙(Liskov substitution principle) effective-java 를 읽다 `리스코프 치환 원칙`에 대한 내용이 나왔는데 내용이 잘 생각나지 않아 정리하려 한다. 리스코프 치환 원칙이란? 컴퓨터 프로그램에서 자료형 S가 자료형 T의 하위형이라면 필요한 프로그램의 속성(정확성, 수행하는 업무 등)의 변경 없이 자료형 T의 객체를 자료형 S의 객체로 교체(치환)할 수 있어야 한다는 원칙이다. 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. 상위 타입을 전달받는 메서드 구현 public class BirdUtil { private BirdUtil() { } public static void fly(Bird bird) { bird.fly(); } }상속 관계의 클래스(Bird
O. 개방-폐쇄 원칙(Open-Closed Principle) 개방-폐쇄원칙 이란? 개방 폐쇄 원칙은 확장에는 열려 있고, 수정에 대해서는 닫혀있어야 한다는 원칙이다. 다시 말하면 객체의 확장에는 열려 있고, 객체의 수정은 닫혀있다라고 말할 수 있다. 개방-폐쇄원칙이 지켜지지 않은 코드의 문제점 public class UserDao { private static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver"; private static final String DB_URL = "jdbc:mysql://localhost:13306/tobi?useSSL=false"; private static final String DB_USER = "root"; private static final String DB_PASS = "mast..
S. 단일 책임 원칙(Single Responsibility Principle) 단일 책임 원칙이란? 모든 클래스는 `하나의 책임`만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야 한다. (위키백과) 즉, 단일 책임 원칙은 클래스가 단 하나의 관심사에 집중해야 한다라는 것입니다. 단일 관심사에 집중하는 클래스는 유지보수하기 쉽고, 오류를 찾기가 용이합니다. 단일 책임 원칙을 지키지 않은 예시 //사용자 도메인은 사용자 정보를 저장, 변경의 책임이 있지만, 이메일의 유효성을 검사하거나 이메일을 전송하는 책임을 가질 필요는 없습니다. public class User { private static Pattern EMAIL = Pattern.compile("^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*..