본문 바로가기

프로그래밍/spring

[스프링 기본] 객체 지향 설계와 스프링

시작에 앞서 이 글은 인프런 김영한 님의 강의를 정리하며 쓴 글입니다.

웹 백엔드를 공부하시는 분이라면 꼭 김영한님의 강의를 들어보시길 추천합니다.

 

스프링이란?

스프링은 자바 언어 기반의 프레임워크로, 객체 지향 언어를 기반으로 하는 프레임워크입니다. 주요한 특징 중 하나는 객체 지향의 기본 원칙을 살려내며, 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크입니다.

 

 

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

좋은 객체 지향 프로그래밍은 다양한 특징 중에서도 유연하고 변경이 용이하다는 특징이 크게 강조됩니다. 이는 객체 지향의 핵심 개념 중 하나인 다형성으로 연결됩니다.

역할과 구현을 분리

역할 = 인터페이스

구현 = 인터페이스를 구현한 클래스, 구현 객체

객체 설계시 역할을 부여하고, 그 역할을 수행하는 구현 객체 만들기

인터페이스를 안정적으로 만드는게 중요!

 

 

다형성

다형성은 객체 지향의 중요한 특징 중 하나로, 예를 들어 자동차 운전 시 자동차의 기종을 바꿔도 운전자는 전혀 문제가 없다는 것을 나타냅니다. 이는 자동차가 특정 인터페이스를 따르기 때문에 가능한 것이며, 역할과 구현을 분리함으로써 가능합니다.

역할과 구현을 분리하고, 인터페이스를 통해 다양한 구현이 가능하도록 설계하는 것이 중요합니다.

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

1. SRP - 단일 책임 원칙

한 클래스는 하나의 책임만 가져야 합니다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것입니다.

2. OCP - 개방 폐쇄 원칙

요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 합니다. 다형성을 활용해야하며, 객체를 생성하고 연관관계를 맺어주는 별도의 조립, 설정자가 필요합니다.

3. LSP - 리스코프 치환 원칙

객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 합니다.

4. ISP - 인터페이스 분리 원칙

특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다. 분리하면 인터페이스 자체가 변해도 클라이언트에게 영향을 주지 않습니다.

5. DIP - 의존관계 역전 원칙

추상화에 의존하고 구체화에 의존하면 안됩니다. 구현 클래스 말고 인터페이스에 의존하는 것이 중요합니다.

 

 

객체 지향 설계와 스프링

스프링은 DI(의존관계 주입)라는 기술로 다형성과 OCP, DIP를 가능하게 지원합니다. DI는 의존관계를 주입하는 것으로, 객체를 생성하고 연결해주는 별도의 조립자가 필요합니다. 이를 통해 클라이언트 코드의 변경 없이 확장이 가능하게 됩니다. 따라서 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있도록 도와주는 강력한 프레임워크입니다.

 

우리는 차례로 코드를 짜보면서 이 다섯가지 원칙을 지키는 코드를 차례로 만들어 볼 것입니다.