
| Framework | Libary |
|---|---|
| 제어의 역전(IoC) 개념 적용 | 개발자가 전체적인 사용 흐름을 만듬 |
| 객체를 개발자가 관리하지 않고 프레임워크가 관리한다. | 개발자는 필요할 때 마다 능동적으로 라이브러리를 호출하여 사용한다 |
핵심 기술 : spring IoC 컴테이너, AOP, 기타 등등
웹 기술 : spring MVC, spring WebFlux
데이터 접근 기술 : 트랜잭션, JDBC, ORM
테스트 : 스프링 기반 테스트 지원 등등
💡객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고
필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트.
💡코드의 최종 호출을 개발자가 하는 것이 아닌, 스프링 내부에서 이뤄짐
💡의존성(Dependency): 한 객체의 코드에서 다른 객체를 생성하거나 다른 객체의
메서드를 호출할 때, 의존성이 발생한다고 할 수 있다.

💡개발자를 대신하여 Bean(객체)을 생성 및 관리하는 컨테이너를 갖고있음
스프링 컨테이너 : 스프링에서 자바 객체들을 관리하는 공간
빈 : 스프링 컨테이너가 관리하는 자바 객체
💡Spring AOP(Aspect-oriented-programming) : 스프링 프레임워크에서 제공하는
기능 중 하나로 관점 지향 프로그래밍을 지원하는 기술


여러개의 클래스에서 반복해서 사용하는 코드 ➡️ 해당 코드를 모듈화하여 공통 관심사로 분리절차 지향 프로그래밍
💡 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며
프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
객체 지향 프로그래밍
💡프로그램을 객체라는 최소 단위로 나누고,
객체의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
1. 캡슐화
접근 제어자 : 자바가 캡슐화를 수행할 때 쓰는 핵심 수단으로, private , default , protected , public 총 4가지가 있다.

2. 상속
3. 다형성
4. 추상화

SRP : 단일 책임의 원칙 (Single Responsibility Principle)
• 클래스는 단 한개의 책임(기능)을 가져야 한다는 원칙
• 한 클래스가 수행할 수 있는 기능(책임)이 여러 개라면, 클래스 내부의 메서드끼리 강한 결합을 갖게 될 가능성이 커지게 된다.
• 객체 지향 설계의 핵심은 응집도는 높게, 결합도는 낮게 프로그램을 설계하는 것. 이에 책임(기능)을 잘게 쪼개어 분리시킬 필요가 있다

OCP : 개방 - 폐쇄 원칙 (Open-Closed Principle)
• 확장에는 열려있어야 하고, 변경에는 닫혀 있어야 함.
• 기존의 코드를 변경하지 않고 기능을 수정하거나 추가할 수 있도록 설계해야 한다.
• OCP는 추상화와 상속 등을 통해 구현해 낼 수 있다.
• 자주 변화하는 부분을 추상화 하여, 기존의 코드를 수정하지 않고도 기능을 확장시킬 수 있게 설계하여 유연성과 재사용성, 유지보수성을 높이는 것이 핵심

LSP : 리스코프 치환 원칙 (Liskov Substitution Principle)
• 부모 객체와 자식 객체가 존재할 때, 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있다는 원칙.
• 즉, 상속이 일어나면 하위 타입인 자식 객체는 상위 타입인 부모 객체의 특성을 가지며, 이를 바탕으로 확장시켜 나갈 수 있음을 의미한다.
ISP : 인터페이스 분리 원칙 (Interface Segregation Principle)
• 객체는 자신이 호출하지 않는 메소드에 의존하지 않아야 한다.
• 만약 인터페이스의 추상 메서드들을 범용적으로 구현한다면, 그 인터페이스를 상속받은 클래스는 자신이 사용하지
않는 인터페이스라도 억지로 구현해야 하는 상황이 찾아올 수 있다.
• 즉, 클라이언트의 목적과 용도에 적합한 인터페이스만을 제공하기 위해 인터페이스를 잘게 분리하는 것

![]() | ![]() |
![]() | ![]() |