<aside> 💡 객체 지향 프로그래밍 입문 시리즈

인프런의 객채 지향 프로그래밍 입문을 기반으로 작성한 게시물 입니다. (본 시리즈의 모든 예시는 JavaScript(TypeScript)로 변환하여 작성하였습니다.)

객체 지향 프로그래밍 입문_1

객체 지향 프로그래밍 입문_2

객체 지향 프로그래밍 입문_3

객체 지향 프로그래밍 입문_4

객체 지향 프로그래밍 입문_5

객체 지향 프로그래밍 입문_6

객체 지향 프로그래밍 입문_7

</aside>

"객체란 무엇인가? "

1. 객체 지향 vs 절차 지향

절차 지향 프로그래밍_객체 지향 프로그래밍 입문(최범균)

절차 지향 프로그래밍_객체 지향 프로그래밍 입문(최범균)

위 그림과 같이 절차 지향 프로그래밍은 데이터와 프로시저가 따로 구성되어 맞물려 있다.

이 때문에 코드가 수정되거나 새로운 요구사항이 추가 될 때 복잡성을 보인다.

예제로 보면 이러하다

기존의 코드가 다음과 같다고 가정하자

// 인증 API

const account: Account = await this.accountRepository.findOne(id);
if(account.getState() === 'DELETED') {
...
}

// 암호 변경 API
const account: Account = await this.accountRepository.findOne(id);
if(account.getState() === 'DELETED') {
...
}

차후 인증을 하거나 암호를 변경할 시 추가로 Block 카운트가 0보다 큰지 검증을 하는 요구사항이 발생했다.

// 인증 API

const account: Account = await this.accountRepository.findOne(id);
if(account.getState() === 'DELETED' || account.getBlockCount() > 0) {
...
}

// 암호 변경 API
const account: Account = await this.accountRepository.findOne(id);
if(account.getState() === 'DELETED' || account.getBlockCount() > 0) {
...
}

이후 요구사항이 계속 추가 될 경우 코드는 더욱 복잡하고 길어지게 될 것이다.

반면 객체 지향에서는 데이터와 프로시저가 객체라는 단위로 묶여 있다.

객체 지향 프로그래밍 _ 객체 지향 프로그래밍 입문(최범균)

객체 지향 프로그래밍 _ 객체 지향 프로그래밍 입문(최범균)

특정 객체가 가지고 있는 데이터는 그 객체의 프로시저만 접근할 수 있다. 즉, 객체와 객체는 서로 프로시저를 호출하는 방식으로 연결이 된다.