반응형
JPA는 OOP의 관점에서 모델링을 할 수 있게 해준다
모델링한다는 것은 추상적인 개념을 현실세계에 뽑아내는 것을 의미한다❗
자동차 클래스와 엔진 클래스가 있다고 가정해보자.
자동차 클래스에서 엔진 클래스를 사용하기 위해선 상속을 사용해서는 안된다❗
왜❓ Car클래스가 Engine클래스를 Extends하면 Engine이 부모 클래스가 되어버리니 말이 안되는것이다.
그래서 상속 대신 컴포지션(결합)이라는 방법을 사용해야한다.
컴포지션은 JPA가 클래스를 테이블로 모델링할 때, 필드 중 객체(클래스)가 존재하면 그 객체에 대한 테이블을 따로 만들고 그 객체에 대한 id(PK)컬럼을 만들어서 매핑(관리)하는 것이다.
아래 코드와 같이 Car클래스안에 Engine클래스를 선언해주면 된다👏👏
Class Car {
long id;
String name;
String color;
Engine engine;
}
Class Engine {
long id;
int power;
}
연관관계를 매핑해줘야하지만 지금은 간단하게 생각만해보자👏
JPA는 클래스에서 테이블을 자동생성 해주기 때문에 아래와 같은식으로 테이블이 생긴다.
Car Table
id | name | color | engineId |
1 | K5 | White | 2 |
2 | SONATA | Black | 1 |
Engine Table
id | power |
1 | 2000 |
2 | 4000 |
ORM이 아닌 기존의 SQL 중심의 시스템에서는 불가능한 일이다❗
이런식으로 JPA는 OOP 관점에서 클래스(객체)를 설계하고 그것을 기반으로 모델링 할 수 있도록 도와준다.
출처
https://www.youtube.com/watch?v=XBG6CUtVCIg&list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg
반응형
'Spring Boot' 카테고리의 다른 글
스프링부트+JPA - 9편 ( 소켓통신과 HTTP통신 ) (1) | 2021.08.23 |
---|---|
스프링부트+JPA - 7편 ( 영속성 컨텍스트 ) (2) | 2021.06.02 |
스프링부트+JPA - 6편 ( ORM ) (0) | 2021.05.14 |
스프링부트+JPA - 5편 ( JPA ) (1) | 2021.05.03 |
스프링부트+JPA - 4편 ( BufferedReader, BufferedWrite ) (2) | 2021.04.26 |