우리가 실생활에서 쓰는 모든 것을 객체라 하며 프로그램 구현에 필요한 객체를 파악하고 각가의 객체들의 역할이 무엇인지 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말한다.
-> 즉 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그램밍의 패러다임
객체 지향 프로그램은 객체와 객체간의 연결로 되어있으며 각각의 객체 안에 자료구조와 알고리즘이 들어있다.
절차지향
프로그램을 기능중심으로 바라보는 방식으로 “ 무엇을 어떤 절차로 할 것인가?” 가 핵심이다
-> 어떤 기능을 어떤 순서로 처리하는가에 초점을 맞춘다
객체 지향
기능이 아닌 객체가 중심이 되며 “누가 어떤 일을 할 것인가” 가 핵심
-> 객체를 도출하고 각각의 역할을 정의해 나가는 것에 초점
대형 프로그래밍인 경우 많은 기능을 수행하기 때문에 객체 지향이 적합
-> 객체 역할이 많아도, 많은 역할을 객체로 묶을 수 있기 때문
소형 프로그램은 작은 기능을 수반하기 때문에 절차지향이 적합
-> 작은 기능을 객체로 나눌 경우 복잡해 질수 있기 때문
객체지향 프로그래밍 특징
1. 추상화
객체지향 프로그래밍은 다형성, 객체, 캡슐화 등 소프트웨어의 재사용을 지향
이미 만들어진 클래스를 상속받거나 객체를 가져다가 사용하거나 부분 수정을 통해 소프트웨어를 작성하는 부담을 대폭 줄일 수 있다.
객체지향 프로그래밍은 캡슐화와 격리구조 때문에 절차지향 프로그래밍과 비교하면 실행 속도가 느리다
모든것을 객체로 생각하기 때문에 추가적인 포인터 크기의 메모리와 연산에 대한 비용이 발생
http://www.incodom.kr/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5
https://www.codestates.com/blog/content/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8A%B9%EC%A7%95