본문 바로가기
개발/Springboot

[Spring 핵심 원리 기본편] 1. 객체 지향 설계와 스프링

by 윤J 2023. 7. 28.

spring world

- 스프링 프레임워크: 핵심 기술들, 웹 기술, 데이터 접근 기술 등등을 합해서 스프링 프레임워크라고 함

- 스프링 부트: 이걸 사용해서 스프링을 사용함, tomcat 내장해서 웹 서버 설치하지 않아도 괜춘!

- 스프링의 핵심: 객체 지향 언어인 java의 강력한 특징을 살려내는 프레임워크

 

객체 지향 프로그래밍의 특징

1) 캡슐화: 객체의 필도, 메소드를 하나로 묶고 실제 구현 내용을 감주는 것

2) 상속: 상위 객체는 자기가 가지고 있는 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용할 수 있도록 해줌

3) 다형성: 같은 타입이어도 여러 객체로 다르게 구현함으로써 다양한 기능 이용 가능 ex) 부모 클래스 또는 인터페이스의 타입 변환 허용

 

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

- 유연하고 변경이 용이, 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법

- '다형성' 이 핵심: 역할 - 구현 // 자동차가 바뀌어도 운전자의 역할이 안 바뀐다

- 역할 = 인터페이스, 상속 클래스 // 구현 = 클래스, 객체

- 객체의 협력

- java는 오버라이딩으로 다형성 실현

- 클라이언트를 변경하지 않고, 서버의 구형 기능을 유연하게 변경 가능

- 인터페이스를 안정적으로 잘 설계하는 것이 중요하다

- 스프링에서의 제어의 역전, 의존관계 주입은 다형성 활용해서 역할/구현 편리하게 다루도록 지원한다

- 다형성만으로는 OCP, DIP 를 지킬 수 없음

 

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

- SRP(단일 책임 원칙): 한 클래스는 하나의 책임만 가져야 함. 변경이 있을 때 파급 효과가 적으면 good.

- OCP(개방-폐쇄 원칙): 확장(인터페이스 구현)에는 열려 있으나 변경(인터페이스, 역할)에는 닫혀 있어야 함. 다형성 이용, 스프링에서는 AppConfig가 의존관계를 FixDiscountPolicy 객체에서 RateDiscountPolicy 객체로 변경해서 코드에 주입하므로 클라이언트 코드는 변경 x

- LSP(리스코프 치환 원칙): 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 함.

ex) 자동차 인터페이스의 엑셀은 앞으로 가려는 기능! 뒤로 가게 구현하면 LSP 위반

- ISP(인터페이스 분리 원칙): 특정 클라이언트를 위한 인터페이스 여러개 >> 인터페이스 하나

- DIP(의존관계 역전 원칙): 추상화에 의존해야지 구체화에 의존하면 안됨. 구현 클래스가 아니라 역할(인터페이스)에 의존하라는 뜻

 

스프링 설계와 객체 지향 프로그래밍

- DI(의존관계), DI 컨테이너 제공

댓글