2. 패러다임 불일치
- 생성 일시
- 2023년 4월 4일 PM 11:39
1. 들어가며#
- 애플리케이션은 발전하며 그 내부의 복잡성이 점점 커진다.
- 복잡성을 제어하지 못하면 결국 유지보수하기 어려운 애플리케이션이 된다.
- 객체지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공한다.
- 비즈니스 요구사항을 정의한 도메인 모델도 객체로 모델링 하면 객체지향 언어가 가진 장점을 활용할 수 있다.
- But. 저장이 필요한 객체라면 메모리가 아닌 어딘가에 영구 보관해야한다.
- 자바는 이런 문제를 고려해 객체를 파일로 저장하는 직렬화 기능을 지원한다.
- But. 보안상의 문제와 더불어 객체를 검색하기가 어렵다.
- 현실적인 대안은 RDB를 사용하는 것이지만 이는 앞서 이야기한 객체지향적인 개념이 존재하지 않는다.
- 객체지향과 RDB간의 패러다임 불일치를 개발자가 중간에서 해결해야 한다.
2. 상속#


java
abstract class Item {
Long id;
String name;
int price;
}
class Album extends Item {
String artist;
}
class Movie extends Item {
String director;
String actor;
}
class Book extends Item {
String author;
String isbn;
}- 객체는 상속이라는 기능을 가지고 있지만 테이블은 상속이라는 기능이 없다.
- 그나마 유사한 모델링은 슈퍼타입과 서브타입 관계라고 말할 수 있다.
ITEM테이블의DTYPE컬럼을 사용해 어떤 자식 테이블과 관계가 있는지 정의 했다.- JDBC API를 사용해 해당 코드를 완성하려면
ITEM용 INSERT SQL을 작성하고 자식 데이터만 커내 ALBUM용 INSERT SQL을 작성해야 하는데 작성해야 하는 코드량이 만만치 않다.- 물론 조회도 쉬운일이 아닌것이
ALBUM을 조회한다면ITEM과ALBUM테이블을 조인해 결과로ALBUM객체를 생성해야 한다.
- 자바 컬렉션에 보관한다면 이런 고민없이 그냥 컬렉션에 보관하면 된다.java
list.add(album); list.add(movie); Album album = list.get(albumId); - JPA는 상속과 관련된 패러다임 불일치 문제를 개발자 대신 해결해준다.
- 개발자는 마치 자바 컬렉션에 객체를 저장하듯 JPA에게 객체를 저장하면 된다.
jpa.persist(album);
2. 연관관계#
- 객체는 참조를 사용해 다른 객체와 연관관계를 가지고 참조에 접근해 연관된 객체를 조회한다.
- 반면 테이블은 외래 키를 사용해 테이블과 연관관계를 가지고 조인을 사용해 연관된 테이블을 조회한다.