스프링 공부/JPA

[JPA] 1. ORM이란 무엇인가?

장아장 2022. 10. 14. 12:18

모든 개념의 시작은 ORM을 먼저 알고 시작해야할 것 같다. 

 

ORM : Object-Relational Mapping(객체 관계형데이터베이스 매핑)

상속

관계형 데이터베이스 상속관계는 없다고 봐도 무방할 정도라고 한다. 
객체 객체는 상속을 통해 상속받은 객체의 함수등을 불러와 사용할 수 있다. 

연관관계

관계형 데이터베이스 학교의 데이터베이스 수업시간에 배운 것은, 관계형 데이터베이스는 서로 기본키, 외래키를 이용한 Join이 가능하기에, 최대한 데이터베이스를 잘게 쪼개고, 이를 통해 서로 참조를 한다. 이를 통해 양방향으로 탐색할 수 있다는 장점이 있다.
객체 자바에서 객체는 참조를 통해 등록된다. 즉, 상속을 받는 객체에서 상속된 객체를 가져올 수 있지만, 상속시킨 객체에는 상속받는 객체에 대한 정보가 없기에 단방향으로만 탐색할 수 있다. 

이렇게 상속과 연관관계라는 측면에서 둘은 엄연한 차이가 있다(심지어 이름이 관계형 데이터베이스인데 연관관계를 쓸 수 없다니!)

궁극적으로, DB의 데이터를 가져와 객체에서 사용하려 한들 객체 그래프를 자유롭게 탐색할 수 없다.

(상속으로만 표현하자니 양방향성이 없기에)

 

하지만, 객체 지향 프로그래밍의 장점이 분명 존재한다. 

  • 추상화 : 클래스로 구분해 정의하는 것
  • 캡슐화 : 객체에서 사용하는 데이터와 기능을 하나로 캡슐화시키는 것
  • 정보은닉 : 외부에 실제로 구현되는 부분을 보이지 않게 하는 것
  • 상속 : (사실 자바쓰면서 제일 좋았던 점들중 하나) 하나의 클래스를 상속시켜 데이터나 함수를 그대로 사용할 수 있게 해주는 것
  • 다형성 : 오버라이딩과 오버로딩으로 조금씩 다르게 동작하는 함수들도 같게 명명하는 것(즉 이름 하나에 다양한 형태를 띄는 것)
    • 오버라이딩(Overriding) - 상위 클래스 메소드와 같은 이름을 사용하며 매개변수도 같되 내부 소스를 재정의하는 것
    • 오버로딩(Overloading) - 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출
  • 동적 바인딩 : 컴파일 시에 프로그램의 한 개체나 기호를 실행 과정에 여러 속성이나 연산에 바인딩함으로써 다형 개념을 실현한다.

이를 통해 생산성, 재사용성, 유지보수의 편리, 자연적 모델링을 할 수 있기게 객체와 관계형 데이터베이스의 매핑을 개발한 것이라고 한다.