WIL 4주차

min·2021년 10월 10일
0

항해99 4주차

✨주특기 심화 - Spring

주특기 심화 주차가 끝이 났다. 제대로 완성을 못한 것 같아 매우 아쉽다. 매주 아쉬움의 크기는 더욱 커지는 것 같다. 월요일부터는 새로운 미니 프로젝트를 진행할 텐데 두려움 반 설렘 반이다. 잘 할 수 있도록 이번 주도 열심히 해 보자!

POJO

특별한 제한에 종속되지 않고, 클래스 패스를 필요로 하지 않는 일반적인 Java Object를 의미

스프링 애플리케이션 = POJO를 이용해서 만든 애플리케이션 로직 + POJO가 어떻게 관계를 맺고 동작하는지 정의해놓은 설계정보

POJO의 조건

1.특정 규약에 종속되지 않는다.

  • 단일 상속 제한 때문에 객체지향적인 설계기법 적용하기 어려워짐
  • 다른 환경으로의 이전이 어려움

2.특정 환경에 종속되지 않는다.

  • 다른 환경에서 사용하기 어려움
  • 비즈니스 로직과 기술적인 내용을 담은 웹정보 코드가 섞여 이해하기 어려워짐
  • 웹서버에 올리지 않고 독립적으로 테스트하기 어려워짐

3.단일 책임 원칙을 지키는 클래스

  • 단순히 1,2번을 지켰다고 POJO라 할 수 없으며, 책임과 역할이 각기 다른 코드를 하나의 클래스에 넣는 경우 진정한 POJO라 할 수 없다

POJO란 객체지향적인 원리에 충실하면서, 특정 환경과 규약에 종속되지 않아 필요에 따라 재사용될 수 있는 방식으로 설계된 오브젝트라 할 수 있다

POJO의 장점

  • 특정 규약에 종속되지 않아 객체지향 설계를 할 수 있게 됨
  • 특정 환경에 종속되지 않아 테스트 하기 좋음
  • 특정 규약에 종속되지 않아 로우레벨 코드와 비즈니스 코드가 분리되어 깔끔한 코드 작성이 가능

POJO 프레임워크

  • 스프링은 POJO를 이용한 엔터프라이즈 애플리케이션 개발을 목적으로 하는 프레임워크라 한다
  • 엔터프라이즈 애플리케이션 개발 중 하나의 예를 들면 DB 이용 기술이 있다
  • DB 이용 기술에 관련된 코드를 객체지향적인 POJO를 기반으로 깔끔하게 구현할 수 있다

싱글턴 패턴

전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴

장점

최초 한 번의 new 연산자를 통해서 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 때 메모리 낭비를 방지할 수 있으며 이미 생성된 인스턴스를 활용하여 속도 측면에서도 이점이 있다
또한 클래스 간에 데이터 공유가 쉬우며 전역으로 사용되는 인스턴스이기에 다른 클래스의 인스턴스들이 접근하여 사용할 수 있다

단점

  • 여러 클래스의 인스턴스가 싱글톤 인스턴스의 데이터에 동시에 접근하게 되면 동시성 문제가 발생 할 수 있다
  • 싱글톤 패턴을 구현하는 코드 자체가 많이 필요하다
  • 자원을 공유하기 있기 때문에 테스트가 결정적으로 격리된 환경에서 수행되려면 매번 인스턴스 상태를 초기화시켜주어야 한다
  • 의존관계상 클라이언트가 구체 클래스에 의존하게 된다
  • 자식클래스를 만들 수 없다
  • 내부상태 변경에 어려움이 있다

JPA(Java Persistence API)

  • Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음
  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
  • 인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함

특징

  • 데이터를 객체지향적으로 관리할 수 있기 때문에 개발자는 비지니스 로직에 집중할 수 있으며 객체지향 개발이 가능하다
  • 자바 객체와 DB 테이블 사이의 매핑 설정을 통해 SQL을 생선한다
  • 객체를 통해 쿼리를 작성할 수 있는 JPQL을 지원
  • JPA는 성능 향상을 위해 지연 로딩이나 즉시 로딩과 같은 몇가지 기법을 제공하는데 이것을 잘 활용하면 SQL을 직접 사용하는 것과 유사한 성능을 얻을 수 있다

JPA 사용 이유

SQL이 아닌 객체 중심으로 개발 할 수 있다

  • 반복적인 CRUD SQL 처리
  • 생산성 증가 및 쉬운 유지보수
  • 패러다임의 불일치 해결

👍 참고

POJO(plain old java object)란?
싱글톤(Singleton) 패턴이란?
JPA는 도대체 뭘까? (orm, 영속성, hibernate, spring-data-jpa)
[Spring JPA] JPA 란?

0개의 댓글