ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 객체 지향 프로그래밍(Object-Oriented Programming, OOP)
    Topic/JavaScript 2022. 6. 8. 21:25
    반응형
     

     

    객체 지향 프로그래밍 (Object-Oriented Programming: OOP)

    객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 속성(properties)과 메소드(method)를 하나의 "객체"(class)에 묶어서 청사진을 만들고, 그 청사진을 바탕으로 인스턴스 객체(instance object)를 만드는 것을 말합니다.

    OOP에서 말하는 객체는 자바스크립트에 내장 객체(object)와 다르며, 클래스(class)라고 부른다.

    • < class와 instane object의 예시 >

    OOP는 사람이 세계를 보고 이해하는 방법을 흉내낸 방법론

    OOP는 사람이 세계를 보고 이해하는 방법과 매우 흡사하다.
    클래스(class)와 오브젝트 인스턴스를 실생활과 연관지어 예를 들면 다음과 같다.

    class object instance
    사람 학생, 선생님
    과일 사과, 복숭아
    도형 삼각형, 사각형, 마름모



    장점

    절차 지향 프로그맹과 다르게 데이터와 기능을 한 곳에 묶어서 처리하기 때문에 강한 응집력(Strong Cohesion)을 갖고
    클래스 간에 독립적인 디자인을 함으로써 약한 결합력(Weak Coupling)을 가진다는 장점을 가지고 있습니다.



     





    절차적 프로그래밍과 비교 (Procedural Programming)

    절차적 프로그래밍

    프로시저 호출의 개념을 바탕으로 하고 있는 프로그래밍 패러다임

    절차적 프로그램밍과의 비교

    절차적 프로그래밍에서 프로시저와 프로시저의 입력과 출력을 다루는 대신에 객체지향 프로그램들은 객체(classes)들을 다룹니다. 연산은 객체에게 내부 프로시저 중에 하나(혹은 상속받은 것)를 수행하라고 요청하는 것으로 이루어지며 이런 방법으로 내부상태를 다룹니다.

    • 객체 지향 프로그래밍과 절차적 프로그래밍






    객체 지향 프로그래밍 특징

    객체 지향 프로그래밍의 기본 특징은 다음과 같습니다.

    1. 캡슐화 (Encapsulation)
    2. 추상화 (Abstraction)
    3. 다형성 (Polymorphism)
    4. 상속 (Inheritance)



    1. 캡슐화 (Encapsulation)

    • 데이터와 기능을 하나의 단위로 묶는 것을 말합니다.
    • 데이터를 은닉(Hiding)을 할 수 있습니다.
      - 은닉(Hiding) : 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것
    • 하나의 단위로 묶음으로써 (클래스 간의 독립적인 디자인을 함으로써) 약한 결합력(Weak Coupling)을 가집니다.
    • 복잡성 줄이고 재사용성을 높입니다.


    2. 추상화 (Abstraction)

    • 복잡한 내부 구현을 숨기고, 노출되는 부분(interface)은 단순하게 만든다는 개념입니다.
      예를 들면, 전화기 내부는 여려개의 회선(?)등이 있는 등의 복잡한 내부구조를 가질 테지만 실제로 사용자가 사용할 때는 숫자버튼 등의 인터페이스(interface)만을 이용하여 전화기를 사용할 수 있습니다.
    • 인터페이스: 메소드와 속성만을 정의한 것. 추상화의 본질
    • 복잡성을 줄이고, 변화에 대한 영향을 줄입니다.


    3. 다형성 (Polymorphism)

    • Polymorphism이라는 단어의 poly는 "많은", 그리고 morph는 "형태"라는 뜻을 가지고 있습니다. 즉, 다형성이란 다양한 형태를 가질 수 있다는 것을 뜻합니다.
    • 예를 들어, "도형"이라는 클래스와 "사각형", "삼각형", "원" 인스턴스 객체가 있다고 가정 해보겠습니다. 클래스 "도형"에 너비를 구하는 메소드 getArea(){ return this.width * this.height }이라고 정의 되었다면 삼각형과 원의 getArea 메소드는 각각 달라야 할 것 입니다. (삼각형 너비를 구하는 공식은 width*height / 2 이고, 원 너비를 구하는 공식은 원의 반지름 X 원의 반지름 X 원주율 이기 때문입니다.) 이렇게 동일한 메소드라고 하더라도 개별 인스턴스에 따라 다양한 형태를 가질 수 있는 것을 다형성이라고 합니다.
    • switch 문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해집니다.



    4. 상속 (Inheritance)

    • 기본 클래스(base class)의 특징을 파생 클래스(derive class)가 상속 받는 것을 말합니다.
    • 쉽게 말하면 부모 클래스의 속성을 자식 클래가 물려 받는 것이라고 할 수 있습니다.
      예를 들면, 도형이라는 클래스가 있을 때 도형의 속성(width가 있다. width와 height로 너비를 구할 수 있다. 등)의 속성을 사각형이 해당 속성을 물려 받을 수 있는 것을 상속이라고 말합니다.
    • 반복되는 코드를 없도록 합니다.








    객체 지향 자바스크립트

    자바스크립트에서 class 키워드와 new 키워드를 사용하여 클래스와 인스턴스를 간단히 만들어 봅시다.

    우선 클래스(class)를 만들어 봅시다. 위에서 나온 클래스 Animal을 예를 들어 클래스 객체를 만들어 봅시다. 자바스크립트에서는 class를 만들 때 class(ES6문법) 라는 키워드를 사용합니다. 클래스명은 명사로 하고, 첫글자를 대문자로 하는 것이 원칙입니다.

    다음으로 인스턴스 객체(instance)를 만들어 봅시다. new 키워드를 사용하여 인스턴스를 만들고, 클래스 객체 함수를 호출하면서 인자로 속성을 class constructor에 저장된 순서대로 전달합니다.

    자바스크립트의 class는 객체(object) 형식으로 만들어졌으므로 객체를 호출할 때와 같은 방식으로 호출하여 결과값을 얻습니다.

    반응형
Designed by LEO.