1. 도입: JS는 이제 더 이상 '장난감'이 아니다

8년 전, 제가 처음 개발을 시작했을 때만 해도 자바스크립트는 브라우저에 간단한 효과를 주는 용도로 치부되곤 했습니다. 하지만 지금의 JS 생태계는 자바만큼이나 거대하고 견고해졌습니다. 특히 **ES6(2015)**와 TypeScript의 등장은 백엔드 개발자인 저에게도 매우 흥미로운 변화였습니다.

 

2. 암흑기: 'var'라는 이름의 혼돈 (ES5 이전)

자바의 private String name;처럼 엄격한 선언에 익숙한 개발자에게 JS의 var는 공포 그 자체였습니다.

  • 함수 스코프: if 블록 안에서 선언한 변수가 밖에서도 살아있습니다.
  • 중복 선언 허용: 똑같은 이름으로 변수를 또 선언해도 에러가 나지 않고 덮어씌워집니다.
  • 호이스팅: 선언하기도 전에 변수를 사용할 수 있는 기이한 현상이 발생합니다.

3. 현대화의 시작: let, const 그리고 Class (ES6+)

2015년, JS는 현대적인 언어의 꼴을 갖추기 시작합니다. 자바 개발자가 가장 반겼던 변화들입니다.

  • const와 let: 드디어 블록 스코프가 도입되었습니다. 특히 const는 자바의 final처럼 불변성을 보장해주어 코드의 예측 가능성을 높였습니다.
  • Class 키워드: 프로토타입 체인이라는 난해한 개념 뒤에 숨어있던 객체지향 문법이 class라는 직관적인 키워드로 정리되었습니다.
  • 화살표 함수: 자바 8의 람다처럼 코드를 간결하게 만들어 주었습니다.

4. 정점: TypeScript, 자바의 안전함을 이식하다

하지만 여전히 '동적 타입'이라는 불안함이 남아있었죠. 이를 해결한 것이 바로 TypeScript입니다.

  • 컴파일 타임 에러: 런타임에 undefined is not a function 에러를 보며 고통받던 시절은 끝났습니다. 이제 자바처럼 빌드 시점에 타입을 체크합니다.
  • 인터페이스와 제네릭: 자바 개발자에게 익숙한 Interface, Generic, Abstract Class 등을 그대로 사용할 수 있어 구조적인 설계가 가능해졌습니다.

5. 결론: 결국 언어는 수렴한다

최근 자바가 var 키워드(Java 10)를 도입하고 람다를 강화하듯, 자바스크립트는 타입을 받아들이며 견고해지고 있습니다. 이제 백엔드와 프론트엔드의 경계는 문법이 아니라 **'어떤 문제를 해결하느냐'**의 차이만 남은 것 같습니다.

LIST

+ Recent posts