위 도서를 읽고 정리하여 기술 면접에 대비하는 글입니다.
1장 디자인 패턴과 프로그래밍 패러다임
1.2 프로그래밍 패러다임
1.2.1 선언형과 함수형 프로그래밍
1.2.2 객체지향 프로그래밍
1.2.3 절차형 프로그래밍
1.2.4 패러다임의 혼합
일종의 프로그램 설계 개념이자 방법론의 일종입니다.
프로그램을 상태와 행위로 이루어진 객체라는 기본단위로 나누고, 객체들의 집합으로 프로그램의 상호작용을 표현하며 설계하고 개발하는 방식입니다.
객체지향 언어의 특징에는 4가지가 있습니다.
샹위 클래스의 특성을 하위 클래스가 이어받아 재사용, 추가, 확장하는 상속성.
복잡한 시스템으로부터 핵심적인 개념 또는 기능을 간추려내는 추상화.
객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 캡슐화.
하나의 메서드나 클래스가 다양한 방법으로 동작하는 다형성이 있습니다.
장점은 객체지향의 특징 중 하나인 추상화 및 상속성에 따라 재사용이 용이합니다. 이에 때라 생산성도 향상됩니다. 캡슐화라는 특징 덕에 유지보수에 용이합니다.
단점은 설계에 많은 시간이 소요되며, 프로그램 용량이 크고, 처리 속도가 다른 프로그래밍 패러다임에 비해 상대적으로 느립니다.
여기서부터는 팀원이 출제하고 내가 답하거나 / 부족하게 답한 것들을 정리합니다.
함수형 프로그래밍은 선언형 패러다임의 일종으로, 필요한 로직에 따라 함수로 나눈 뒤 해당 함수들을 블록처럼 쌓아 구현한 것입니다.
더불어 구현하면서 고차 함수를 통해 재사용성을 높일 수 있습니다.
순수함수는 출력이 입력에만 의존하는 것을 의미합니다.
매개변수로 받은 인자들 외 전역 변수가 출력에 영향을 주거나 side effect가 있어서는 안됩니다.
고차함수는 함수가 함수를 변수처럼 받을 수 있는 것을 말하고, 고차 함수를 쓰기 위해서는 사용하는 언어가 일급 객체라는 특징을 가져야 합니다.
자바스크립트는 일급 객체가 있기 때문에 콜백함수, 클로저를 구현할 수 있습니다.
일급 객체란 변수나 메서드에 함수를 할당할 수 있고, 함수 안에 함수를 매개변수로 담을 수 있고, 함수가 함수를 반환할 수 있는 특징을 가진 객체를 의미합니다.
- 변수나 데이터 구조안에 담을 수 있다.
- 파라미터로 전달 할 수 있다.
- 반환값(return value)으로 사용할 수 있다.
- 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
- 동적으로 프로퍼티 할당이 가능하다.
더보기: [JavaScript] 고차 함수와 콜백(Callback) – 일급 객체란?
결국 모든 것은 OOP다...
라는 말을 왕왕 들었었는데,
이걸 React에는 어떻게 적용시킬 것인가를 생각하면 도통 감을 못 잡겠다.
의존성 주입이나 관심사 분리 등을 개발할 때 유념하면 도움이 될까 싶었다.
그리고 스터디 때 함수형 프로그래밍이 질문으로 나올 줄은 상상도 못했다!
객체지향 프로그래밍이 중요해서 그것만 다들 문제로 낼 줄 알았는데...
아무래도 JavaScript는 함수형 프로그래밍 방식이 선호된다고 하니 적당한 예시를 숙지하는 것이 좋을 것 같다.