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

홍다희·2022년 7월 22일
0

객체 지향 프로그래밍이 등장하기 전엔 어떤 게 있었을까?
바로 절차 지향 프로그래밍이 있었다.
우리가 잘 알고 있는 C언어도 절차적 언어다. 순차적인 명령의 조합이라고 생각하면 된다.

그러나, 객체 지향 프로그래밍이 등장하면서…
별개의 변수와 함수로 순차적으로 작동하는 것을 넘어서서 데이터와 기능이 별개로 취급되지 않고, 한 번에 묶여서 처리할 수 있게 된 것이다.
이는 Java, C++, C# 등의 현대 언어에 적용됐는데 자바스크립트는 객체 지향 언어는 아니다! 그렇지만 객체 지향 패턴으로 작성이 가능한 언어다.

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

OOP는 프로그램 설계 철학 중 하나로, 객체로 그룹화된다. 한번 만들고 나면 메모리상에서 반환되기 전까진 객체 내의 모든 것이 유지된다.
데이터와 기능이 함께 있다는 특징이 있는데 이게 바로 앞서 배운 메서드(기능)와 속성(데이터)이다.

OOP 기본 개념

애플리케이션을 만들 때 좋은 설계를 하기 위해서 객체지향을 이해하고 응용하는 게 중요하다.

네 가지의 기본 개념 (특징 중 진한 글씨는 장점)
1. Encapsulation (캡슐화)

  • 데이터와 기능을 느슨하게 결합(하나의 객체 안에 넣어서 묶음)
  • 느슨한 결합이란? 코드 실행 순서에 따라 코드를 작성하는 게 아닌 코드가 상징하는 실제 모습과 닮게 코드를 모아서 결합하는 것
  • “은닉화”(내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것) 특징을 가짐
  • 코드가 복잡하지 않게 하고, 재사용성 높임

2. Inheritance (상속)

  • 부모 클래스 특징을 자식 클래스가 물려받음
  • 다른 말로는 “기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속받는다”고도 함.
  • 불필요한 코드를 줄여 재사용성 높임

3. Abstraction (추상화)

  • 내부 구현은 복잡하지만, 노출되는 부분은 단순하게
  • 게임기의 내부는 복잡하지만 외부는 단순하게 버튼을 누르면 되는 것과 같음
  • 캡슐화는 코드나 데이터의 은닉이 중요, 추상화는 클래스를 사용하는 사람한테 필요없는 메서드를 노출하지 않고 단순한 이름으로 정의한다는 것이 차이.
  • 클래스 정의할 때, 메서드와 속성만 정의한 것이 ‘인터페이스’.
  • 코드가 복잡하지 않게 하고, 단순화된 사용으로 변화에 대한 영향 최소화

4. Polymorphism (다형성)

  • 많은 형태, 다양한 형태라는 뜻.
  • 같은 이름의 메서도여도 조금씩 다르게 작동
  • 다형성을 제공해야 종류별로 클래스를 또 만들지 않을 수 있음
  • 동일한 메서드에 대해 if, else if 등의 조건문 대신에 객체 특성에 맞게 달리 작성할 수 있음

따라서 객체 지향 프로그래밍 패러다임은 사람이 세계를 보고 이해하는 방법과 매우 흡사하다. 하나의 요소를 객체 단위로 구분시켜서 코드를 작성하는 게 중요하다!

profile
프론트엔드 개발자

0개의 댓글