JS 객체지향 프로그래밍

sam_il·2022년 7월 18일
0

JavaScript

목록 보기
13/22
post-thumbnail

절차지향 프로그래밍
문제를 여러개의 작은 함수로 나눠 작성하며 이 함수들을 원하는 순서에 맞게 작성하는 방식을 말한다.

특징) 처리 부분인 함수들에서 전역 데이터를 공유해서 사용한다는 점이다. (전역 데이터에서 잘못 바꾸면 오류가 터지는 치명적 상황 발생) / 함수 호출 시 공유 데이터를 매개변수 값으로 넘기는 구조로 되어있다.

단점) 함수 호출 시 전역 데이터를 매개변수 값으로 넘겨 공유하여 사용하다보니 전역 데이터가 잘못 처리될 수 있는 치명적 단점을 가지고 있다. (데이터가 보호되지 않는다는 의미이다)

? 절차지향 프로그래밍과 구조적 프로그래밍, 함수기반 프로그래밍
코딩의 차이점들을 있지만 핵심 3개의 방식 모두 다 데이터를 전역에 두고 함수 매개변수 값으로 넘기는 방식으로 대부분은 기능을 처리한다는 것이다.

절차지향 프로그래밍으로부터 객체지향 프로그래밍으로 발전되었다!


객체지향 프로그래밍
문제를 여러 개의 객체 단위로 나눠 작업하는 방식이다.

특징) 클래스를 이용해 연관있는 처리부분(함수,메서드)와 데이터 부분(멤버변수)을 묶어 객체(인스턴스)를 생성해 사용한다는 점이다.

장점) 프로젝트를 독립적인 객체 단위로 분리해서 작업할 수 있기 때문에 여러 개발자와 협업해 규모가 큰 프로젝트를 진행할 수 있다는 장점이 있다.

객체지향 프로그래밍, 클래스 기반 프로그래밍
엄격한 의미에서 해석하면 차이점이 존재한다. 객체지향 프로그래밍은 (추상화, 캡슐화, 상속, 다형성)을 골고루 이용해 코딩하는 프로그래밍을 객체지향이라고 말한다. 클래스 기반은 이러한 것들을 전혀 사용하지 않고 오로지 클래스를 이용해 코딩하는 방식을 말한다. 이처럼 클래스 기반 프로그래밍은 객체지향 프로그래밍에 포함되는 구조이다.

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


객체지향 프로그래밍 특징

속성(프로퍼티), 기능(메서드)

  • 추상화(Abstraction) : 쉽게 말해 추상화는 설계하는 작업 자체 의미.
    추상화의 가장 큰 특징은 프로퍼티와 메서드의 이름을 작성하는 선언 부분만 만들 뿐 구현 소스를 구현하지 않는다는 점이다. 연관문법으로 클래스, 추상클래스, 인터페이스가 있다.

  • 캡슐화(Encapsulation) : 추상화 작업 내용 중 어떤 프로퍼티와 메서드는 외부에서 접근 가능하고 어떤 프로퍼티와 메서드는 외부 접근이 불가능해야 한다. 바로 이 작업을 캡슐화라고 한다.
    연관문법으로는 접근지정자(private, protected, public)이 있다.

  • 상속(Inheritance) : 상속은 특정 클래스(부모 클래스, 조상 클래스)의 속성과 메서드를 하위(자식, 자손) 클래스가 물려받는 것을 의미한다.

  • 다형성(Polymorphism) : 다형성은 객체지향 프로그래밍의 핵심이다. 다형성을 이용하다 보면 선언 부분과 구현 부분을 나눠 다양하게 처리할 수 있다.
    연관 문법으로는 상속, 인터페이스, 추상 클래스, 합성이 있다.

객체지향 프로그래밍은 일종의 방법론일 뿐이다. 이렇게 코딩하면 유지보수 쉬운 코드를 만들어요 와 같은 내용이 담긴 문서라는 것이다. 대표적인 객체지향 프로그래밍(JAVA, C# 등)이 존재 / 위의 네가지를 사용할 수 있다면 모두 객체지향 프로그래밍 언어라고 부른다.

? 자바스크립트 언어는 객체지향 프로그래밍 언어인가
아니다. 특징 4가지를 지원하지 않으며 상속 정도만 제공하며 그 외 기능을 거의 지원하지 않는다. 상속마저도 완벽하지 않고 나머지 특징은 지원한다는 가정하에 비슷하게 만들어 사용하거나 아예 없는 걸로 간주하고 사용하지 않는다.



객체지향 프로그래밍 언어에서 제공하는 기본기능

  1. 기본 기능 종류
  • 클래스
  • 인터페이스 (선언부만 있고 구현부는 없는)
  • 추상 클래스 : 안에 추상 메서드가 존재하여 인스턴스를 만들 수 없는 클래스
    위 세가지 문법을 조합하여 객체지향 프로그래밍의 4가지 특징을 구현하게 된다.
  1. 선언 부분과 구현 부분
    객체는 선언 부분과 구현 부분으로 구성된다.
  • 선언부
    메서드 정보가 바로 선언 부분. 선언 부분이 매우 중요 / 선언 부분을 달리 말하면 일종의 규칙이다. 여기서 규칙이란 구현 부분에서는 선언 부분에 작성되어 있는 메서드 이름과 매개변수를 똑같이 만들어 구현해야 한다. 그렇지 않으면 오류가 발생하여 동작하지 않는다.
  • 구현부
    선언 부분에 있는 메서드의 기능을 직접 구현한 코드
  1. 선언부와 구현부로 나눠 구현하는 이유
    클래스 인터페이스 추상클래스
    선언부 X O O
    구현부 O X O

다형성 때문에 선언부와 구현부로 나눈다. 다형성을 적용해 코드를 만들게 되면 특정 작업을 소스 수정을 거의 하지 않고 다양한 방법으로 연결해서 만들 수 있기 때문이다.

  1. 클래스
    클래스는 연관있는 변수와 메서드를 묶어 재사용하기 위해 사용하는 문법이다. 선언부와 구현부 개념을 적용하여 클래스의 용도를 설명하면 클래스는 객체의 실제 동작을 처리하는 구현 부분을 맡게 된다. 클래스는 다음과 같이 2가지 문법과 조합되어 많이 사용된다.
    클래스 + 인터페이스, 클래스 + 추상 클래스, 클래스 + 추상클래스 + 인터페이스 와 같이 말이다.

! 자바스크립트에서는 3가지 방식으로 클래스를 비슷하게 만든다. (오브젝트 리터럴, 함수, 프로토타입 방식) / 비슷하게나마 지원O

  1. 인터페이스
    인터페이스는 바로 구현 부분 없이 오직 선언 부분만을 만들 때 사용하는 문법이다. 인터페이스는 객체가 반드시 구현해야 할 메서드 명세서를 만들 때 주로 사용한다고 볼 수 있다. (구현부가 없는 추상 메서드들로 나열되어 있다)
    이렇게 만들어진 인터페이스는 (구현)클래스와 연결해 사용된다. 인터페이스와 연결한 클래스는 반드시 인터페이스에 명시된대로 메서드를 만들어 실제 동작하는 구현 부분을 작성해야 한다.

자바스크립트에서는 문법적으로 인터페이스를 지원하지 않기 때문에 다른 언어들에서 어떻게 지원하는지 보자.

! 자바스크립트는 지원하지 않기 때문에 그냥 인터페이스가 있다는 가정하에 코딩을 하는 방법밖에 없다.

  1. 추상클래스
    추상 클래스를 이해하려면 우선 상속의 개념을 먼저 이해해야 한다. 간단히 설명하자면 상속은 부모(조상, super)클래스의 기능을 자식(자손, sub)클래스에서 물려받아 재사용할 수 있는 기능이다. 상속을 사용하다보면 부모 클래스의 기능 중 특정 기능을 부모 클래스에서 구현하는게 아니라 자식 클래스에게 구현하도록 강요해야 하는 경우가 발생한다. 이때 사용하는 문법이 추상 클래스이다.

자식 클래스에게 구현을 강요하고 싶은 기능을 부모 클래스에서 추상 메서드로 만들어 준다. 추상클래스를 상속받는 자식클래스는 추상 클래스에 선언되어 있는 추상 메서드의 구현 코드를 작성해줘야 한다.
정리해보자면 추상 클래스는 일반 클래스 기능과 인터페이스 기능을 합쳐 놓은 형태이다.

! 자바스크립트에서 지원하지 않음, 인터페이스와 마찬가지로 추상클래스 역시 자바스크립트에서는 추상클래스가 있다는 가정하에 작업한다.

profile
🍀

0개의 댓글