나는 js부터 배우고 그다음에 c++ 배웠는데 js가 아예 역할이 다른 언어라는걸 망각하다보니 js의 장점을 못본다고 생각함

js는 그냥 웹에서 돌아가는 가볍고 빠른 인터프리터언어로서의 역할이라는걸 인지하는순간 js가 지원하는 많은 기능들이 장점으로 다가올거임

1. 객체, 구조체 기반으로 돌아가는건 사실상 c++ 이랑 큰 차이없고

2. 타입명시없는건 때로는 불편할수있지만 ===쓰면 대부분은 커버되고

3. 문자열이나 숫자끼리 합치다가 아주 작살나는건 아주약간의 오버헤드를 감수하고 예외처리하거나 일정 수준이상 코더들이랑 일하면 큰 문제 안됨.

3. call by reference, call by value도 js에서도 비슷함. 함수에서 매개변수로받고 반환하는건 call by value고 원시타입제외한 변수대입은 기본적으로 call by reference인데 조금만 익숙해지면 c++ 에서 포인터 쓰는 느낌으로 쓸수있고

4. 다른 언어들처럼 무조건 위에서 아래로 실행되는게아니라 함수호출 순서가 자기맘대로인건 blocking - non-blocking syntax나 promise then이나 await같은 비동기 루프 쓰는 순간 비동기 호출을 엄청 직관적으로 할 수 있는 장점으로 변모해서 상당한 장점으로 느껴지고

5. 프로토타입이라는 신박한 방법을 지원해서 객체, 메소드, 필드를 만들때 엄청 단순하면서도 직관적인 방법으로 만들수있음

6. class 가 syntax sugar일 뿐이긴하지만, 자유도가 높다는 장점도 있어서 자기가 원한다면 외부에서도 접근가능하게 만들거나 프라이빗 필드로 만들어 외부에서 접근 불가능하게 막을수도있음.

물론 java나 c++ 같은 안정적인 언어랑은 다르긴한데 애초에 인터프리터언어고 가볍고 즉시실행된다는점에서 저 정도 기능을 지원한다는거 자체가 장점이라고 생각함.(물론 계속 확장되면서 이상한 점도 많긴 하지만)

c++이나 java는 컴파일, 의존성 관리 등의 특징이 안정성과 더 큰 확장성의 장점도있겠지만, 프로젝트의 실제 기능에 비해서 배보다 배꼽이 너무 비대해지는 문제로 다가올수있는데


js는 그런 추상화나 인터페이스, 데이터타입 없이 즉시 착수할수있는 프로젝트를 만들수도있는 장점이 있음.


물론 js로 구조를 그렇게 짜고싶으면 추상화나 인터페이스, 데이터타입을 엄격하게 준수하는 프로젝트를 시작할수도 있음. ( 프로덕션 레벨에서는 좀 부족하겠지만 )

저렇게 "가벼운 역할, 가벼운 느낌인데 이 정도까지 지원해?" 가 js의 장점인데 뭔가 c++ 배우고 나서 js 배우면 둘을 일대일로 비교하려고하니까 장점보다는 단점위주로 보게되는거 같음. 아예 역할군이 다름 도적 vs 기사 느낌으로.