JS Class

Haechan Kim·2024년 11월 10일

Javascript

목록 보기
4/5

js는 함수형 프로그래밍(Functional Programming)이다.
함수형 프로그래밍은 순수 함수(pure function) 이용해 데이터 처리하고 상태 변화, 부작용 최소화 하는 프로그래밍 패러다임.
자바는 객체 지향 프로그래밍이 주가 된다.

함수형 프로그래밍 주요 특징

1. 순수 함수 (Pure Function)

동일 입력에 대해 항상 동일한 출력.
외부 상태를 변경하지 않음 -> 부작용(side effect)이 없다는 것이 핵심.
함수 내에서 외부 변수 수정 X, 함수가 외부 상태 의존하지 않음.
비순수함수는 외부상태 변경하므로 상태 추적 어려워지므로 외부상태 변경 지양하는 순수함수 사용하는 것이 좋다.

  • 외부 변수를 함수가 참조하는 경우
// 외부 변수
let env = 10;

function sum(value) {
  env = env + value;
  return env;
}

console.log(sum(10)); // 20
console.log(sum(10)); // 30

함수가 외부 변수 참조하므로 함수 호출마다 다른값 리턴.

  • 외부 변수 참조하지 않는 경우
function sum(value) {
  	// 클로저 (함수 종료되어도 참조값에 존재)
    let env = 10;

    return function() {
        return env + 10;
    };
}

console.log(sum(10)()); // 20
console.log(sum(10)()); // 20

함수가 외부참조 하지 않고 함수 내에서 클로저 사용하면 여러번 호출해도 동일값 출력.

2. 불변성 (Immutability)

함수형 프로그래밍에서는 데이터가 불변하게 다뤄짐.
한번 설정된 변수나 데이터는 변경 X.
필요시 새로운 값이나 객체 생성
-> 상태 변경 줄이고 코드 안정성 높임.

3. 일급 객체로서의 함수 (First Class Object)

함수가 일급 객체로 다뤄지며 변수 할당, 인자로 넘길 수 있음.

클래스와 프로토타입 기반 OOP

초기 js에는 클래스의 개념이 없었지만 ES6에서 도입됨.
클래스는 자바와 같은 객체지향 프로그래밍에서 사용되는데 프로토타입 기반 객체 지향 프로그래밍 언어에 왜 도입된 것일까?
(클래스와 프로토타입은 OOP 위해 쓰이는 서로 다른 방법론)

Class

클래스 기반 언어는 클래스 이용해 객체 생성.
클래스는 객체의 상태, 기능 정의한 틀.
해당 틀을 이용해 생성된 객체가 인스턴스.
인스턴스는 클래스의 복사본으로 개별적 존재, 서로 참조 X.

프로토타입

프로토타입 기반은 클래스 개념 없고 객체 생성 방법만 존재.

객체생성 방법
(1) 객체 리터럴

let obj = {};

(2) Object() 생성 함수

let obj = new Object();

(3) 생성자 함수

function func() {}

let obj = new func();

프로토타입 용어는 두가지로 나뉨.
(1) 프로토타입 객체
자신을 원형으로 다른 객체 참조.

(2) 프로토타입 링크 (__proto__)
상위에서 물려받을 객체 정보 담고 있음.
가장 상위에 Object.prototype 존재.

JS의 Class

js는 프로토타입 체인 이용해서 OOP의 상속 구현하며 클래스 방식 모방.
but 반대로 클래스 기반 -> 프로토타입은 불가능.
js의 클래스는 프로토타입을 흉내낸 Syntatic Sugar(같은 동작 구문 다르게 표현하는 것.)
클래스 기반 OOP에 익숙한 개발자 편의 위해서.

<참고>

0개의 댓글