• 2021. 9. 22.

    by. 문익점

    반응형

    Object Oriented Programming의 약자로 객체의 관점에서 프로그래밍 하는 것으로 프로그래밍 방식중에 하나입니다. 여기서의 객체는 우리 세상에서 실제로 볼 수 있는 존재하는 물체라고 정의 할 수 있습니다. 인간, 나무, 건물 등 어떠한 특성과 행동을 정의해 놓은 것이 객체입니다. 이 객체의 핵심은 이 "객체가 어느 기능을 제공하냐"입니다.

    ex)

    사람 객체

    • 특성: 이름, 나이, 키...
    • 행동: 걷는다(), 잔다(), 먹는다()

    볼륨 제어기

    • 특성: 볼륨 크기
    • 행동: 소리키우기(), 소리줄이기()

    *절차지향 프로그래밍 는 완전히 다른 방식입니다. 절차지향은 전체적인 그림을 보기 힘듭니다. 또한 하나의 함수를 수정 했을 시에 발생하는 side effect를 감수하기가 힘듭니다. 이러한 단점들을 보완하기 위한 방법으로 객체지향이 탄생하였고 이를 더 선호하게 되었습니다.    *절차지향 프로그래밍: 정의된 순서되로 절차적으로 함수가 하나씩 호출하는 방식

    objects끼리 상호작용

    객체지향 프로그래밍은 이러한 객체들끼리 서로 상호작용, 소통하도록 디자인하고 코딩해나가는 방식입니다. 서로 관련있는 데이터와 함수객체로 정의하게 됩니다.

    이는 어떠한 데이터를 수정해야되는 상황이 되었을 때 데이터와 관련된 객체만 수정해주면 해결 됩니다. 이는 유지보수를 하는 것에 있어서 유리한 이점을 갖게 됩니다. 또한 이는 다른 사람과 프로젝트를 진행 할 시에도 이점을 갖게 됩니다. 내가 짠 코드를 다른 사람이 수정 하는 상황이 되었을 때에도 다른 사람들이 전체적인 코드를 모두 보지 않고 특정 객체만 수정해주면 됩니다. 이는 전체적인 프로젝트의 생산성이 올라가게 됩니다.

    결국 oop의 규칙을 잘 따른 프로젝트는 높은 생산성, 높은 유지보수성, 높은 퀄리티의 코드를 갖게 됩니다.

    Class와 Instance

    객체지향 프로그래밍을 이제 코드 관점에서 보겠습니다. 이 프로그래밍 방식은 객체들 끼리 상호작용하고 소통하는 방식이라고 했습니다. 프로그래밍을 할 때에 이러한 객체를 생성 할 수 있도록 그 틀을 정의하는 방법이 있습니다. 바로 Class입니다. class는 객체를 생성하기 위한 틀 이라고 할 수 있습니다. 데이터가 들어 있지 않는 모양새만 정의하는 template이라고 생각하면 편합니다.

    객체는 기능을 제공한다고 했습니다. 이 기능은 객체 내부에서 메소드로 정의하면 됩니다.

    // typescript
    class Person {
      name: string;
      age: number;
    
      constructor(name: string, age: number) {
        this.age = age;
        this.name = name;
      }
    
      eat() { ... }
      sleep() { ... }
      walk() { ... }
    }

    위의 class를 이용하여 데이터를 넣게 되면 만들어지는 것이 바로 instance입니다.

    let choe = new Person("choe", 25);
    console.log(choe.age);
    choe.eat()

    이제 실제로 데이터를 넣은 instance를 만들었습니다. 여기서 특정 객체에의 기능을 사용하는 방법입니다. 당연히 메소드를 호출하면 됩니다. eat() 이라는 기능을 사용하게 되는것입니다. 객체가 메소드를 호출하거나 객체와 객체간의 상호작용이 일어날 때에 메세지를 주고 받았다라고 표현합니다.

    이외에도 객체지향의 특징인 4가지, 추상화, 상속, 캡슐화, 다형성등이 있습니다. 또한 이러한 프로그래밍 방식을 따르면서 지켜야 할 원칙도 존재합니다. 나머지 내용들도 정리해서 올리도록 하겠습니다.

    반응형

    '코딩' 카테고리의 다른 글

    OOP - 다형성  (0) 2021.09.28
    OOP - 캡슐화  (0) 2021.09.27
    자바스크립트 Prototype  (0) 2021.09.20
    자바스크립트의 기본적인 런타임 환경  (0) 2021.09.19
    실행 컨텍스트 with Closure - 3  (0) 2021.09.16