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

Jiwoo Joy Kim (zuzokim)·2021년 4월 9일
0

OOP

목록 보기
1/2

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

이미 수많은 블로그, 서적, 유튜브에 OOP에 대한 설명과 견해들이 넘쳐나는 것 같다. 그래도 OOP란 무엇인지, 어떤 특징이있는지 내 나름대로 정리를 해보는 건 중요할 것 같다.

OOP(객체 지향 프로그래밍)은 컴퓨터 프로그래밍의 패러다임 중 하나다. 즉, '프로그래밍을 어떻게 바라보고 다룰 것인가'에 대한 관점이자 철학인 셈이다. 컴퓨터 프로그램을 명령어의 목록으로 보는 전통적인 시각(절차적/명령형 프로그래밍)에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다.

OOP가 등장하면서 변수와 함수를 순차적으로 작동시키는 것을 넘어서, 속성(데이터)와 메소드(기능)을 객체(Object)로 묶어서 처리할 수 있게 되었다.

클래스(Class) 와 인스턴스(Instance)

OOP를 하기 위해서는 먼저 객체를 만들 수 있는 거푸집같은 원형(original form)이 필요하고, 이를 클래스(Class)라고 부른다. 하나의 클래스에 세부사항(속성, 메소드)을 넣어주면 공통된 고유 속성을 공유하는 객체들을 만들 수 있다.

이렇게 클래스에 세부사항을 넣어주는 역할을 하는 것이 생성자(constructor)이고, 클래스는 생성자 함수를 포함하고 있다. 생성자 함수에 인자로 속성을 넣을 수 있다.

그리고 클래스를 통해 만들어진 객체를 인스턴스(Instance)라고 부른다.

클래스와 생성자를 통해 만들어진 객체는 클래스의 속성과 메소드를 공유하게 된다. 이로써 공통된 속성을 공유하는 객체들의 속성을 매번 따로따로 재구현하는 비효율성을 줄일 수 있게 된다.

OOP의 4가지 컨셉과 각각의 장점

  • 캡슐화(Encapsulation)
  • 상속(Inheritance)
  • 추상화(Abstraction)
  • 다형성(Polymorphism)
  • 캡슐화(Encapsulation)
    -테이터와 기능을 하나의 (객체)단위로 묶는 것.
    -은닉화의 특징을 가진다. 내부의 디테일한 구현은 숨기고, 동작만 노출시킨다는 뜻이다. 속성의 직접적인 접근을 막아 내부의 중요한 데이터를 보존할 수 있다.
    -느슨한 결합(Loose Coupling)에 유리하다. 절차적 코드는 말그대로 위에서부터 아래로의 실행순서가 중요해서 데이터의 형태를 수정하면 코드의 흐름에 큰 영향을 미친다. 그에 반해 캡슐화된 코드는 노출된 메소드를 사용하는 코드의 전체적인 흐름에는 영향을 주지 않고, 객체 내부의 메소드 구현만을 수정할 수 있다. 언제든 코드 구현을 수정하고 코드를 유지보수할 수 있다.

  • 추상화(Abstraction)
    -내부에 구현한 속성과 메소드를 단순하게 이름붙이는 것.
    -클래스를 사용할 때 필요하지 않은 속성과 메소드들을 전부 노출시키지 않고 간단한 인터페이스(Simpler Interface)로 만드는 것을 뜻한다. 이런 추상화를 통해 예기치못한 사용상의 변화를 최소화할 수 있다.

  • 상속(Inheritance)
    -부모/기본클래스(base class)의 특징을 자식/파생클래스(derive class)가 물려받는 것.
    -불필요하게 중복되는 코드를 줄여 재사용성을 높인다.

  • 다형성(Polymorphism)
    -하나의 클래스나 메소드가 다양한 방식으로 동작이 가능한 것.
    -상속받은 속성과 메소드를 다양하게 확장하거나 변경하는 것.
    -즉, 가장 본질적인 기능이나 개념은 부모 클래스가 가지고 있되, 인스턴스의 특성에 맞게 조금씩 다르게 작동하게끔 하는 것을 말한다.

OOP의 의미

사람이 세계를 바라보는 관점을 적용한 프로그래밍 방법론

사람은 항상 1 - 2 - 3 - 4 - ... 순으로 생각하거나 행동하지는 않는다. 사람은 세계를 다양한 층위에서 이해하고, 복합적인 사고를 바탕으로 무한한 가능성을 상상한다. 만약 컴퓨터처럼 한 번에 하나의 생각만 하고, 정해진 순서대로만 행동할 수 밖에 없었다면 일상생활조차 하지 못했을 것이다.

결국 컴퓨터가 작동하는 방식을 사람이 생각하고 행동하는 방식과 닮게 만들고자하는 시도로부터 OOP, 객체 지향 프로그래밍 방법론이 시작되었다고 볼 수 있을 것이다.

profile
- I make something! ✍🏽👩🏻‍💻🎬🎨💖🪑🔨🔜

0개의 댓글