프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
다른 사람이 만든 클래스를 가져와서 이용할 수 있고, 상속을 통해 확장해서 사용할 수 있기 때문에 코드 재사용이 용이하다.
절차지향 프로그래밍에서는 코드를 수정해야할 경우 일일이 찾아 수정해야 하는 반면 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 있기 때문에 해당 부분만 수정하면 된다.(프로그램을 유연하고 변경이 용이하게 만든다.)
클래스 단위로 모듈화시켜서 개발할 수 있으므로 대형 프로젝트 개발이 필요할 시 업무 분담이 쉽다.(프로그램의 개발과 보수를 간편하게 만든다.)
직관적이 코드 분석이 가능하다.
처리속도가 상대적으로 느리다.
객체가 많으면 용량이 커질 수 있다.
설계시 많은 시간과 노력이 필요하다.
클래스 : 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메서드로 정의한 것
인스턴스(객체) : 클래스의 인스턴스로, 클래스에서 정의한 것을 토대로 실제 메모리상에 할당된 것으로 실제 프로그램에서 사용되는 데이터
메서드(method) : 클래스로부터 생성된 객체를 사용하는 방법으로 객체의 속성을 조작하는데 사용된다.
👉🏻 다중상속은 불가하다. 클래스의 상속 관계에서 혼란을 줄 수 있기 때문에 상속은 반드시 하나만 가능하고 필요에 따라 인터페이스를 사용할 수 있게 했다.
☑️ 오버라이딩 : 부모클래스의 메서드와 같은 이름 매개변수를 재정의 하는 것
☑️ 오버로딩 : 같은 이름의 함수를 어러개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것
OOP를 사용하는데 제약받지 않고 RDBMS를 이용하기 위한 프레임워크로 클래스를 사용하는 객체 지향 프로그래밍과 테이블을 사용하는 관계형 데이터베이스간의 불일치를 ORM객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결하는 것을 의미한다.
사물을 추상화시켜 이해하려는 OOP적 사고방식과 DataModel을 정형화하여 관리하려는 RDB 사이를 연결할 계층의 역할로 제시된 패러다임으로 RDB 모델을 OOP에 entity 형태로 투영시키는 방식
즉, 객체와 관계형 데이터베이스의 데이터를 자동을 매핑 해주는 것을 의미한다. (객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.)
👉🏻 종속성
프로그램 구조가 데이터 구조에 영향을 받는 것
👉🏻 RDB(Relational Database)
관계형 데이터 모델에 기초를 둔 데이터베이스로 데이터를 테이블 형태로 저장한다.
각 데이터 항목들은 행에 저장되고 항목의 속성은 열이라고 부른다.
☑️ 열(column) : 필드(field)라고도 부르며, 항목의 속성을 나타낸다. 필드마다 각각 정수, 텔스트 같은 데이터 유형을 정할 수 있다.
☑️ 행(row) : record라고도 부르며, 각 데이터 항목을 저장한다.
☑️ 스키마(schema) : 필드는 데이터 유형뿐 아니라 제약사항도 지정할 수 있는데, 이것을 스키마로고 부른다.(중복값을 해당 행에 저장할 수 없다거나, 반드시 값을 가져야한다는 조건)
👉🏻 프로시저
특정 작업을 위한 프로그램의 일부로 함수와 같은 의미를 지닌다.
클래스를 사용하는 객체 지향 프로그래밍과 테이블을 사용하는 관계형 데이터베이스간의 불일치는 다음과 같은 특성에서 일어난다.
경우에 따라서는 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다.(User라는 Table이 Person, Address라는 클래스로 구분해서 생성하는 경우)
RDBMS는 객체지향 프로그래밍 언어의 특징인 상속 개념이 없다.
RDBMS는 Primary key를 이용하여 동일성을 정의하지만 객체지향 언어는 객체 식별(a==b)과 객체 동일성(a is b)을 모두 지원한다.
객체지향 언어는 방향성이 있는 객체의 참고를 사용하여 연관성을 나타내지만 RDBMS는 방향성이 없는 외래키를 이용해서 나타낸다.(객체 지향 언어는 쌍방향 참조시 각 객체가 서로를 참조할 변수를 지녀야 한다.)
객체지향 언어의 경우 객체간의 연결을 통해서 이동하며 탐색 및 순회하지만, RDBMS에서는 일반적으로 SQL문을 최소화하고 쿼리를 최적화하여 Join을 통해 여러 entity를 로드하고 탐색 및 선택한다.
[Ref]
https://jeong-pro.tistory.com/95
https://jins-dev.tistory.com/entry/ORMObject-Relational-Mapping이란-ORM-패러다임의-개념
https://geonlee.tistory.com/207