1. 깃털이란?
- 봄은 Java 언어 기반 프레임워크
- 자바는 객체 지향 언어의 강력한 기능을 활용하는 프레임워크입니다.
- 좋은 객체 지향 애플리케이션 개발을 지원하는 프레임워크
- Spring은 다음과 같은 기술로 다형성 + OCP, DIP를 지원합니다. (OCP, DIP는 아래에서 설명)
- DI(Dependency Injection): 종속 관계, 종속성 관리자
- DI 탱크 제공
2. 좋은 객체지향 설계의 5가지 원칙(SOLID)
- SRP: 단일 책임 원칙
- OCP: 개방/폐쇄 원리
- LSP: Liskov 대체 원리
- ISP: 인터페이스 분리 원리
- DIP: 종속성 역전 원칙
(1) SRP: 개인 책임 원칙
- 클래스는 하나의 책임만 가져야 합니다.
- 중요한 기준은 변화이며, 변화가 일어났을 때 파급 효과가 작다면 개인 책임의 원칙을 잘 따르는 것입니다.
(2) OCP: 개방/폐쇄 원칙
- 소프트웨어 요소는 확장에는 열려 있어야 하지만 수정에는 닫혀 있어야 합니다.
- 다형성 사용
- 인터페이스를 구현하는 새 클래스를 만들어 새 기능을 구현합니다.
- 역할 분리 및 구현
!!️ 문제 발생

- MemberService 고객이 직접 구현 클래스를 선택할 수 있습니다.
- MemberRepository m = new MemoryMemberRepository(); //기존 코드
- • MemberRepository m = new JdbcMemberRepository(); //코드 변경
- 구현 개체를 변경하려면 고객 코드를 변경해야 합니다 → 개체를 만들고 연결하려면 별도의 어셈블리와 세터가 필요합니다.
(삼) LSP: Liskov 대체 원리
- 프로그램의 개체는 프로그램의 정확성을 손상시키지 않고 하위 유형의 인스턴스로 대체될 수 있어야 합니다.
- 즉, 부모 개체와 이를 상속하는 자식 개체가 있는 경우 부모 개체가 호출될 때 자식 개체가 부모 개체를 완전히 대체할 수 있어야 합니다.
(4) ISP: 인터페이스 분리 원리
- 이는 클라이언트가 사용하지 않는 인터페이스에 의존하도록 강요해서는 안 된다는 것을 의미합니다.
- 클라이언트별로 차별화된 인터페이스를 만들고 클라이언트가 사용하지 않는 메서드를 구현하지 않도록 합니다.
(5) DIP: 종속성 역전 원칙
- 구체화가 아닌 추상화에 의존해야 합니다.
- 이는 클래스 구현이 아니라 인터페이스에 의존할 필요가 있음을 의미합니다.
- 클라이언트는 구현을 유연하게 변경하기 위해 인터페이스에 의존해야 합니다.