스프링 프레임워크 (1)

넙데데맨·2022년 3월 29일
0
post-thumbnail
post-custom-banner

재사용 방식

  • 복사 붙여넣기
  • 메소드 사용
  • 클래스 재사용(상속)
  • AOP

디자인 패턴

정의

프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법
재사용하기 좋은 형태로 특정 규약을 묶어 정리한 것

사용 이유

  • 수시로 변경되는 요구사항에 대해 소스코드 변경을 최소화
  • 범용적인 코딩 스타일
  • 직관적인 코드 사용을 위해

Framework

정의

비기능적 요구사항(성능, 보안, 확장성, 안정성)을 만족하는 구조와 구현되는 기능을 안정적으로 실행하도록 제어해주는 잘 만들어진 구조의 라이브러리 덩어리

사용 이유

  • 비기능적인 요소들을 초기 개발단계 마다 구현해야하는 불합리함 극복
  • 기능적인 요구사항에 집중할 수 있게 해줌
  • 반복 발견 문제를 해결하기 위한 특화 Solution 제공

프레임워크와 디자인 패턴

프레임워크 = 디자인 패턴 + 패턴이 적용된 기반 클래스 라이브러리로 제공 구조와 구현 코드를 함께 제공한다.

프레임워크와 라이브러리

  • 프레임워크는 프레임워크에서 개발자가 만든 클래스를 호출하여 실행의 흐름에 대한 제어를 담당한다.
  • 라이브러리는 개발자가 만든 클래스에서 직접 호출해 사용해 개발자의 코드가 실행 흐름을 제어

스프링이란?

Java EE : 분산형, 기업형 응용프로그램 개발 위한 API / 결합력을 낮추는 DI, DB 트랜잭션 처리
Java SE : 일반적 로컬 응용프로그램 개발을 위한 API / 파일 IO 콘솔 IO 윈도우 IO 등등

Spring : Java EE의 위치를 대체하고 있는 오픈소스 경량급 애플리케이션 프레임워크

  • 애플리케이션 프레임워크 : 특정 계층, 기술, 업무에 국한되지 않는 전 영역 포괄 범용적 프레임워크
  • 경량급 프레임워크 : 단순한 웹 컨테이너에서 엔터프라이즈 개발의 고급 기술 대부분 사용

특징

  • 웹 애플리케이션 개발을 위한 오픈 소스 프레임워크
  • 기존의 프레임워크보다 가벼운 경량 프레임워크
  • 애플리케이션에서 사용하는 여러 가지 빈을 스프링이 권한을 갖고 관리함
  • EJB보다 가볍고 단점 개선 및 좋은 점은 발전시킨 프레임워크

웹개발 시 필요한 것들

느슨한 결합과 인터페이스

강한 결합 - 함수 사용 시 비슷한 기능이지만 다른 함수를 사용할 때 일일히 그 특정 함수를 불러와야만 사용할 수 있다.

느슨한 결합 - 사용할 함수의 공통된 기능을 interface로 정의 하고 함수의 종류별로 interface를 구현해서 오버라이딩하여 결합을 느슨하게 만들 수 있다. 불러올 때는 인터페이스를 불러온다

DI(Dependecy InJection)

의존성 주입

클래스 객체를 개발자가 코드에서 생성하지 않고 프레임워크가 생성하여 사용하는 방법

Compositon has a

class A
{
	private B b;
    public A(){
    	b= new B(); A 
    }
}

B는 A의 Dependency(종속 객체, 부품)라고 함

Association has a

class A
{
	private B b;
    public A(){}
	public void setB(B b){
    	this.b = b;
    } // 외부에서 생성한 뒤 세팅한 객체 받아오기
}    
	B b = new B(); // dependency
	A a = new A();
    a.setB(b); // Injection

B가 A의 Dependency일 때 외부에서 만든 후 A에 세팅하는 과정

장점 - 갈아끼기가 쉽다
단점 - 조립해야하는 번거로움

조립하는 방법

1. set함수를 통해 조립하기(setter Injection)

B b = new B();
A a = new A();
a.setB(b); // Injection

2. 생성자를 통해 조립하기(construction Injection)

B b = new B();
A a = new A(b); // Injection

스프링이 이러한 Injection을 대신해 줄 수 있으며 Injection된 결과를 사용할 수 있다.

IoC 컨테이너(Inversion of Control)

정의

프레임워크의 제어 흐름이 일반 프로그램 흐름과 반대로 동작하기 때문에 oC라고 설명한다.

서블릿이나 빈을 개발자가 코드에서 생성하지 않고 프레임워크가 직접 수행한다.
스프링 컨테이너는 IOC를 지원하며 메타 데이터(XML 설정)를 통해 beans를 관리하고 어플리케이션의 중요부분 형성
스프링 컨테이너는 관리되는 bean들을 DI를 통해 IoC를 지원한다.

DI 순서


위 케이스는 A가 먼저 생성되어 B,C,D 순서대로 객체가 생성되는 데 반해
아래 케이스는 D 부터 역순(Inversion)으로 객체가 생성되면서 조립된다.
아래 케이스 역할을 수행하고 그에 대한 결과를 저장하는 컨테이너를 IoC 컨테이너라고 한다.

profile
차근차근
post-custom-banner

0개의 댓글