[JS] 객체 지향 프로그래밍이란?

Jeongwon Seo·2021년 8월 31일
0

JS/Node

목록 보기
6/16
  1. 절차적 프로그래밍

이번 포스트에서는 프로그래밍의 방법론에 대하여 언급하고자 한다.
프로그래밍의 방법론에 대하여 언급하기에 앞서, 오뚜X 오동X면 라면을 끓여먹는 상황을 가정하자.
그러면 우선 아래와 같은 방식을 제시할 수 있을 것이다.

  1. 물 550ml를 냄비에 따른다.
  2. 가스불을 켠다.
  3. 건더기스프를 넣는다.
  4. 물이 끓으면 분말스프를 넣는다.
  5. 분말스프를 넣었으면, 면을 넣는다.
  6. 면이 살짝 풀어졌을 때, 계란을 깨서 넣는다.
  7. 면이 꼬들꼬들해졌으면 불을 끈다.(이때 계란은 반숙이 된다)
  8. 맛있게 먹는다.

위와 같이 프로그래밍을 한다면, 이런 방법론을 절차 지향 프로그래밍이라고 한다.
절차 지향 프로그래밍이란 논리를 위주로 하여 명시된 순서대로 알고리즘을 처리한 다음에 결과를 내는 프로그래밍을 뜻한다.
초기에 프로그래밍(예를들어 C언어, 포트란)을 할때는 거진 절차 지향 프로그래밍이었다고 한다.
절차 지향 프로그래밍은 위의 예시와 같이 순차적인 명령의 조합으로 이루어져있다.
하지만, 절차지향 프로그래밍의 단점은 코드의 가독성이 떨어진다는 것에 있다.
예를 들어서 위의 과정에서 꼬들면을 원하지 않는 사람도 있을 것이다.
계란을 완숙으로 먹는 사람도 있을 것이다.
이러한 상황에서 코드를 수정하려면 위에서 일일이 읽어가면서 찾아야 한다.
아 불편해라 그리고 사실 위의 코드는 10줄 이하라서 그나마 쉽게 찾은 것이다.
만약에 코드가 100줄, 1000줄 이상의 복잡한 코드라면 쉽게 유지보수가 불가능할 것이다.
실제로 "스파게티 코드"라는 말이 있다.
컴퓨터 프로그래밍의 흐름이 복잡해져서 이 모습이 마치 스파게티가 엉킨 모습이라고 해서 스파게티 코드라는 말이 있을 정도이다.

  1. 객체 지향 프로그래밍

이번에는 라면 끓이는 방법을 또다른 방식으로 접근하려고 한다.

class Ramyeon {
  constructor(, ,스프, 계란, 면익힘, ...etc) {
  this.=;
   ...
  }
  물끓이기() {
   물을 this.물 만큼 넣는다. 
  }
  스프넣기() {
    스프의 양은 this.스프 만큼 넣는다.
  }
    계란추가() {
      라면에 계란을 넣고 this.계란만큼 익힌다.
    }
      면익히기() {
   	라면을 this.면익힘 만큼 익힌다.     
      }
    기타 재료 추가() {
      라면에 this.etc의 재료를 추가로 넣는다.
    완성() {
      return 라면;
    }
  }

갑자기 무슨 라면 끓이는 방식을 설명하라고 했는데 해괴망측한 자바스크립트 코드가 보인다.
그런데 위 코드를 자세히 보면, 라면의 클래스에 재료와 기능이 같이 있다.
심지어 라면을 끓일 때 필요한 기능들이 아주 명시적으로 표현되어있는 것을 볼 수 있다.
절차적 프로그래밍과는 달리, 객체 지향 프로그래밍은 위와 같이 기능(객체) 단위로 나누고, 객체의 상호작용으로 서술하는 방식으로 짜는 방법론을 의미하는 것이다!
라면제조방법을 객체 지향으로 짜면, 면의 익힘정도나 계란의 익힘 정도를 제어하기가 쉬워진다.
키워드를 찾아서 그 코드만 수정하면 되기 때문이다.
이러한 편리성 덕택에 현대의 프로그래밍 언어(Java, C++, C#)는 객체 지향 프로그래밍으로 작성한다.
근데 왜 자바스크립트는 객체 지향 프로그래밍에 안들어가나? 자바스크립트는 완전한 의미의 객체 지향 프로그래밍이라고 하기는 Java, C++, C#과는 차이가 있다. 자바스크립트는 프로토타입 객체 지향 언어이다.

  1. 객체 지향 프로그래밍의 특징

    한편, 객체 지향 프로그래밍은 공통적인 네 가지 특성이 있다. 캡슐화, 추상화, 상속, 다형성이다.

  • 캡슐화와 추상화
    캡슐화와 추상화는 비슷하면서도 다른 개념이다. 캡슐화는 데이터와 기능을 한데 묶어서 안의 내용은 클로저에 의하여 은닉이 되며, 동작만 노출시키는 것이다. 한편, 추상화는 복잡한 과정은 안에 숨기고, 간단한 것만 단순화시키는 것을 의미한다. 캡슐화와 추상화는 비슷해보이지만 단지 관점이 다를 뿐이다. 캡슐화는 데이터의 은닉의 관점에서 본 특징이며, 추상화는 단순화의 관점에서 본 특징이라고 정리하면 된다.

  • 상속
    부모 클래스와 자식 클래스가 있으면, 부모 클래스의 특징을 자식 클래스가 그대로 받아서 쓸수 있다는 것이다.

  • 다형성

    다형성은 같은 코드지만, 안의 메소드에 따라서 여러 형태를 지닐 수 있다는 것이다. 위의 라면 코드를 예시를 들면, 똑같은 라면인데 안에 무슨 인자를 넣느냐에 따라서 다양한 라면이 완성될 것이다. 푹익힌 라면, 설익은 라면, 반숙라면, 완숙라면, 떡라면, 부대찌개라면 등. 아 배고프다 이것이 바로 다형성이다.

profile
피트는 구덩이라는 뜻이다 구덩이를 파다보면 좋은 것이 나오겠지 (아싸 벡스룬)

0개의 댓글