자바스크립트는 다중 패러다임 언어 - 3

지은·2021년 6월 18일
0

javascript

목록 보기
12/12
post-thumbnail

객체지향 프로그래밍이란?
모든 데이터를 객체로 취급하고 처리 요청을 받은 객체는 객체 내부에 있는 기능을 갖고 처리한다.

그렇다면 객체 지향 프로그래밍의 특징은 어떤 것들이 있을까?

은닉성

tv를 뜯지 않아도 리모콘으로 필요한 조작을 할 수 있는 것처럼 내부 주고는 private으로 감춰놓고 명령어만 public으로 공개해 밖의 간섭을 방지하고 다른 사람이 만든 클래스의 객체도 뜯어보지 않고 제공되는 기능들을 사용할 수 있다.

상속

유산 상속받듯이 protected나 public으로 지정한 변수와 메소드들을 물려받는 것이다. 부모 클래스가 갖고 있는 것들을 자식 클래스가 상속 받아서 새로운 기능을 더해서 사용할 수 있으므로 자식 클래스에 같은 기능을 중복해 쓰지 않아도 된다는 것이 장점이다.

추상 클래스

추상 클래스에는 abstract가 붙는다. 얘는 강아지라는 동물이야, 얘는 고양이라는 동물이야는 가능하지만 얘는 포유류라는 동물이야라고는 하지 못하는 것처럼 특정 개체를 무엇이라고 부르기엔 너무 추상적이라는 뜻이다. 자식 클래스들의 공통분모 역할만을 위한 클래스이다.

다형성

상속받은 것들에 추가적인 기능을 더해 새로운 형태를 만들어낼 수 있는 성질이다.

인터페이스

상속은 트리구조의 상하관계가 뚜렷해 한 자식이 두 부모에게 상속받기 어렵거나 불가능한 경우가 있다. 이때 사용하는 게 인터페이스로 좀 더 자유롭게 사용이 가능하다.

객체 지향 프로그래밍은 모든 데이터를 객체로 취급하기 때문에 코드의 재사용이 가능하고 분석, 설계의 전환이 쉬우나 처리 속도가 상대적으로 느린 편이고 설계 역시 많은 시간이 소요된다.

그렇다면 함수형 프로그래밍은 뭘까? 왜 나왔을까?

함수형 프로그래밍이란?
자료 처리를 수학적 함수의 계산처럼 취급하고 순수 함수를 강조하는 프로그래밍으로 실행 순서와 관계없어 비절차형이라고도 한다.

순수함수란?
동일한 입력값을 넣었을 때 동일한 입력값을 반환하여 외부에 영향을 받지 않는 함수이다.

그렇다면 순수 함수가 아닌 경우는 어떤 경우일까? 예시로 알아보자.

  1. 외부 요인에 따라 리턴 값이 변경되는 경우
function lorem(a, b){
	return a + b + c;
}

이때 c는 외부의 변수로, c로 인해 return값이 달라졌으므로 순수함수가 아니다.

  1. 인자를 직접 변경하는 경우
function lorem(a, b){
	c = b
    	return a + b + c
}

이때 들어온 인자 b가 c에 이해 변경되어 return 값이 달라졌으므로 순수함수가 아니다.
함수형 프로그래밍은 위의 경우가 아닌 순수함수를 사용해 상태 제어보다 빠른 처리에 초점을 둔 방법이다.

함수형 프로그래밍과 객체지향 프로그래밍의 차이

  1. 함수 지향 프로그래밍에서는 함수 자체가 일급 객체가 된다.
    객체 지향 프로그래밍에서는 클래스(또는 객체)가 일급 객체가 된다.

일급 객체란?
객체를 변수나 데이터에 할당할 수 있고 객체의 인자로 사용할 수 있고 객체의 리턴 값으로 리턴할 수 있는 객체

  1. 객체 지향 프로그래밍에서 프로그램이 객체들의 상호작용이라면
    함수 지향 프로그래밍은 상태 값을 갖지 않은 함수 값들의 연속이다.

둘 다 반복적인 일을 처리할 기능을 만드는 방법이지만 방식이 다를 뿐이다. 자바스크립트는 공교롭게도 이 둘을 모두 지원한다.

그렇다면 대체 왜 자바스크립트에서 함수형을 쓸까?

함수형 프로그래밍을 했을 때의 핵심적인 기능은
1. Filter
2. Map
3. Reduce
4. Find
등이 있다. ES5부터는 이미
1. Array.prototype.map
2. Array.prototype.filter
3. Array.prototype.reduce
4. Array.prototype.find
등의 메소드들을 이미 지원했다. 하지만 이 메소드들은 key, value의 쌍으로 이뤄진 object 등에선 적용할 수 없다. 이런 답답함들을 해결하기 위해 원하는 대로 기능을 구현하기 위해 함수형을 도입한 것이다.

또한 함수형으로 프로그래밍을 하다 보면 객체 지향 프로그래밍보다 더욱 추상화할 수 있는 요소가 많아지는데 단순 변수에 값을 변화시키는 걸 넘어 조건문, 반복문 등 다양한 것들을 추상화시킬 수 있다. 추상화가 가능하다는 것은 코드의 재사용성이 올라간다는 것이고 당연히 생산성이 좋아진다는 의미이다.

이러한 장점은 Node.js에서도 큰 역할을 한다! 이것에 관해선 자바스크립트 기본을 다진 뒤 node.js 역시 공부할 예정이므로 그때 다시 다뤄봐야겠다.

참고자료

오늘도 끄적끄적
얄팍한 코딩사전

profile
Today I Learn # 개인 기록용 velog

0개의 댓글