JavaScript(4) - 객체 지향의 의미

용스·2022년 10월 10일
0

JavaScript

목록 보기
4/5

class를 말하면서 객체 지향이라는 단어를 많이 듣게 된다.

객체 지향이 무엇이고, class가 무엇인지 먼저 살펴보자

1. 객체 지향의 등장 배경

순차적 프로그래밍

원래 초장기의 프로그래밍 언어는 순차적 프로그래밍으로 이루어졌다.

순차적 프로그래밍이란 말 그대로 프로그램이 순서대로 실행된다는 이야기이다.

하지만 프로그램의 규모가 커질수록, 특정 위치의 코드를 반복해서 실행할 수 있도록 goto 구문( 말 그대로 이동하다라는 의미 )을 사용하다보니 순차적으로 프로그래밍을 이해하기 힘들고 코드를 제어하기 힘들어졌다.

// 순차적 프로그래밍
let hp = 100;
let mp = 100;

gameloop:
if( key = 'magic' ){
  goto magic
}

goto gameloop

magic:
mp -= 10;

goto gameloop

절차적 프로그래밍

이렇게 goto로 프로그래밍을 하다보니 이해하기가 힘들다. 반복되는 코드는 묶어서 한번에 관리하고 해당 코드를 호출하고 나면 다시 돌아오는 방식을 통해 개발을 진행하게 된다. 이 것이 바로 함수를 활용한 방식이다.

하지만 이것도 프로그램의 규모가 커지면 커질수록 변수에 같은 이름을 써서 관리할 수 없게 되어 변수명 관리가 어려워진다는 문제가 발생한다.

// 절차적 프로그래밍
const magician_name = "Max";
let magician_hp = 300;
let magician_mp = 300;

function magician_useSkill(){
  magician_mp -= 50;
}

magician_useSkill();
// magician을 사용하는 유저가 많아지면 
//magician1_name, magician2_name ... 변수가 지저분해지고 관리도 힘들다.

절차적 프로그래밍 + 구조체

이런 식의 소제목이 맞을지 모르겠지만 연관있는 데이터들을 하나로 묶어 관리할 수 있도록 구조체의 개념이 등장하게 된다.

C언어에서 자주 사용한다.

const magician = {
  name : "Max",
  hp : 300,
  mp : 300
}

function useSkill( magician ){
  magician.mp -= 50;
}

useSkill( magician );
// 아까보다 변수 길이가 짧아지고 좀더 명확하게 어떤 변수인지 알기 쉬워졌다.

객체 지향 프로그래밍

데이터를 구조체로 관리하다보니 특정 구조체만 가지고 동작하는 함수들이 있다는 것을 알게 되고 그럼 구조체에 데이터만 관리하지 말고 함수도 한꺼번에 넣어서 관리하자는 개념이 등장하게 되었다.

이것이 바로 객체지향의 등장이다.

class Magician {
  name = "Max",
  hp = 300,
  mp = 300
  
  useSkill() {...};
}
  
let character = new Magician();
character.useSkill();

이렇게 하나의 모듈로 관리되면서 규모가 큰 프로젝트를 진행하더라도 설계된 class를 잘 조립하면 편리하게 프로그래밍이 가능하게 되고 그로 인해서 Class가 탄생하게 된다.

구조체 + 함수 = Class
Class를 통해 만들어진 것 = Object

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

1. 캡슐화

객체 내의 데이터를 사용자가 함부로 조작할 수 없도록 할 수 있다.

2. 상속

객체를 받아오되 전체 말고 일부분만 재사용하자.

3. 추상화

객체의 공용된 부분을 모아서 상위 개념으로 새롭게 이름을 붙이자

4. 다향성

참고 자료 - 자바스크립트에서 객체지향을 하는 게 맞나요?

profile
일단 해보자

0개의 댓글