본문 바로가기
JAVASCRIPT

[JS][강제변환] 암시적 강제변환 : 개요

by KBS 2022. 2. 11.
728x90

암시적 변환

암시적 강제변환은 부수효과가 명확하지 않게 숨겨진 형태로 일어나는 타입변환이다. 즉, 우리가 보기에 분명하지 않은 타입변환은 모두 이 범주에 속한다.'

명시적 강제변환의 목적(코드를 명확하게, 이해할 수 있게 작성하는 것)은 분명하고 암시적 강제변환의 목적이 그 반대(코드를 더 이해하기 어렵게 만듦)라는 사실 또한 너무나 분명하다.

액면 그대로 받아들이다 보니 모든 오해와 노여움이 시작된 것같다. '자바스크립트 강제변환'을 향한 대부분의 불평불만이 바로 이 암시적 강제변환을 겨냥하고 있는 건 사실이다.

그럼 암시적 강제변환은 정말 유해하고 위험한 것일까? 자바스크립트 언어 설계의 버그인가? 어던일이 있어도 피하는게 상책인가?

암시적 강제변환이 무엇인지, 어떻게 활용하는지, 무조건 선량한 명시적 강제변환의 적수로 몰아가지만 말고 조금 다른 시각에서 바라보자.

암시적 강제변환의 목적은 중요한 내용으로부터 주의를 분산시켜 코드를 잡동사니로 가득 채워버리는 장황함, 보일러플레이트, 불필요한 상세 구현을 줄이는 것이다.

암시적이란?

자바스크립트 코드를 다루기 전에 엄격한 타입 언어에서 이야기하는, 몇 가지 이론적인 의사 코드부터 살펴보자.

SomeType = SomeType(AnotherType(y));

 

임의의 타입 y값을 SomeType 타입으로 변환하고자 한다. 이 언어에서는 y 값에 무관하게 곧바로 SomeType으로 변환할 수 없다. 어떤 중간 단계를 거쳐야 하는데, 이를테면 먼저 AnotherType으로 변환한 뒤 SomeType으로 최종 변환을 해야 하낟.

이 언어로 우리가 원하는 바를 다음과 같이 직접 기술한다고 쳐보자.

SomeTape = SomeType(y);

 

코드를 이렇게 쓸 수 있따면 그 전에 보았던 코드의 중간 변환 단계를 줄여 타입변환을 단순화 할 수 있지 안흘까? 즉, y값이 '원래타입 -> AnotherType -> SomeType'의 상세한 변환 과정을 거친다는 사실은 모든 사람들이 반드시 다 이해하고 고민해야할까?

누군가는 이렇게 말할 것이다. 적어도 어떤 상황에선 그럴 수 있다고. 하지만 같은 논리로 나는 단순화 시킨 타입변환 코드가 언어 자체가 되었든, 우리가 작성한 추상화 코드가 되었든 간에 실제로 코드 가독성을 높이고 세세한 구현부를 추강화하거나 감추는 데 도움이 된다고 생각한다.

"어던 장치가 A라는 유용한 기능이 있긴 하지만, 이를 남용하면 Z라는 끔찍한 참사를 불러올 수 있다"라고 하면 안전하게 가기 위해 전부 다 폐기하는 편이 낫다고 많은 개발자가 생각한다고 한다.

 


참고

  • You Don't Know JS ( 한빛 미디어 )
728x90

댓글