[스프링 학습] 1. 오브젝트와 IoC

스프링이란?

  • 엔터프라이즈 어플리케이션 개발에 사용되는 어플리케이션 프레임워크

어플리케이션 기본 틀 - 스프링 컨테이너

  • 스프링은 스프링 컨테이너라고 불리는 스프링 런타임 엔진을 제공
  • 설정 정보를 참고해서 구성하는 오브젝트를 생성하고 관리함
  • 독립적으로 사용 가능하지만 보통 서비스나 서블릿으로 등록하여 사용함

공통 프로그래밍 모델 - IOC/DI, 서비스 추상화, AOP

  • 프레임워크 : 구성 오브젝트가 생성되고 동작하는 방식에 대한 틀을 제공해줄 뿐 아니라, 어플리케이션 코드가 어떻게 작성돼야 하는지 기준을 제시해줌, 스프링은 크게 3가지 핵심 프로그래밍 모델(틀)을 제공함

IoC

  • 오브젝트의 생명주기와 의존 관계에 대한 프로그래밍 모델
  • 스프링이 제공하는 모든 기술과 API, 심지어 컨테이너도 IoC/DI방식으로 작성되어있음

추상화

  • 구체적인 기술과 환경에 종속되지 않도록 유연한 추상 계층을 두는 방식
  • 스프링을 사용하면 환경이나 서버, 특정 기술에 종속되지 않고 이식성이 뛰어난 유연한 어플리케이션을 제작할 수 있음

AOP

  • 부가적인 기능을 독립적으로 모듈화하는 프로그램이 모델
  • 스프링은 AOP를 이용해 다양한 엔터프라이즈 서비스를 적용하고 깔끔한 코드를 유지할 수 있게 해줌

스프링을 사용하는 이유 → 단순함과 유연성 때문

  • 단순함 → POJO 프로그래밍
  • 유연성 → 다른 프레임워크랑 편리하게 접목되서 사용 가능 → 프레임워크를 위한 프레임워크, 접착 프레임워크라고도 불림

1장 오브젝트와 의존관계

  • 스프링의 철학 : 객체지향 프로그래밍이 가능하다.
  • 스프링의 가장 큰 관심 “오브젝트”
  • 오브젝트를 어떤식으로 설계하고 구현하고 사용하는지 이를 어떤식으로 개선해야하는지 명확한 기준으로 마련해줌

DAO

  • DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트

🥜 자바빈 디폴트 생성자 : 자바빈은 파라미터가 없는 디폴트 생성자를 가지고 있어야한다, 프로퍼티 : 자바빈이 노출하는 이름을 가진 속성을 프로퍼티라고 한다.

main()을 이용한 DAO 테스트 코드

  • 만들어진 코드의 기능을 검증하고자 할 때 가장 간단한 방법 → 오브젝트 스스로 자신을 검증하도록 만들기
  • 모든 클래스에는 자신을 엔트리 포인트로 설정해 직접 실행이 가능하게 해주는 스태틱 메서드 main()이 존재

객체지향에서 번거로운 작업이 요구되는 이유

  • 변화에 효과적으로 대처할 수 있는 기술적 특징 때문임 → 미래에 해당 기능이 없을수도 있고 우리는 미래를 보고 개발을 진행해나가야함
  • 최소한의 수정으로 최대한의 이득을 보기 위해서는 초반부터 “분리”와 확장을 고려해 설계해야한다.
    • Ex) DB를 변경할 때 MYSQL → 오라클 디비의 구조를 한 곳에서만 바꾸면 전부 바뀔 수 있게 분리 설계 해야함
  • 관심사 분리 : 관심이 같은건 한 곳으로 모르고, 관심이 다른건 따로 떨어져있게 하는 것
  1. 중복 코드 메서드 추출
  2. 변경사항에 대한 검증

Ioc 제어의 역전

팩토리 <팩토리 패턴과는 전혀 무관하니 혼동하지 말 것>

  • 객체의 생성 방법을 결정하고 그렇게 만들어진 오브젝트를 돌려주는 것
  • 단지 오브젝트를 생성하는 쪽과 생성된 오브젝트를 사용하는 쪽의 역할과 책임을 깔끔하게 분리하기 위해 사용하는 것
  • Spring 에서 가장 중요한 부분은 관심 영역의 분리이다.
  • 컴포넌트 역할을 하는 오브젝트와 어플리케이션 구조를 결정하는 오브젝트를 분리하는 것도 중요

  • 위와 같은 중복 현상을 막기 위해서는 코드를 분리해 내는 것이 중요하다.

  • 한 부분만 수정해도 코드 전체가 변경되게 분리하는 것이 바람직한 방법임

제어권의 이전을 통한 제어관계 역전

  • 프로그램의 제어 흐름 구조가 뒤바뀌는 것일반적인 프로그램 구조 :
  • 시작되는 지점에서 다음에 사용할 오브젝트를 결정하고 생성하고 호출하고→ 필요한 시점에 생성해두고 필요한 시점에 사용함 → 언제 어떻게 그 오브젝트를 만들지 스스로 관장함 현재의 구조는 모든 종류의 작업을 사용하는 쪽에서 제어하는 구조제어의 역전 구조 :
  • 오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않음, 생성하지 않음, 또 자신이 어디서 어떻게 만들어지는지 모름, 모든 제어의 권한을 자신이 아닌 다른 대상에게 위임하는 구조대표적인 예시 :
  • 서블릿 → 서블릿 안에 main() 메소드가 있어 직접 실행 시킬 수 있는 것도 아님, 대신 서블릿에 대한 제어 권한을 가진 컨테이너가 적적한 시점에 서블릿 클래스의 오브젝트를 만들고 그 안의 메소드를 호출
  • 프레임워크도 제어의 역전의 대표적인 예시임라이브러리 :
  • 라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어함 , 단지 동작 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐임프레임워크 :
  • 거꾸로 애플리케이션 코드가 프레임워크에의해 사용된다. 프레임워크 위에 개발한 클래스를 등록하고 프레임워크가 흐름을 주도하는 중에 개발자가 만든 애플리케이션 코드를 사용하도록 만드는 방식이다.

'JAVA > Spring' 카테고리의 다른 글

Spring Template - RestTemplate  (0) 2023.07.23
Spring Template이란?  (0) 2023.07.23
JWT Token  (0) 2023.07.23
HttpServletRequest와 @RequestBody  (0) 2023.07.23
01. Spring - DI(Dependency Injection)  (0) 2023.07.13