2.5.1 spring 기초 개념

yeonseong Jo·2023년 6월 5일
0

SEB_BE_45

목록 보기
29/47
post-thumbnail

java 기초, 알고리즘, database를 넘어
드디어 spring에 첫 발을 딛기 시작했다.

spring부터는 정말 내가 알고 있는 것이 하나도 없기에,
걱정이 되기도 하지만, 기대도 된다.

spring framework를 처음 시작하면서
핵심 개념에 대해 간단히 알아가고자 한다.


POJO

POJO는
Plain Old Java Object의 약자로
말 그대로 Java에서 정말 순수한 객체를 의미한다.

아래에 설명할 IoC/DI, AOP, PSA는
모두 POJO 프로그래밍을 위한 기술이다.

순수한 객체(기본 객체)?

순수한 객체란
특정 환경이나 기술에 종속되어 있지 않아
getter, setter와 같이 기본적인 메서드만 지닌 객체를 의미한다.
POJO에 핵심 메서드를 담아 설계하고 개발하는 방법을
POJO 프로그래밍이라고 한다.

특징

  1. Java나 Java의 스펙에 정의된 것 이외에는 다른 기술이나 규약에 얽메이지 않아야 한다.

특정 기술을 상속해서 코드 작성 시,
다른 기술로 변경해야 한다면,
모든 관련한 부분을 수정해야 한다.

또한, 특정 기술을 상속해야 하는 경우
Java의 단일 상속 제한 때문에
객체지향적인 설계가 불가능해 진다.

  1. 특정 환경에 종속적이지 않아야 한다.

특정 서버, 환경에서만 동작 가능한 코드는 POJO가 아니다.
POJO는 환경에 독립적이어야 한다.

만약 웹 기술을 담고 있는 클래스나 인터페이스를 사용 한다면,
클라이언트 또한 웹에서만 사용가능하기 때문

  1. 객체 지향에 충실해야 한다.

IoC/DI

IoC는
Inversion of Control,
DI는
Dependency Injection의 약자로
각각 제어의 역전, 의존성 주입을 의미한다.

두 용어가 묶인 이유는
제어를 역전시켜 의존성을 주입하기 때문

IoC

소프트웨어 컴포넌트(java에서 객체)의 제어 흐름을
개발자가 아닌 framework나 Container가
담당하는 것을 의미한다.

Spring에서 Spring Container를 IoC Container라고 할 수 있고,
이 Spring Container가 관리하는 객체를
Bean 객체라고 하고,
이 Bean 객체를 관리한다는 의미로
Container를 Bean Factory라고도 한다.

아래에 설명할 DI로 객체 간의 의존성을 역전시켜
객체 간의 결합도를 낮출 수 있으며,

재사용성과 확장성이 높아진다.

DI

객체가 직접 의존하는 객체를 생성하거나 관리하지 않고,
외부에서 의존 객체를 주입받는 방식이다.

어느 한 클래스 안에서 다른 클래스의
생성자나 getter/setter 등을 받아 사용하게 된다면,
이는 의존 관계가 성립하게 되고,

만약 이 때 new 키워드를 통해 다른 클래스의 객체를 생성하게 된다면, 강하게 결합되어 있는 것

내부가 아닌 외부에서 객체를 받아 사용하게 되면,
느슨한 결합이 되고, 유지 보수성과 재사용성을 향상시킨다.

Spring에선 IoC를 통해 Container(Bean Factory)가
객체(Bean object)를 주입시킨다.

이 때문에 객체는 의존하는 객체의 구체적인 정보를 알 지 못하며,
의존 객체에 수정이 발생하더라도 객체를 수정할 필요가 없다.


AOP

AOP는
Aspect Oriented Programming의 약자로
관심 지향 프로그래밍을 뜻한다.

기능들을 공통 관심 사항과 핵심 관심 사항으로 나누고,
공통 관심 사항들을 재사용한다는 걸 의미한다.

보통 공통 관심 사항들에는
로깅, 보안, 트랜잭션, 모니터링, 트레이싱 등 이 있고,

이러한 기능들을 AOP를 통해 구현한다면,
코드의 간결성, 객체 지향 설계 원칙 유지, 재사용성 향상
등의 이점이 있다.


PSA

PSA는
Portable Service Abstraction의 약자로

하나의 추상화를 통해 여러 서비스를 묶어둔 것을 의미한다.

즉 다형성(업캐스팅)을 이용해
어느 한 Interfcae를 구현한 클래스(서비스)를 생성하는 것.

이외에도 여러 annotation을 이용해 PSA 구현이 가능하다.

이를 통해 유지보수성이 향상 된다.


DI에 대해 이해가 좀 어려웠다.
한 4번은 더 본거 같은데
아직 완전히 이해하지는 못한거 같다.

AOP나 PSA는 이해는 되었지만,
이론만 봤을 때
그냥 다형성을 잘 활용한 예제들인거 같은데,
다음에 좀 더 자세히 알아보면서
이해하자..

profile
뒤(back)끝(end)있는 개발자

0개의 댓글