본문 바로가기
[inflearn] 스프링 핵심 원리 - 기본편/섹션 1 - 객체지향 설계와 스프링

4. 객체 지향 설계와 스프링

by 슬픈 야옹이 2023. 6. 29.

지난 포스트까지 좋은 객체 지향 프로그래밍에 대해서 정리했다.

 

좋은 객체 지향 프로그래밍은 유연한 변경이 가능하도록 프로그램을 설계하여 개발 생산성을 높이는 것이었다.

 

그러기 위해선 객체 지향의 다형성을 활용하고 좋은 객체 지향 설계의 5가지 원칙을 지킬 필요가 있었다.

 

하지만 객체 지향의 다형성만으로는 SOLID 중 OCP, DIP를 지킬 수 없었다.

 

이를 해결하기 위해 별도의 조치가 필요했고, 스프링을 통해 그러한 조치를 취하는 것이 가능하다.

 

이번 포스트는 별다른 내용은 없고, 객체 지향 설계와 스프링의 관계, 스프링이 객체 지향 설계를 지원하는 방법 등을 정리한다.

 

 

객체 지향 설계와 스프링

객체 지향 설계

객체 지향 설계에 대해 정리하자면, 먼저 모든 설계에 역할과 구현을 분리하자. 자동차의 예시를 생각하면 된다.

 

이상적으로는 모든 설계에 인터페이스를 부여하는 것이 좋지만, 사실 인터페이스 설계(추상화)가 장점만 있는 것은 아니다.

 

인터페이스를 설계하는 것고 비용이고, 하나의 인터페이스에 여러 개의 구현 클래스가 존재하므로 어떤 구현 클래스를 사용 중인지 찾아 보는 등의 비용도 추가로 발생한다.

추상화는 추상화를 통해 얻는 이득이 이러한 비용보다 클 경우에 선택해야 한다.

 

실제로 확장 가능성이 거의 없는 요소의 경우 처음에는 인터페이스 없이 클래스를 직접 사용하다가, 향후 필요할 때 리팩터링하여 인터페이스를 도입하는 등의 방식으로 설계하기도 한다.

 

 

스프링

스프링은 DI(Dependancy Injection)DI 컨테이너를 통해 다형성 구현과 SOLID 준수를 지원한다.

 

DI에 대해서는 지난 스프링 입문 강의 내용에서 나름의 정리한 내용이 있다.

https://debuggingworld.tistory.com/48

 

스프링 입문) 7. 회원 관리 예제 - 백엔드 개발(2)

(회원 서비스 개발 ~ 회원 서비스 테스트) 지난 포스트에 이어 회원 관리 서비스 예제를 개발한다. - 비즈니스 요구사항 정리 - 회원 도메인, 리포지토리 작성 - 리포지토리 테스트 케이스 작성 -

debuggingworld.tistory.com

 

자세한 내용은 직접 코드를 작성하면서 학습한다고 한다. 이후 그 내용을 별도로 정리할 생각이다.

중요한 관점은 스프링을 왜 사용하는가? 에 대한 것이다.

 

순수하게 자바로 객체 지향 설계 원칙을 따르다 보면, 자연스레 스프링 프레임워크와 비슷한 형태를 띠게 된다고 한다.

즉, "좋은 객체 지향 어플리케이션을 작성하도록 돕는 프레임워크" 라는 개념에 집중하여 스프링을 학습할 예정이다.