객체지향 프로그래밍
객체지향 프로그래밍이란?
프로그래밍을 명령어 또는 함수의 목록으로 보는 전통적인 명령형 프로그래밍(imperative prograaming)의 절차지향적 관점에서 벗어나
여러개의 독립적 단위, 즉 객체(obejct)의 집합으로 프로그래밍을 표현하려는 프로그래밍 패러다임
객체지향 프로그래밍은 실세계의 실체(사물이나 개념)을 인식하는 철학적 사고를 프로그래밍에 접목하려는 시도에서 시작합니다. 실체는 특징이나 성질을 나타내는 속성(attribute/property)을 가지고 있고, 이를 통해 실체를 인식하거나 구별할 수 있습니다.
예를 들어, 사람은 이름, 주소, 성별, 나이, 신장, 체중 등 다양한 속성을 갖고, "이름이 홍길동이고 나이는 30세인 사람"과 같이 속성을 구체적으로 표현하면 특정한 사람을 다른 사람과 구별하여 인식할 수 있습니다.
이러한 방식을 프로그래밍에 접목시켜보면, 우리가 구현하려는 프로그래밍에서 사람의 "이름"과 "나이"라는 속성에만 관심이 있다고 가정할 때(이처럼 다양한 속성 중 프로그램에 필요한 속성만 간추려 내어 표현하는 것을 추상화라고 합니다.), person이라는 객체는 다음과 같이 표현할 수 있습니다.
const person = {
name: '홍길동',
age: 30,
}
이처럼 속성을 통해 여러 개의 값을 하나의 단위로 구성한 복합적인 자료구조를 객체라고 합니다.
이번에는 원(circle)이라는 개념을 객체로 만들어보겠습니다. 원은 반지름이라는 속성이 있고, 반지름을 통해 원의 지름, 둘레, 넓이를 구할 수 있습니다. 이때
- 반지름은 원의 상태,
- 원의 지름, 둘레, 넓이를 구하는 것은 동작입니다.
const circle = {
radius: 5, // 반지름
// 지름
getDiameter() {
return 2 * this.radius;
}
// 둘레
getPerimeter() {
return 2 * Math.PI * this.radius;
}
// 넓이
getArea() {
return Math.PI * this.radius ** 2;
}
};
이처럼 객체지향 프로그래밍은
- 객체의 상태(state)를 나타내는 데이터와
- 상태 데이터를 조작할 수 있는 동작(behavior)
을 하나의 논리적인 단위로 묶어 생각합니다.
즉, 객체는 상태 데이터와 동작을 하나의 논리적인 단위로 묶은 복합적인 자료구조라고 할 수 있습니다. 이때,
- 객체의 상태 데이터를 프로퍼티(property),
- 동작을 메서드(method)
라고 부릅니다.