스프링 핵심 원리 - 객체 지향 설계와 스프링

hyuk·2023년 10월 14일
1
post-thumbnail

📌 스프링이란?

스프링은 특정 하나의 기술이 아닌 여러가지 기술들의 모음으로 그 중 핵심이 되는 기술은 Spring FrameworkSpring Boot가 있다.

Spring Framework
• 핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트 ‧ ‧ ‧
• 웹 기술 : 스프링 MVC, 스프링 WebFlux
• 데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원

Spring Boot
: Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 되며, 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성할 수 있음.

이 외에도 Spring Data, Spring Cloud, Spring Session ‧ ‧ ‧ 등 스프링에 관련된 많은 프로젝트가 존재한다.

이러한 기술들을 편리하게 사용하도록 도와주는 것이 바로 Spring Boot !


📌 스프링 기술을 왜 사용하는가?

스프링은 자바 언어 기반의 프레임워크로, 자바와 같은 객체 지향 언어가 가진 특징을 살려내는 점이 있다.

다시 말해, 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있도록 환경을 만들어주는 프레임워크이다.

좋은 객체 지향 프로그래밍이란?

그렇다면 좋은 객체 지향 프로그래밍이라는 것은 무엇을 의미하는 걸까?

  1. 확장이 가능하도록 인터페이스를 안정적으로 설계
  2. 클라이언트에 영향을 주지 않는 내에서, 서버의 구현 기능을 유연하고, 변경에 용이하도록 설계

즉, 인터페이스와 구현 객체를 명확하게 분리하여, 변경에 용이하도록 설계하는 것이 좋은 객체 지향 프로그래밍이라 할 수 있다.


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

🖐️ SRP (Single responsibility principle) 단일 책임 원칙

: 하나의 클래스는 하나의 책임만을 가져야 하며, 하나의 책임의 기준은 변경이다. 변경으로 인한 파급효과이 적다면 단일 책임 원칙을 지켰음을 판단할 수 있다.

🖐️ OCP (Open closed principle) 개방-폐쇄 원칙

: 확장에는 열려 있으나, 변경에는 닫혀 있어야 한다. 이는 다형성을 활용하여 소프트웨어의 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에 열려 있고, 변경에 닫혀있어야 하는 원리다. 이는 구현 객체에 의존하는 것이 아닌 인터페이스에 의존하도록 적용해야 한다.

🖐️ LSP (Liskov subsitution principle) 리스코프 치환 원칙

: 서브타입은 언제나 기반 타입으로 교체할 수 있어야 하며, 하위클래스는 상위클래스가 약속한 규약들을 지켜야 한다. 또한, 다형성과 확장성을 극대화하기 위함으로 하위 클래스가 아닌 상위클래스(인터페이스)를 사용하는 것을 권한다.

🖐️ ISP (Interface segregation principle) 인터페이스 분리 원칙

: 하나의 특정 인터페이스보단 여러 개의 범용적으로 쓰일 수 있는 인터페이스가 나으며, 이로 인해 인터페이스가 명확해지며, 대체 가능성이 높아진다.

🖐️ DIP (Dependency inversion principle) 의존관계 역전 원칙

: 추상화에 의존하며, 구체화에 의존하면 안된다. 다시 말해, 하위 클래스가 아닌 인터페이스 등 상위클래스에 의존해야지만 유연하게 구현체를 변경할 수 있다는 의미이다. 의존성 주입은 이 원칙을 따르는 방법 중 하나다.

추후에 SOLID에 관하여 적용방법과 사례에 대해 구체적으로 학습할 예정이다.


객체 지향 설계와 스프링

객체 지향의 핵심은 다형성이라 할 수 있다. 그럼 객체 지향적인 설계와 스프링은 무슨 연관성이 있을까?

다형성으로만 위의 OCP, DIP을 지킬 수 없으며, 5가지 원칙을 지키며 개발을 하다보면 결국 스프링 프레임워크가 제공하는 DI 컨테이너를 만들게 될 것이다.

그렇기에 우리는 스프링을 사용하여 스프링이 지원하는 DI 컨테이너을 통하여 다형성과 OCP, DIP를 가능하게 할 수 있다.


📌 본 포스트는 스프링 핵심 원리 - 기본편 통해 학습한 내용을 요약 및 정리한 것입니다.

profile
차곡차곡쌓아가는학습노트

0개의 댓글