ORM (Object-Relational mapping) 이란? Programmer's notes

위키피디아에는 다음과 같이 정의하고 있다.

Object-Relational mapping (or O/RM), is a programming technique that links databases to object-oriented language concepts, creating (in effect) a "virtual object database." There are both free and commercial packages available that perform object-relational mapping, although some programmers opt to code their own object-relational mapping for their systems.


별 거 있나? 데이터베이스를 객체지향언어 개념에 연결하는 프로그래밍 기술을 말한다. 즉 "가상 객체 데이터베이스"를 만드는 거라고....

그럼 클래스를 데이터베이스와 연결해주면 ORM 툴인가?

주의해야 할 것은 객체지향언어 개념과 연결을 한다는 것인다.
객체지향 언어 개념은 클래스를 말하는 것이 아니다.
그렇다면 객체지향 언어 개념은 무엇일까? 역시 위키피디아에는 객체지향 언어 개념을 다음과 같은 항목들로 나뉘어서 정리가 되어있다.

Fundamental concepts
  • Class
  • Object
  • Encapsulation
  • Inheritance
  • Abstraction
  • Polymorphism

위의 개념들에 대한 자세한 내용은 링크를 클릭해서 살펴보기 바란다.

어쨌거나 위에 각 항목들은 OOP에서 항상 언급되는 내용들이다.

필자는 데이터베이스의 테이블에 대응하는 VO(Value Object, DTO) 를 만들어서 썼다고 해서 ORM을 사용했다고 생각한 적이 있었다. 완전 착각이 아닐 수 없다. 사실 이거야 C에서 struct 를 사용하는 것과 별반 다를 것이 없잖은가? 즉 ORM 은 객체지향으로 설계한 모델을 데이터베이스에 매핑하는 것이다. 즉 인터페이스가 있을 수 있고, 상속관계도 있고 아직도 선뜻 대답 못하는 overloading, overriding 이 있을 수 있는 구조를 저장하는 것이 ORM 이라는 것이다.

그렇다면 이러한 것을 모두 만족하는 ORM 툴이 있나?
아마 Polymorphism 에서 걸릴 것이다. 그 중에서도 특히 Overloading 에서 걸릴 것 같은 느낌이 들지 않는가? 누군가가 나에게 ORM 툴을 만들고 Method overloading 을 구현하라고 하면 아마 때려치고 회사를 나가리라는 생각이 든다. 내가 아는 한은 이것을 구현한 것은 없고 구현할 만한 것이 아니기도 하다. 아무튼 이런데서 귀에 익은 Impedance mismatch 라는 말이 나오지 않았나 싶다. 이는 OOP 와 RDBMS 가 그 출발점이 다르기 때문이다.

그러나 지금은 분명 사용하기 좋은 ORM툴들이 나온 것이 사실이다.
자바쪽에서는 Hibernate, OJB, TopLink, JDO 구현체들을 사용할 수 있다.

 

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://sayjava.egloos.com/tb/1820815 [도움말]

덧글

덧글 입력 영역