Category

Javascript

15 posts in this category.

Proxy를 이용한 브라켓 기반 DSL 설계

Proxy를 이용한 브라켓 기반 DSL 설계

2026.02.14

자바스크립트에서 obj[key]는 가장 기본적인 문법이다. 우리는 이를 단순한 프로퍼티 조회로 받아들인다. 특정 key를 넣으면 그에 해당하는 값을 반환하는, 가장 직관적인 접근 방식이다. 그러나 Proxy를 사용하면 이 동작을 가로채고 전혀 다른 의미로 재정의할 수 있다. 문법은 그대…

descriptor

descriptor

2025.12.26

새로운 기능 개발을 마친 뒤, 여기저기 흩어져 있던 데이터와 유틸리티 로직을 하나의 클래스로 정리하는 리팩터링을 진행했다. 로직을 쪼개거나 책임을 재설계하는 작업은 아니었고, 단순히 구조를 정돈하는 수준이었기 때문에 큰 문제가 생길 것이라 예상하지 않았다. 그러나 dev 환경에서 확인한…

Nullish Coalescing Assignment

Nullish Coalescing Assignment

2025.09.29

최근 Grunfeld를 사용해본 지인으로부터 다소 기묘한 버그 리포트를 전달받았다. 모달의 기본 동작을 전역적으로 설정할 수 있도록 제공한 GrunfeldProvider의 options 프로퍼티가, 특정 상황에서 기대와 전혀 다른 방식으로 동작한다는 내용이었다. 사용자는 단순히 defa…

Proxy와 Reflect에 대한 개인적인 오해

Proxy와 Reflect에 대한 개인적인 오해

2025.04.24

기존 자바스크립트 사용자들은 객체의 속성 접근을 감지하거나 동작을 변경하기 위해 Object.defineProperty() 같은 저수준 API를 활용해 왔다. 이 방식은 특정 프로퍼티의 getter나 setter를 재정의하는 데에는 유용했지만, 동적으로 추가되는 속성이나 함수 호출, 삭…

함수형 프로그래밍과 Iteration Protocol

함수형 프로그래밍과 Iteration Protocol

2025.04.23

Iteration Protocol이터레이션 프로토콜은 자바스크립트에서 데이터를 순회하기 위한 표준화된 규약으로, 컬렉션(배열, 문자열 등)을 순회 가능한 형태로 정의한다. 이 프로토콜은 두 가지로 나뉘며, 하나는 이터러블 프로토콜(Iterable Protocol), 다른 하나는 이터레이…

자바스크립트에서의 멀티패러다임 프로그래밍

자바스크립트에서의 멀티패러다임 프로그래밍

2025.03.15

이 글의 제목은 ‘자바스크립트에서의 멀티패러다임 프로그래밍’이지만, 우선은 영어에 대해 이야기해보자. 다소 뜬금없다고 느낄 수도 있겠지만, 다 이유가 있다.아주 오래전, 국제 외교의 언어는 프랑스어였다. 왕실 간의 외교문서와 고위 외교관의 대화는 프랑스어로 쓰이는 것이 관례였다. 하지만…

렉시컬 스코프 v 렉시컬 환경

렉시컬 스코프 v 렉시컬 환경

2025.02.13

렉시컬 스코프라는 용어를 처음 접했을 때, 나는 이것을 별다른 의심 없이 ‘렉시컬 환경에 따른 스코프 체인’ 정도로 이해했다. 두 개념이 밀접하게 연결되어 있다는 인상 때문이었을 것이다. 그 결과, 모 회사의 면접에서 렉시컬 스코프를 설명해 보라는 질문을 받았을 때 스코프 체인에 대한…

생성자 함수와 prototype으로 이해하는 JS class

생성자 함수와 prototype으로 이해하는 JS class

2025.01.31

자바스크립트는 프로토타입 기반 언어로, 객체 지향 프로그래밍에서 흔히 사용하는 클래스 상속 모델 대신 프로토타입 체인을 통해 객체 간 상속을 구현한다. 모든 객체는 내부 슬롯에 해당하는 [[Prototype]]을 가지며, 이는 Object.getPrototypeOf() 메서드를 통해 확…

shallow encapsulation

shallow encapsulation

2025.01.28

자바스크립트는 객체 지향 프로그래밍을 지원하기 위해 지속적으로 언어 기능을 확장해왔다. class 문법의 도입, private field(#)의 추가는 그 대표적인 예다. 특히 #을 이용한 프라이빗 멤버는 기존의 관례적 약속(예: _private)과 달리, 언어 차원에서 접근을 차단한다…

미들웨어 조합 구조에서의 unique symbol 활용기

미들웨어 조합 구조에서의 unique symbol 활용기

2025.01.22

요즘 다른 전역 상태 라이브러리 대신 caro-kann 3 버전을 적극적으로 사용하고 있다. 여러 기능을 미들웨어 단위로 분리할 수 있어 번들 크기를 700B대까지 줄일 수 있었고, zustand, useReducer, useState 스타일을 상황에 따라 선택할 수 있다는 점도 다른…