객체 지향 프로그래밍이란?
객체 지향 프로그래밍은 컴퓨터 프로그램을 객체의 모임으로 간주하는 것이다.
절차 지향 프로그래밍이란 컴퓨터 프로그램을 명령어의 목록으로 보는 것이다. 대표적인 절차 지향 언어는 C언어이다.
객체 지향 언어의 장점
- 절차 지향 언어에 비해 코드의 재사용이 비교적 용이
- 쉬운 코딩
- 유지보수 및 업그레이드 원활
- 쉬운 디버깅
- 분석과 설계의 전환이 쉬움
- 대형 프로젝트에 적합
객체
실제 세계에는 다양한 객체들이 있다.
학생, 강의실처럼 눈에 보이는 객체(물리적으로 존재)와 강좌, 수강과 같은 추상적인 개념의 객체(논리적으로 존재)도 존재한다.
실제 세계는 객체로 구성돼있지만 컴퓨터 상의 프로그램은 바이너리로 구성돼있다.
프로그래밍 언어가 중간에서 이를 도와주는 것이다.
프로그래밍 언어는 절차 지향 언어에서 객체 지향 언어 순으로 점차 발전해왔다.
절차 지향 프로그래밍은 개발자가 컴퓨터가 인지하는 방식으로 프로그램을 설계하고 코딩했지만, 이제는 사람의 인지 방식과 동일하게 설계 및 코딩할 수 있는 객체 지향 프로그래밍이 가능해졌다.
사람이 인지하는 실제 세계가 객체로 이루어진 것과 같이, 설계 및 코딩도 객체를 기반으로 하므로 실제 세계와 컴퓨터 세계의 간격이 이전보다 줄어들었다.
객체에는 상태, 동작, 동일성이 있다.
상태는 객체의 속성을 의미하고, 동작은 메소드를 의미한다.
객체를 다른 객체와 구분하는 것이 가능하다면 이를 식별 가능하다고 말하며, 해당 객체는 동일성을 가진다고 표현한다.
사람은 이름, 나이, 주민번호라는 상태를 가지고 있으며 말하다, 웃다, 자다 등의 동작을 가지고 있다.
또 같은 사람이라고 하더라도 주민번호로 식별 가능하다.
프로그램은 객체의 집합이므로, 특정 목적을 달성하려면 객체 간 협업이 이루어져야 한다.
협업은 객체 간 상호작용을 통해 이뤄진다.
객체 간 상호작용은 메시지 전달을 통해 달성되고, 메서드 호출에 의해 메시지 전달이 이뤄진다.
캡슐화(Encapsulation)
캡슐화는 객체의 속성과 행위를 하나로 묶고, 실제 구현한 내용의 일부를 은닉하는(외부에 감추는) 것을 말한다.
사용자는 객체의 복잡한 내부 동작은 모르지만, 메소드나 인터페이스만 알아도 객체를 사용할 수 있다.
정보은닉이란 상태를 유지하기 위해 속성을 데이터의 형태로 저장해야 하는데, 이를 외부에 노출하지 않는 것을 말한다.
정보은닉은 캡슐화의 하위 성질이다.