(JS) 객체 지향 프로그래밍

woong·2022년 9월 21일
0
post-thumbnail

절차 지향 프로그래밍 (Procedure Programming)

  • 초기의 프로그래밍 언어는 절차 지향 프로그래밍이었다. (C, 포트란 등)
  • 절차 지향 프로그래밍은 기본적으로 순차적(절차적)인 프로그래밍을 하여, 별개의 변수와 함수로 순차적으로 작동한다.
  • 직관적이지 않고 유지보수가 어려우며, 디버깅이 힘들다.

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

절차 지향 언어의 단점을 보완하고자, 객체 지향 프로그래밍이라는 패러다임이 등장했다.

  • 데이터와 기능을 별개로 관리하지 않고 한번에 묶어서 처리한다.
  • 현대의 언어들은 대부분 객체 지향의 특징을 갖고 있다. (대표적으로 Java, C++, C# 등)
  • 자바스크립트는 엄밀히 객체 지향 언어는 아니지만, 객체 지향적으로 코드를 짤 수 있다.

*객체 지향 언어이면 무조건 객체 지향적 프로그래밍을 해야 하는 것은 아님.

클래스와 인스턴스

  • 클래스는 세부사항(속성)이 들어가지 않은 상태의 청사진이다.
  • 생성자를 사용하여 클래스에 세부사항을 넣어 만드는 객체를 인스턴스 객체라고 한다. (줄여서 인스턴스)

객체 지향 언어 (OOP) 의 특징


1. 캡슐화 Encapsulation
  • 데이터와 기능을 하나의 단위로 묶는 것
  • 은닉(hiding): 구현은 숨기고, 동작은 노출시킴
  • 느슨한 결합(Loose Coupling)에 유리: 언제든 구현을 수정할 수 있음

앞서 말했듯이, 데이터(속성)와 기능(메서드)을 하나의 객체 안에 넣어서 묶는 것을 말한다. 내부 데이터나 내부 구현을 외부로 노출되지 않도록 하여 내부데이터를 보호하는 은닉화를 목적으로 한다.


2. 추상화 Abstraction

  • 내부 구현이 복잡해도, 실제로 노출되는 부분을 단순하게 만든다는 개념

구현을 숨긴다는 점에서 캡슐화와 비슷해보이긴 하지만, 캡슐화의 주요 목적은 데이터나 구현을 외부로 노출 되지 않게 하는 데에 있지만, 추상화의 주요 목적은 복잡한 것을 단순하게 하는 데에 있다.


3. 상속 Inheritance

  • 부모 클래스의 특징을 자식 클래스가 물려받는 것

공통적인 부분은 부모 클래스의 특징을 따르고 자식 클래스 각자의 특징만 추가하면 된다. (코드의 재사용성 향상)


4. 다형성 Polymorphism

  • 똑같은 메서드(기능)이어도, 사용하는 것에 따라 다른 방식으로 구현될 수 있다.

같은 메서드여도 목적에 맞게 다른 처리를 하고 그에 따라 다른 결과를 가져온다.

0개의 댓글