개발
JavaScript - Java의 enum을 대체하는 자바스크립트의 Object.freeze() 완벽 가이드
syaku
2024. 11. 9. 15:57
728x90
반응형
[JavaScript] Java의 enum을 대체하는 Object.freeze() 완벽 가이드
자바스크립트에서 자바의 enum과 같은 상수를 관리하는 방법을 알아보겠습니다.
Object.freeze()를 사용한 기본 구현
자바스크립트에서는 enum 타입이 없지만, Object.freeze()를 사용하여 비슷한 기능을 구현할 수 있습니다.
const Season = {
SPRING: "spring",
SUMMER: "summer",
AUTUMN: "autumn",
WINTER: "winter"
};
Object.freeze(Season);
Object.freeze()의 특징
1. 불변성 보장
- 객체의 속성 추가 불가
- 속성 삭제 불가
- 속성 값 변경 불가
2. 사용 이점
- 코드의 가독성 향상
- 타입 안정성 제공
- IDE 자동완성 지원
- 오타나 실수 방지
Object.freeze()의 한계: 얕은 동결
Object.freeze()의 주요 한계점은 얕은 동결(shallow freeze)만 제공한다는 것입니다.
const nested = {
outer: {
inner: "value"
}
};
Object.freeze(nested);
nested.outer.inner = "changed"; // 변경 가능!
deepFreeze 구현으로 완벽한 동결 만들기
중첩된 객체까지 완벽하게 동결하기 위해서는 deepFreeze를 구현해야 합니다[4].
function deepFreeze(object) {
Object.keys(object).forEach(prop => {
if (typeof object[prop] === 'object' && !Object.isFrozen(object[prop])) {
deepFreeze(object[prop]);
}
});
return Object.freeze(object);
}
실제 사용 예시
const PaymentType = {
CREDIT_CARD: {
code: "CC",
description: "신용카드"
},
BANK_TRANSFER: {
code: "BT",
description: "계좌이체"
}
};
deepFreeze(PaymentType);
Object.seal()과의 차이점
기능 | Object.freeze() | Object.seal() |
---|---|---|
속성 추가 | 불가능 | 불가능 |
속성 삭제 | 불가능 | 불가능 |
속성값 수정 | 불가능 | 가능 |
속성 열거 | 가능 | 가능 |
사용 시 주의사항
- strict 모드에서는 수정 시도 시 TypeError가 발생합니다
- 중첩 객체가 있는 경우 반드시 deepFreeze 사용을 고려해야 합니다
- 성능에 민감한 경우 사용을 신중히 검토해야 합니다
결론
Object.freeze()는 자바의 enum을 대체할 수 있는 효과적인 방법이지만, 깊은 동결이 필요한 경우에는 deepFreeze를 구현하여 사용하는 것이 안전합니다. 상수 관리와 코드의 안정성을 높이는데 매우 유용한 도구입니다.
728x90
반응형