Spring(스프링)을 위한 사전 지식
- 스프링의 핵심
스프링은 자바 언어 기반의 프레임워크
객체 지향의 특징을 살린 프레임워크
객체지향은 메시지를 주고 받고 데이터를 처리할 수 있는 객체들의 모임으로 구성하는 것
객체지향 프로그래밍은 유연하고 변경이 용이
- 객체지향 특징
#추상화
공통적으로 가진 속성이나 기능을 추출하여 표현 한 것
#캡슐화
직접적으로 접근이 불가하며 제공하는 함수를 통해 사용할 수 있으며 캡슐처럼 내부를 보호하고 있는 특성
#상속
부모의 기능을 자식이 물려받아 재사용하거나 재구성하여 사용하는 특성
#다형성
역할과 구현으로 구분
ex) 자동차 역할 [역할] - K3, 아반떼, 테슬라 모델3 [구현]
클라이언트는 내부구조를 몰라도 되며, 구조가 변경되어도 영향을 받지 않음
자바에서는 역할(인터페이스), 구현(인터페이스를 구현한 클래스 혹은 객체)
인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경 할 수 있음
=> 즉 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있음
스프링에서 다형성을 극대화 하여 사용(제어의 역전[IoC], 의존주입[DI])
- 객체 지향 설계의 5가지 원칙(SOLID)
#SRP(단일 책임 원칙)
한 클래스는 하나의 책임만 가져야 함
=> 변경이 있을 때 파급효과가 작아야 함
#OCP(개방-폐쇄 원칙)
확장에는 열려 있어야 하며 변경에는 닫혀있어야함
다형성 활용
ex) 인터페이스를 구현한 클래스를 만들어 새로운 기능을 구현
구현 객체를 변경하려면 클라이언트 코드 변경해야함 => OCP원칙 위배
=> 연관 관계를 맺어주는 별도의 조립,설정자 필요
#LSP(리스코프 치환 원칙)
인터페이스 규약을 지키면서 하위 타입의 인스턴스로 변경이 가능해야 함
ex) 자동차 엑셀은 앞으로 가라는 기능이므로 뒤로 가면 LSP 위반
#ISP(인터페이스 분리 원칙)
특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 나음
인터페이스를 명확하게 정의
#DIP(의존관계 역전 원칙)
구현 클래스에 의존하지 말고 인터페이스 즉, 역할에 의존해야함