Spring Framework

hisungmi·2024년 12월 17일

Java-Spring

목록 보기
1/8
post-thumbnail

Framework

  • 프레임워크는 애플리케이션 개발 시 필수적인 코드, 알고리즘 등의 기능들을 위해 뼈대를 제공한다.
  • 개발자는 이런 뼈대 위에서 코드를 작성하여 애플리케이션을 개발할 수 있다.

Libary

  • 라이브러리는 개발자가 개발하는 데 필요한 것들을 모아 둔 도구들의 나열로, 개발자가 필요로 할 때 호출하여 사용하는 방식을 취하고 있다.

차이점

FrameworkLibary
제어의 역전(IoC) 개념 적용개발자가 전체적인 사용 흐름을 만듬
객체를 개발자가 관리하지 않고
프레임워크가 관리한다.
개발자는 필요할 때 마다
능동적으로 라이브러리를 호출하여 사용한다

Spring Framework?

핵심 기술 : spring IoC 컴테이너, AOP, 기타 등등
웹 기술 : spring MVC, spring WebFlux
데이터 접근 기술 : 트랜잭션, JDBC, ORM
테스트 : 스프링 기반 테스트 지원 등등

  • Java 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크
  • 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화 된 솔루션

특징

  • Java 언어 기반 프레임워크
  • 객체 지향 언어
  • SOLID 원칙에 부합하는 프로그래밍이 가능, 확장성이 높다

POJO(Plain Old Java Object) 기반의 구성

💡객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고
  필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트.
  • Java나 Java의 사양에 정의된 것 의외에는 다른 기술이나 규약에 얽매이지 않아야 함

IoC (제어의 역행)

💡코드의 최종 호출을 개발자가 하는 것이 아닌, 스프링 내부에서 이뤄짐

DI (의존성 주입)

💡의존성(Dependency): 한 객체의 코드에서 다른 객체를 생성하거나 다른 객체의
  메서드를 호출할 때, 의존성이 발생한다고 할 수 있다.
  

  • MemberController 클래스가 MemberService의 getMemberList() 메서드를 사용할 때, MemberController는 MemberService에 의존한다고 할 수 있다.

경량 컨테이너

💡개발자를 대신하여 Bean(객체)을 생성 및 관리하는 컨테이너를 갖고있음

스프링 컨테이너 : 스프링에서 자바 객체들을 관리하는 공간
빈 : 스프링 컨테이너가 관리하는 자바 객체
  • 스프링 컨테이너는 빈(Bean)의 생성부터 소멸까지 개발자 대신 관리해준다.
  • 스프링 컨테이너에 객체, 빈(Bean)을 등록하는 이유는 객체간의 의존 관계들을 스프링이 관리하도록 하기 위해서

AOP(관점 지향 프로그래밍) 지원

💡Spring AOP(Aspect-oriented-programming) : 스프링 프레임워크에서 제공하는 
  기능 중 하나로 관점 지향 프로그래밍을 지원하는 기술
  • 로깅, 보안, 트랜잭션 등과 같은 공통적인 관심사를 모듈화 하여 코드 중복을 줄이고, 유지 보수성을 향상시키는데 도움을 준다.

    여러개의 클래스에서 반복해서 사용하는 코드 ➡️ 해당 코드를 모듈화하여 공통 관심사로 분리

OOP + POJO

객체 지향 프로그래밍(Object-Oriented Programming)

절차 지향 프로그래밍

💡 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며
  프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법

객체 지향 프로그래밍

💡프로그램을 객체라는 최소 단위로 나누고, 
  객체의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법

OOP 특징

1. 캡슐화

  • 낮은 결합도를 유지할 수 있도록 설계하는 것
    • 객체의 내부 구현을 감춤(은닉)으로써, 한 곳에서 변화가 일어나더라도 다른 곳에 미치는 영향을 최소화 하는 것
    • 은닉 : 구현은 숨기고 동작은 노출시킴

접근 제어자 : 자바가 캡슐화를 수행할 때 쓰는 핵심 수단으로, private , default , protected , public 총 4가지가 있다.

2. 상속

  • 자식 클래스에서 부모 클래스로부터 자원을 물려받는 것
    • 상속을 사용하게 될 경우 개발자들은 코드의 중복성을 최소화 할 수 있다.
    • 자식이 부모의 기능과 속성을 중복해서 가져가야 할 때는 상속을 통해 물려받고, 추가적으로 필요한 기능만 추가할 수 있다.

3. 다형성

  • 한 객체가 다른 여러 형태(객체)로 재구성될 수 있다.
    • 자바의 Overload , Override가 다형성의 대표적인 예
    • Overload는 하나의 클래스 안에 같은 이름의 메소드를 여러 개 지닐 수 있는 것
    • Override는 상속받은 메소드를 재정의하여 기능을 확장해 코드 중복성을 줄이는 것

4. 추상화

  • 공통의 속성이나 기능을 묶어 이름을 붙이는 것
    • 공통적인 부분만 파악해 추출하고, 필요하지 않은 세부 사항들은 제거한다.
    • 즉, 객체의 공통적인 속성과 기능을 추출하여 정의하는 것
                                                                           

객체 지향 설계 원칙 (SOLID)

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

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

LSP : 리스코프 치환 원칙 (Liskov Substitution Principle)
• 부모 객체와 자식 객체가 존재할 때, 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있다는 원칙.
• 즉, 상속이 일어나면 하위 타입인 자식 객체는 상위 타입인 부모 객체의 특성을 가지며, 이를 바탕으로 확장시켜 나갈 수 있음을 의미한다.

ISP : 인터페이스 분리 원칙 (Interface Segregation Principle)
• 객체는 자신이 호출하지 않는 메소드에 의존하지 않아야 한다.
• 만약 인터페이스의 추상 메서드들을 범용적으로 구현한다면, 그 인터페이스를 상속받은 클래스는 자신이 사용하지
않는 인터페이스라도 억지로 구현해야 하는 상황이 찾아올 수 있다.
• 즉, 클라이언트의 목적과 용도에 적합한 인터페이스만을 제공하기 위해 인터페이스를 잘게 분리하는 것

profile
난 성미다.

0개의 댓글