모든 개념의 시작은 ORM을 먼저 알고 시작해야할 것 같다.
ORM : Object-Relational Mapping(객체 관계형데이터베이스 매핑)
상속
관계형 데이터베이스 | 상속관계는 없다고 봐도 무방할 정도라고 한다. |
객체 | 객체는 상속을 통해 상속받은 객체의 함수등을 불러와 사용할 수 있다. |
연관관계
관계형 데이터베이스 | 학교의 데이터베이스 수업시간에 배운 것은, 관계형 데이터베이스는 서로 기본키, 외래키를 이용한 Join이 가능하기에, 최대한 데이터베이스를 잘게 쪼개고, 이를 통해 서로 참조를 한다. 이를 통해 양방향으로 탐색할 수 있다는 장점이 있다. |
객체 | 자바에서 객체는 참조를 통해 등록된다. 즉, 상속을 받는 객체에서 상속된 객체를 가져올 수 있지만, 상속시킨 객체에는 상속받는 객체에 대한 정보가 없기에 단방향으로만 탐색할 수 있다. |
이렇게 상속과 연관관계라는 측면에서 둘은 엄연한 차이가 있다(심지어 이름이 관계형 데이터베이스인데 연관관계를 쓸 수 없다니!)
궁극적으로, DB의 데이터를 가져와 객체에서 사용하려 한들 객체 그래프를 자유롭게 탐색할 수 없다.
(상속으로만 표현하자니 양방향성이 없기에)
하지만, 객체 지향 프로그래밍의 장점이 분명 존재한다.
- 추상화 : 클래스로 구분해 정의하는 것
- 캡슐화 : 객체에서 사용하는 데이터와 기능을 하나로 캡슐화시키는 것
- 정보은닉 : 외부에 실제로 구현되는 부분을 보이지 않게 하는 것
- 상속 : (사실 자바쓰면서 제일 좋았던 점들중 하나) 하나의 클래스를 상속시켜 데이터나 함수를 그대로 사용할 수 있게 해주는 것
- 다형성 : 오버라이딩과 오버로딩으로 조금씩 다르게 동작하는 함수들도 같게 명명하는 것(즉 이름 하나에 다양한 형태를 띄는 것)
- 오버라이딩(Overriding) - 상위 클래스 메소드와 같은 이름을 사용하며 매개변수도 같되 내부 소스를 재정의하는 것
- 오버로딩(Overloading) - 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출
- 동적 바인딩 : 컴파일 시에 프로그램의 한 개체나 기호를 실행 과정에 여러 속성이나 연산에 바인딩함으로써 다형 개념을 실현한다.
이를 통해 생산성, 재사용성, 유지보수의 편리, 자연적 모델링을 할 수 있기게 객체와 관계형 데이터베이스의 매핑을 개발한 것이라고 한다.
'스프링 공부 > JPA' 카테고리의 다른 글
[JPA] 6. 기본키 매핑 (0) | 2022.10.20 |
---|---|
[JPA] 5. 테이블 자체의 어노테이션에 대하여 (0) | 2022.10.20 |
[JPA] 4. 객체를 데이터베이스와 매핑시키기 - 엔티티 매핑 (0) | 2022.10.20 |
[JPA] 3. JPA의 중요성 - ORM, Persistence Context (0) | 2022.10.19 |
[JPA] 2. 그러면 JPA는 또 무엇일까? (0) | 2022.10.17 |