⚠️ JavaScript에서 불법처럼 보지만 작동하는 6개의 개념
분야
프로그래밍/소프트웨어 개발
대상자
JavaScript 개발자, 고급 프로그래밍 기술에 관심 있는 개발자
난이도: 중급~고급
핵심 요약
- *JavaScript의 "불법처럼 보지만 작동하는" 특수 기능들**
- 콤마 연산자는 모든 표현식을 평가하지만 마지막 값을 반환함
- with 문은 객체의 프로퍼티를 지역 스코프에 주입하지만 strict mode에서 금지됨
- valueOf() 메서드는 객체가 불리언/숫자로 변환될 때 동작을 재정의 가능
- Function 생성자는 동적 코드 실행을 가능하게 하지만 보안 위험을 수반함
섹션별 세부 요약
1. 콤마 연산자 (Comma Operator)
const result = (doSomething(), doSomethingElse(), 42);
→42
반환- 다중 연산을 inline return 시에 사용 가능
return (log("calculating"), expensiveFunction());
와 같은 패턴 활용
2. with 문 (With Statement)
with (wizard) { console.log(spell); }
→ 객체 프로퍼티를 지역 스코프에 주입- strict mode에서 제한되지만, 기술적으로 유효한 문법
- 객체의 동적 접근에 유용하지만, 의도치 않은 스코프 충돌 발생 가능성
3. valueOf() 메서드 재정의
const sneaky = { valueOf() { return 0; } };
→ 불리언/숫자로 변환 시0
반환- 객체의 타입 변환 로직을 커스터마이징 가능
if (!sneaky)
처럼 불리언 컨텍스트에서 특이한 동작 가능
4. 무한 반복자 (Infinite Iterable)
*Symbol.iterator { while (true) yield Math.random(); }
→ 무한 데이터 생성for (let n of infinity)
로 무한 루프 실행 (RAM/사용자 인내심 한계까지)- 프로시저 콘텐츠 생성, 시뮬레이션, 합성 데이터 생성에 적합
5. Function 생성자 (Function Constructor)
const add = new Function("a", "b", "return a + b");
→ 동적 함수 생성eval()
과 유사하지만 "정중한" 형태로 제공됨- 커스터마이즈된 UI/인터프리터 로직 생성에 활용 가능
6. 함수의 프로퍼티 (Function Properties)
function clickTracker() { clickTracker.count = ... }
→ 함수 자체가 상태를 저장- 외부 변수 없이 self-aware한 함수 구현 가능
- 간단한 상태 관리, 콜백 함수에 유용
결론
- *JavaScript의 특수 기능은 실무에서 주의 깊은 사용이 필요**
- strict mode에서 제한된 기능들(예: with 문)은 피해야 함
- 동적 코드 실행은 위험 요소를 동반하지만, 특정 시나리오(예: 인터프리터)에서 유용
- GitHub 레포지토리에서 실제 구현 사례를 참고하면 도움됨
- 이러한 기능은 창의적인 코드 작성에 도전하는 개발자에게 도전적 도구
- 실무에서는 안정성과 보안을 우선시하며, 예외적으로 사용해야 함