절차지향 프로그래밍
문제를 여러개의 작은 함수로 나눠 작성하며 이 함수들을 원하는 순서에 맞게 작성하는 방식을 말한다.
특징) 처리 부분인 함수들에서 전역 데이터를 공유해서 사용한다는 점이다. (전역 데이터에서 잘못 바꾸면 오류가 터지는 치명적 상황 발생) / 함수 호출 시 공유 데이터를 매개변수 값으로 넘기는 구조로 되어있다.
단점) 함수 호출 시 전역 데이터를 매개변수 값으로 넘겨 공유하여 사용하다보니 전역 데이터가 잘못 처리될 수 있는 치명적 단점을 가지고 있다. (데이터가 보호되지 않는다는 의미이다)
? 절차지향 프로그래밍과 구조적 프로그래밍, 함수기반 프로그래밍
코딩의 차이점들을 있지만 핵심 3개의 방식 모두 다 데이터를 전역에 두고 함수 매개변수 값으로 넘기는 방식으로 대부분은 기능을 처리한다는 것이다.
절차지향 프로그래밍으로부터 객체지향 프로그래밍으로 발전되었다!
객체지향 프로그래밍
문제를 여러 개의 객체 단위로 나눠 작업하는 방식이다.
특징) 클래스를 이용해 연관있는 처리부분(함수,메서드)와 데이터 부분(멤버변수)을 묶어 객체(인스턴스)를 생성해 사용한다는 점이다.
장점) 프로젝트를 독립적인 객체 단위로 분리해서 작업할 수 있기 때문에 여러 개발자와 협업해 규모가 큰 프로젝트를 진행할 수 있다는 장점이 있다.
객체지향 프로그래밍, 클래스 기반 프로그래밍
엄격한 의미에서 해석하면 차이점이 존재한다. 객체지향 프로그래밍은 (추상화, 캡슐화, 상속, 다형성)을 골고루 이용해 코딩하는 프로그래밍을 객체지향이라고 말한다. 클래스 기반은 이러한 것들을 전혀 사용하지 않고 오로지 클래스를 이용해 코딩하는 방식을 말한다. 이처럼 클래스 기반 프로그래밍은 객체지향 프로그래밍에 포함되는 구조이다.
객체지향 프로그래밍 특징
속성(프로퍼티), 기능(메서드)
추상화(Abstraction) : 쉽게 말해 추상화는 설계하는 작업 자체 의미.
추상화의 가장 큰 특징은 프로퍼티와 메서드의 이름을 작성하는 선언 부분만 만들 뿐 구현 소스를 구현하지 않는다는 점이다. 연관문법으로 클래스, 추상클래스, 인터페이스가 있다.
캡슐화(Encapsulation) : 추상화 작업 내용 중 어떤 프로퍼티와 메서드는 외부에서 접근 가능하고 어떤 프로퍼티와 메서드는 외부 접근이 불가능해야 한다. 바로 이 작업을 캡슐화라고 한다.
연관문법으로는 접근지정자(private, protected, public)이 있다.
상속(Inheritance) : 상속은 특정 클래스(부모 클래스, 조상 클래스)의 속성과 메서드를 하위(자식, 자손) 클래스가 물려받는 것을 의미한다.
다형성(Polymorphism) : 다형성은 객체지향 프로그래밍의 핵심이다. 다형성을 이용하다 보면 선언 부분과 구현 부분을 나눠 다양하게 처리할 수 있다.
연관 문법으로는 상속, 인터페이스, 추상 클래스, 합성이 있다.
객체지향 프로그래밍은 일종의 방법론일 뿐이다. 이렇게 코딩하면 유지보수 쉬운 코드를 만들어요 와 같은 내용이 담긴 문서라는 것이다. 대표적인 객체지향 프로그래밍(JAVA, C# 등)이 존재 / 위의 네가지를 사용할 수 있다면 모두 객체지향 프로그래밍 언어라고 부른다.
? 자바스크립트 언어는 객체지향 프로그래밍 언어인가
아니다. 특징 4가지를 지원하지 않으며 상속 정도만 제공하며 그 외 기능을 거의 지원하지 않는다. 상속마저도 완벽하지 않고 나머지 특징은 지원한다는 가정하에 비슷하게 만들어 사용하거나 아예 없는 걸로 간주하고 사용하지 않는다.
객체지향 프로그래밍 언어에서 제공하는 기본기능
다형성 때문에 선언부와 구현부로 나눈다. 다형성을 적용해 코드를 만들게 되면 특정 작업을 소스 수정을 거의 하지 않고 다양한 방법으로 연결해서 만들 수 있기 때문이다.
! 자바스크립트에서는 3가지 방식으로 클래스를 비슷하게 만든다. (오브젝트 리터럴, 함수, 프로토타입 방식) / 비슷하게나마 지원O
자바스크립트에서는 문법적으로 인터페이스를 지원하지 않기 때문에 다른 언어들에서 어떻게 지원하는지 보자.
! 자바스크립트는 지원하지 않기 때문에 그냥 인터페이스가 있다는 가정하에 코딩을 하는 방법밖에 없다.
자식 클래스에게 구현을 강요하고 싶은 기능을 부모 클래스에서 추상 메서드로 만들어 준다. 추상클래스를 상속받는 자식클래스는 추상 클래스에 선언되어 있는 추상 메서드의 구현 코드를 작성해줘야 한다.
정리해보자면 추상 클래스는 일반 클래스 기능과 인터페이스 기능을 합쳐 놓은 형태이다.
! 자바스크립트에서 지원하지 않음, 인터페이스와 마찬가지로 추상클래스 역시 자바스크립트에서는 추상클래스가 있다는 가정하에 작업한다.