02.29.2024
0. Background
콜로소 라는 업체에서 하는 온라인 무료 특강을 듣고 배운 내용들을 잘라서 정리하려 한다.
토스 프론트엔드 개발자분이 선언적 프로그래밍, 단방향 흐름, 부수 효과 총 세가지에 대해 강연하셨다.
오늘은 이 중 선언적 프로그래밍에 대한 글을 정리해 보려고 한다.
1. 선언적이란?
1-1. 논란의 여지를 주는 키워드
우리 프로그래밍 세계에서는 논란의 여지가 있는 질문들이 있다.
HTML은 프로그래밍 언어인가? -> 프로그래밍 언어의 정의는?
강타입 언어를 써야하는가? -> 강타입이란?
개발을 잘 하려면 수학을 배워야 하는가? -> 개발을 잘한다라는 의미는?
이와 같이 선언적이라는 말도 엄밀하게 정의되는 개념이 없다. 당장 위키피디아를 찾아봐도 그렇다.
그렇다면 우리가 사용하는 '선언적'이란 보통 무엇을 뜻하는 용어일까?
1-2. 그럼에도 불구하고 정의해본다면
선언적코드란 실제 동작을 직접 실행시키는 코드가 아니라 어떤 동작이 실행되어야 하는지를 선언하는 코드라고 할 수 있을 것 같다.
2. 선언적 코드를 짜야 하는 이유
2-1. 선언적 코드를 왜 짜야하는가
선언적 코드를 왜 짜야하는가? 물론 몇가지 바로 뒤에서 나열할 장점들이 많이 있지만...
근본적으로, 선언적 코드를 왜 짜야하는가? 무엇이 선언적 코드의 장점들을 파생시키는가?
라는 질문들을 들었을 때 앞에서 우리가 정의한 선언적 코드의 정의를 생각해보면 좋을 것 같다.
돔에 대한 고민을 할 필요 없이(실제 동작) 어떤 동작이 실행되어야 하는지에만 집중을 할 수 있다.
2-2. 선언적 코드의 장점
선언적 코드를 작성해야하는 이유를 알았으니 잠시 선언적 코드의 확실한 장점을 잠시 짚고 넘어가보려고 한다.
- 가독성을 높여준다
- 이식성(Portability)가 높아진다 (렌더링 라이브러리 참고)
- 성능 최적화가 가능해진다 (React 18 Concurrent rendering 참고)
- 리액트를 쓰고 있는 경우 선언적인 코드가 읽기도 쉽고 유지보수도 쉽다.
3. 코드의 Style의 문제인가?
3-1 jQuery vs React.js
jQuery는 명령적, React.js는 선언적인 코드라고 할 수 있다. 그러나 몇몇은 이것을 코드 스타일로 바라보는 시각도 있다.
이것이 정말 스타일의 문제일까? 답은 아니라고 할 수 있다.
비동기 동작을 한다거나, 에러처리를 추가해야하는 등 유지보수 과정을 생각해보면, 선언적 코드가 훨씬 간결하다.
이것은 코드 컨벤션과 같은 스타일의 문제가 아니라 구조적인 부분이 포함됨을 함축한다.
결국 이러한 명령/선언 스타일은 정도나 깊이의 문제가 아니라 방향성의 문제이다.
4. 더 선언적인 코드 작성 예시 (왼쪽이 명령적, 오른쪽이 선언적 코드)
4-1. useOverlay의 사례

4-2. <Logging.Click>의 사례

4-3. react-query의 사례

4-4. relay의 사례

5. 결론
선언적 코드, 선언적 프로그래밍에 대해 알아봤는데 리액트를 공부하는 개발자라면 꼭 알고있어야 하는 부분같다.
'FE > react' 카테고리의 다른 글
| [React] 부수 효과 (Side Effect) (1) | 2024.03.10 |
|---|---|
| [React] 일방향 흐름 (One-Way Data Flow) (0) | 2024.03.01 |
| [React] SEO 문제의 배경과 극복하는 방법 (0) | 2023.08.05 |
| [React] React Router - Link 동적 패스 지정 (0) | 2023.07.23 |
| React와 TypeScript 초기세팅 (0) | 2023.07.19 |