[Spring Boot] IoC, DI, POJO, SOLID, JPA, JPQL 요약 정리

hyun-jin·2022년 11월 23일
0

📌 1. 제어역전(IoC, Inversion of Control)

  • 개발자가 프레임워크의 기능을 호출하는 형태가 아니라 프레임워크가 개발자의 코드를 호출하기 때문에, 개발자는 전체를 직접 구현하지 않고 자신의 코드를 부분적으로 "끼워넣기"하는 형태로 구현할 수 있다.
  • 프레임워크가 객체의 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
  • 객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.

📌 2. 스프링 컨테이너란?

  • 스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 합니다. 여기서 말하는 자갑 객체를 스프링에서는 빈(Bean)이라고 부릅니다.
  • 개발자는 객체를 생성하고 소멸할 수 있는데, 스프링 컨테이너가 이 역할을 대신해 준다. 즉, 제어의 흐름을 외부에서 관리하는 것. 또한, 객체들 간의 의존관계를 스프링 컨테이너가 런타임 과정에서 알아서 만들어 준다.
  • 스프링은 실행시 객체들을 담고있는 Container가 있다.
  • 스프링은 스프링 컨테이너에 스프링 빈(객체)을 등록할 때, 기본으로 싱글톤으로 등록한다.

📌 3. POJO란?

  • Plain Old Java Object, 단순한 자바 오브젝트
  • POJO란, 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.
  • 그러한 POJO에 애플리케이션의 핵심 로직과 기능을 담아 설계하고 개발하는 방법을 POJO프로그래밍이라고 할 수 있다.

📌 4. 의존성 주입(DI : Dependency Injection)

  • 객체간의 의존성이 존재할 경우 개발자가 직접 객체를 생성하거나 제어하는 것이 아니라, 제어반전에 의하여 특정 객체에 필요한 다른 객체를 프레임워크가 자동으로 연결시켜주는 것을 말한다.
  • 개발자는 자신에게 필요한 객체를 직접 할당하지 않고, 인터페이스를 통해 선언한 객체에 스프링 프레임워크에 의해 주입받아 사용할 수 있기 때문에 비지니스 로직에만 집중할 수 있다.
  • 개발자는 객체를 선언만 할 뿐, 할당은 프레임워크에서 자동으로 이루어진다.

📌 5. SOLID

  • 클린코드로 유명한 로버트 마틴이 좋은 객체지향 설계의 5가지 원칙을 정리
  • SRP : 단일 책임 원칙(Single responsibility principle)
  • OCP : 개방-패쇄 원칙(Open/Closed Principle)
  • LSP : 리스코프 치환 원칙 (Liskov substitution principle)
  • ISP : 인터페이스 분리 원칙(Interface segregation principle)
  • DIP : 의존관계 역전 원칙(Dependency inversion principle)

5-1. 개방-패쇄 원칙(OCP)

  • 확장에는 열려있고, 수정, 변경에는 닫혀있다.

5-2. 단일 책임 원칙(SRP)

  • 한 클래스는 하나의 책임만 가져야 한다.
  • 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 따른 것

5-3. 리스코프 치환 원칙(LSP)

  • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  • 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다는 것

5-4. 인터페이스 분리 원칙(ISP)

  • 범용 인터페이스 하나 보다 인터페이스 여러개가 났다.
  • 인터페이스가 명확해지고, 대체 가능성이 높아진다.

5-5. 의존관계 역전 원칙(DIP)

  • 프로그래머는 추상화에 의존해야지, 구체화에 의존해서는 안된다.
  • 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻

📌 6. JPA

  • JPA(Java Persistence API)
  • JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다.
  • JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있다.
  • JPA를 사용하면 개발 생산성을 크게 높일 수 있다.
  • JPA는 자바 영역에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다.
  • 즉, 실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다.

📌 7. JPQL(Java Persistence Query Language)

  • 테이블이 아닌 엔티티 객체를 대상으로 검색하는 객체지향 쿼리
  • SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음
  • JPA는 JPQL을 분석 후 적절한 SQl을 만들어 데이터베이스를 조회

0개의 댓글