springboot 개념정리(youtube강좌)

스프링부트 강좌 with JPA 7강 - OOP 관점에서 모델링이란?

wannabe 2021. 6. 27. 02:35

1. JPA란?

 ● JPA는 Java Persistence API 이다.

 ● JPA는 ORM기술이다. 

 ● JPA는 반복적인 CRUD작업을 생략하게 해준다.

 ● JPA는 영속성 컨텍스트를 가지고 있다. 

 ● JPA는 DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다(DB는 객체저장 불가능)

 ● JPA는 OOP의 관점에서 모델링을 할 수 있게 해준다(상속, 컴포지션, 연관관계)

 ● JPA는 쉽지만 어렵다.  

 

 

JPA는 OOP의 관점에서 모델링을 할 수 있게 해준다(상속, 컴포지션, 연관관계)

 

컴포지션

Class Car가 있다. 

Class Engine도 있다. Engine클래스를 Car클래스에서 사용하고 싶다면?

Car클래스에서 Engine클래스를 상속할 수는 없다. 

상속하게 되면 Engine이 부모클래스이고, Car클래스가 자식 클래스가 되는데 말이 안된다.

컴포지션이라는 방법을 사용해야한다! 즉, 결합해야함

OOP관점에서 다음과 같이 만들수 있다.

JPA는 클래스를 먼저 만들고 클래스를 토대로 자동생성해서 DB 테이블을 만들어주는 기법

Engine클래스도 object이므로 id,와 power를 가지고 있다고 하자. 

그러므로 위에 처럼 선언된 Car클래스는 DB에 다음과 같이 테이블이 형성된다.

①번 자바 클래스를 생성한 하면 DB에서 ②번 테이블이 자동생성된다.

OOP관점에서 테이블이 만들어지는 것!!

 

상속

모든 클래스를 날짜를 넣고 싶다면?? 

Engine클래스에 

Timestamp createDate;

Timestamp updateDate;

라고 넣을수도 있지만, Car클래스에도 넣으려면 똑같이 반복을 해야하니,,그렇게하지 말고!

 

클래스 하나더 만든다

Class EntityDate{

  Timestamp createDate;

  Timestamp updateDate;

}

그리고 필요한 곳에서 이 EntityDate 클래스를 상속하면 된다. 

Class Car extends EntityDate{

 

}

Class Engine extends EntityDate

 

}

라고 하면 된다.

자바에서 위와 같이, 클래스 상속을 받게되면,

DB에서는 다음과 같이 테이블 생성될때 옆에 붙여서 생성됨

 

스프링을 하는데, JPA를 이용해서 DB에 접근한다. 

JPA가 MySQL만 지원한다면? MySQL으로만 DB에 접근 가능했을테지만

JPA는 수많은 방언들을 지원해준다

이 방언을 dialect라고 한다. 

오라클, 마리아, MySQL 등이 있다. 

이 방언을 정해놓고 사용하는게 아니라! JPA에 추상화객체를 하나 두고 이 객체가 DB에 붙여있다

즉, 추상화객체는 방언이 뭐가 될지 모른다는 것!

오라클 사용안하고 MySQL사용하고 싶다면

오라클 삭제하고 MySQL만들어서 연결하면 추상화객체는 MySQL이 돌거다

추상화 객체가 어떤걸로 바뀌든 상관없이 DB에 연결해서 사용할 수 있다!! 

오라클 사용하다가 더이상 사용 안하고 MySQL 사용하게 되어도! 원래는 코드가 많이 바뀌어야하는데,,

추상화객체로 JPA를 이용하게되면 큰 상관이 없다.