좋은 객체 지향 설계의 5가지 원칙

건도리 ·2023년 5월 24일
0

Spring

목록 보기
5/12
post-thumbnail

개요

객체 지향 설계에는 5가지 중요한 원칙이 있습니다. 이를 SOLID 원칙이라고도 부릅니다.

1. SRP: 단일 책임 원칙(Single Responsibility Principle)

단일 책임 원칙은 하나의 클래스는 하나의 책임만 가져야한다는 원칙입니다. 책임의 범위와 정의는 경우에 따라 다르지만, 일반적으로 변경이 있을 때 파급 효과가 적은 경우에는 단일 책임 원칙을 잘 따르고 있다고 볼 수 있습니다.

2. OCP: 개방-폐쇄 원칙(Open Closed Principle)

개방-폐쇄 원칙은 "소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다"는 원칙입니다. 이는 다형성을 활용해서 구현될 수 있습니다. 즉, 인터페이스를 구현한 새로운 클래스를 만들어서 새로운 기능을 추가하면 확장이 가능하지만 기존 코드의 변경은 없습니다.

public class MemberService {
	private MemberRepository memberRepository = new MemoryMemberRepository();
}

public class MemberService {
	private MemberRepository memberRepository = new MemoryMemberRepository();
	private MemberRepository memberRepository = new JdbcRepository();
}

하지만 이 원칙에도 문제점이 존재합니다. 구현 객체를 변경하려면 클라이언트의 코드를 변경해야 하는데, 이는 원칙을 위배하는 것입니다. 따라서 객체를 생성하고 연관 관계를 맺어주는 별도의 조립, 설정자가 필요합니다.

3. LSP: 리스코프 치환 원칙(Liskov Substitution Principle)

리스코프 치환 원칙은 "하위 타입은 언제나 상위 타입으로 교체될 수 있어야 한다"는 원칙입니다. 즉, 어떤 클래스가 다른 클래스로부터 파생되었다면, 그 서브 클래스는 부모 클래스로도 간주될 수 있어야 합니다. 이 원칙을 지키지 않으면 예상치 못한 부작용이 발생할 수 있습니다.

4. ISP: 인터페이스 분리 원칙(Interface Segregation Principle) - 계속

분리하면, 인터페이스가 명확해지고 다른 인터페이스로 대체하기가 쉬워집니다. 예를 들어, 운전 인터페이스와 정비 인터페이스로 분리되어 있다면 각각에 맞는 운전자 클라이언트와 정비사 클라이언트로 분리될 수 있습니다. 이 원칙은 적절한 크기로 인터페이스를 쪼개는 것의 중요성을 강조합니다.

5. DIP: 의존관계 역전 원칙(Dependency Inversion Principle)

의존관계 역전 원칙은 "추상화에 의존해야지, 구체화에 의존하면 안된다"는 원칙입니다. 즉, 클라이언트 코드는 구현 클래스를 바라보는 대신 인터페이스를 바라봐야 합니다. 이 원칙은 "역할에 의존해야 한다"는 것과 같습니다. 특정 구현체가 누가 하든 간에 언제든지 쉽게 교체할 수 있는 시스템을 구축하는 것이 중요합니다.

profile
배움이 즐거워요 ! 함께 그 즐거움을 나눴으면 좋겠습니다 :)

0개의 댓글