객체 지향 프로그래밍

박한솔·2020년 12월 9일
0

객체 지향 프로그래밍은?

과거에는 절차 지향 프로그래밍을 통해 프로그램을 만들었습니다. 예를 들어

자판기에 돈을 투입
=> 돈이 상품 가격보다 큰가?

=> yes : 상품을 뽑고 잔돈을 출력
   no  : 잔돈 부족을 출력하고 돈을 돌려준다
   
 이후에
 자판기의 기능, 상품 설정...  

이런 식으로 절차 지향 프로그램은 절차를 중심으로 프로그램을 설정하고 이후에 기능을 구현해냅니다. 하지만 점차 문제가 생기게 됩니다. 프로그램을 만들기는 무척 쉽지만 일명 스파게티 코드 문제가 생격버리게 된 것입니다. 즉, 어디서 꼬이게 되면 디버깅 과정이 매우 어려워 처리하기 곤란하게 되버리는거죠.
그래서 나오게 된 프로그래밍 기법이 바로 객체 지향 프로그래밍입니다.

자판기 정의, 상품 정의...

돈이 투입되었는가?

=>yes : 돈을 검사
	=>돈이 상품의 가격보다 큰가?
    	=> yes: 상품을 출력, 잔돈을 반환
        => no : 잔돈 부족을 출력하고 돈을 돌려줌

객체 지향 프로그램은 객체(자판기, 상품)와 함수(돈 투입, 돈 검사, 잔돈 반환)를 중심으로 객체의 기능을 이용해서 프로그램을 만들어냅니다. 무척 복잡하지만 잘 만든다면 디버깅이 절차 지향에 비해 용이해져서 현대에 주요 기법으로 자리잡게 되었습니다.

객체 지향 프로그램은 3가지 특성을 가지고 있습니다.

1. 캡슐화

//linked list Node 생성
class Node{
  constructor(value){
    this.value = value;
    this.next = null
  }
}

변수와 함수를 이용하여 생성자(new Node())를 통해 새로운 객체에 쉽고 간편하게 접근할 수 있게 하는 기능입니다.

2. 상속(inheritance)

우리는 보통 String값을 정의할 때 새로운 기능을 추가하지 않았습니다. 하지만 길이를 나타내는 내장함수는 쓸 수 있습니다.

let greeting = 'Hello'
greeting.length //= 5

이 기능을 쓸 수 있는 것은 이미 String이라는 부모로부터 prototype 기능을 상속받았기 때문입니다!(slice, replace, toUppercase 등등..)

이렇게 prototype을 통해 기능을 추가하고 이를 다음에 생성될 아들들에게 기능을 물려줄 수 있습니다.

let Human = function(name){
    this.name = name
  }
}
Human.prototype.sleep = function(){
  console.log('일어나세요 젊은이여')
}

let chulsu = new Human('철수')
chulsu.sleep //='일어나세요 젊은이여'

3. 다형성
자바스크립트에서는 상위 개체의 속성을 각자의 속성에 맞게 쓸 수 있는 기능을 말합니다.

HTML은 textbox, div, li 등 많은 속성을 가지고 있지만 각기 다른 기능을 하게끔 만들어져 있습니다. 마치 같은 기능이지만 서로의 속성에서는 그 속성에 맞도록 하는 기능이 바로 다형성이죠.

만약 다형성이 없다면 각각의 기능을 js에서 전부 정의해야 하니 시간이 매우매우매우 오래 걸릴 것입니다..

profile
치열하게, 하지만 즐겁게

0개의 댓글