[Spring] 객체 지향 설계와 스프링
Updated:
👩🏻💻 Spring과 객체 지향 설계의 관계를 이해해봅니다.
스프링 생태계
스프링이란 단어는 문맥에 따라 다르게 쓰이지만 최근 스프링이라고 하면 스프링 프레임워크와 스프링부트 등을 모두 포함한 스프링 생태계 자체라고 볼 수 있다.
스프링 프레임워크와 스프링 부트
- 스프링 프레임워크 : 스프링 DI 컨테이너, 웹 기술, 데이터 접근 기술 등등을 통합한 것
- 스프링 부트 : 스프링을 편리하게 사용할 수 있도록 지원하는 기술
스프링 부트의 장점
- Tomcat과 같은 웹 서버를 내장하고 있어 별도 웹 서버 설치 없이 스프링 애플리케이션을 쉽게 생성
- 손쉬운 빌드 구성을 위한 starter 종속성 제공
- 스프링과 3rd parth(외부) 라이브러리 자동 구성
- 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능을 제공해 모니터링이 용이함
좋은 객체 지향 프로그래밍이란?
스프링의 핵심
스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크
좋은 객체 지향 프로그래밍이란?
- 객체 지향 프로그래밍의 정의
- 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용한다.
- 객체 지향의 특징인 추상화, 캡슐화, 상속, 다형성 가운데 유연하고 변경을 용이하게 만드는 방법 즉, 다형성이 핵심이다.
다형성으로 역할과 구현을 분리
자바 언어의 다형성을 활용하여 객체를 설계할 때 역할과 구현을 명확히 분리한다. 즉, 객체 설계 시 인터페이스를 먼저 만들고, 역할을 수행하는 구현 객체를 만든다.
다형성의 본질
- 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.
잘 설계된 인터페이스의 중요성
- 그런데 역할 자체가 변하면? 클라이언트, 서버 모두에 큰 변경이 발생한다.
- 따라서 인터페이스를 안정적으로 잘 설계하는 것이 중요하다.
정리
스프링은 객체 지향 애플리케이션을 유연하고 변경이 용이하게 개발할 수 있게 도와주는 프레임워크이다. 객체 설계 시 다형성을 활용해 역할과 구현을 명확히 구분하고, 인터페이스를 안정적으로 잘 설계하면 좋은 객체 지향 프로그래밍을 개발할 수 있다.