프로그램 설계 방법론이자 개념의 일종이다.
프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법
객체 : 현실 세계에 존재하는 하나 하나의 독립된 무언가
코드의 재사용성 증가
상속을 통하여 프로그래밍시 코드의 재사용성을 높일 수 있다.
자연적인 모델링
우리 일상생활 모습의 구조가 객체에 자연스럽게 녹아있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현할 수 있다.
유지보수의 우수성
프로그램 수정, 기능 추가를 하더라도 캡슐화를 통해 주변 영향이 적기 때문에 유지보수가 쉽다.
대형 프로젝트에 적합
클래스 단위로 모듈화시켜서 개발할 수 있으므로 대형 프로젝트를 개발할 때 업무 분담이 쉽다.
개발 속도가 느리다.
객체가 처리하려는 것에 대한 정확한 이해가 필요하기에 설계부터 많은 시간이 소모된다.
코드의 난이도 상승
상속이라는 개념은 뛰어나지만 복잡한 특성을 지니게 된다. 상속 덕분에 자료분석, 개발시간 단축, 정확한 코딩을 보증하지만 코드의 난이도가 상승한다. 상속이 복잡하게 얽혀있으면 소스 분석이 어려워진다. (라자냐 코드)
처리 속도가 느리다.
개념을 기준으로 나누다 보니 반복 연산이 컴퓨터 친화적이지 않고, 배열 자료구조를 적용하기 힘들어진다.
객체를 하나씩 따로 캡슐화 시키고 상속시 부모만 같으면 자식의 종류를 신경쓰지 않다 보니 각자의 메모리 크기가 달라지며, 고정된 연속 메모리에 담을 수 가 없게 된다.
메모리 할당을 배열로 하지 못하게 되므로 따로따로 생성하게 되고, 생성과 파괴가 반복되면 메모리 단편화라는 문제가 생긴다. 가비지 컬렉션 기능이 만들어진 이유 중 하나.
연속 메모리를 쓰기 힘들어 진다는 것은 캐시의 효율적 사용에 큰 문제가 생긴다는 뜻과 같다.
이를 해결하는 코딩 패러다임으로 DOP(Data Oriented Programming)가 있고, 구현방법은 메모리 풀
실제 메모리에 할당된 것
**으로 실제 프로그램에서 사용되는 데이터객체 지향 프로그래밍의 가장 큰 특징은 클래스를 이용해 연관 있는 처리 부분(함수)과 데이터 부분(변수)을 하나의 객체로 묶어 생성해 사용한다는 점이다.
크게 캡슐화, 추상화, 상속, 다형성 네가지 특성이 있다.