글 요약: OOP는 '추상'과 '디자인 패턴'을 고민하는데 노력이 많이 든다. 단순함이 좋은 코드를 만드는데, OOP는 너무 복잡하다. OOP가 프로젝트가 너무 복잡해져서 실패하는 것을 개인적으로 목격해왔다. 세상을 복잡한 계층구조로 정리하는 것이 인간의 뇌에 맞지 않다. (인간은 그저 무언가를 '한다.' OOP는 자연스럽지 않기 때문에 어렵다.) (OOPs…라고 표현함.)
클래스 키워드
클래스 키워드가 자바스크립트에 추가된 것은 ES6(ECMAScript 2015)부터였지만, 사람들은 일찍이 클래스를 사용하고 있었다.
아래처럼 상속을 구현하여 사용함
(Car를 상속하는 SportsCar 생성자 세팅)
// actual inheritance logic
SportsCar.prototype = Object.create(Car.prototype);
SportsCar.prototype.constructor = SportsCar;
따라서 사람들의 요청에 의해 class가 도입되었으나, js는 객체지향언어가 아니다. js의 모든것은 객체로 이루어져있으나, 이런 객체의 개념은 OOP의 객체와는 다르다.
또한 Class를 적용하여 구현한 부모, 자식 클래스는 거의 동일한 코드를 hood에 가지고 있다.
article1: Please stop using classes in JavaScript
내용요약
수년간 OOP는 소프트웨어 공학의 사실상 표준이었다. 하지만 모든 것에서 그렇듯 프로그래밍 패러다임에도 끝이 있다. 이 글에서는 클래스가 처음에 사용되었던 이유와 js에서 클래스를 사용하는 것이 좋지 않은 이유, 대안을 알아보자.
OOP가 사라지는 이유에 대해서는 이 글을 참고해라.
클래스 키워드
클래스 키워드가 자바스크립트에 추가된 것은 ES6(ECMAScript 2015)부터였지만, 사람들은 일찍이 클래스를 사용하고 있었다.
아래처럼 상속을 구현하여 사용함 (Car를 상속하는 SportsCar 생성자 세팅)
따라서 사람들의 요청에 의해 class가 도입되었으나, js는 객체지향언어가 아니다. js의 모든것은 객체로 이루어져있으나, 이런 객체의 개념은 OOP의 객체와는 다르다.
또한 Class를 적용하여 구현한 부모, 자식 클래스는 거의 동일한 코드를 hood에 가지고 있다.
상속 문제는 기존의 프로토타입을 활용하면 해결할 수 있다. JS의 철학을 받아들여라.
article2: Should You Use Classes in JavaScript?
요약: 팩토리 함수로 활용하는 법