"js는 동적타입이기 때문에 인자로 뭐가 들어올지 예상할 수 없어서 구조적으로 불안정하고 난해하다"는 주장은 대부분 자바나 C계열 언어를 메인언어로 사용하고 js는 실제적으로 많이 사용하지는 않은 사람들로부터 주로 많이 들어왔던 것 같음.
이 분들은 상당수가 js를 원초적으로 싫어하는 경향이 많았던것 같고, js의 어이없는 동적 타입 변환짤 같은걸 농담으로 건넸던 것 같음.
그런데 나는 그 우려가 조금 과장되었다고 생각함.
1. js는 겉으로 드러나지않을뿐이지 실제로 런타임에는 해당 변수의 타입이 존재하고, 함수 내에서 엄격한 타입검사를 수행함으로서 얼마든지 필터를 만들수 있음.
if(typeof callback === 'function')
{
callback();
}
else
{
console.error('함수 타입이 아님');
}
2. 자주 사용하는 유틸 함수나 라이브러리 메소드의 반환값은 고정이기 때문에 반환값에 맞게 코드를 만들어놓으면 잘 돌아가는 상태로 그대로 대부분 계속 잘 돌아감.
3. 특정 클래스에서만 사용하는 특정 기능을 가진 메소드 같은건 호출하는 위치가 특정 위치로 한정되어있기 때문에, 악의적으로 이상한 곳에서 호출하거나, 해킹을 당해서 해커가 호출하거나, 코드 몽키가 이상한 인자로 저기 다른 클래스에서 호출하지않는 한에는 문제가 발생할 여지가 대부분 없음.
class MyModule
{
//이 모듈에서만 쓰는 메소드
async _updatePosition(values) {
const { x, y } = values
// ...
}
}
4. JSDoc으로 함수 주석으로 매개변수를 표시해 함수사용시 알려줄수 있음
5. 실제로 js의 어이없는 동적 타입 변환 짤같은 식으로 코드를 짜지는 않음.
물론 잠재적 에러를 컴파일 시점에 못잡아내는건 단점이긴하지만 우려가 조금 과장되었다고 생각함.
대규모 협업환경에서 문제가 발생할 여지에 대해서는, C++이나 js 같은프로그래밍 언어도 중요하지만 사람도 중요한 것 같음.
이 분들은 상당수가 js를 원초적으로 싫어하는 경향이 많았던것 같고, js의 어이없는 동적 타입 변환짤 같은걸 농담으로 건넸던 것 같음.
그런데 나는 그 우려가 조금 과장되었다고 생각함.
1. js는 겉으로 드러나지않을뿐이지 실제로 런타임에는 해당 변수의 타입이 존재하고, 함수 내에서 엄격한 타입검사를 수행함으로서 얼마든지 필터를 만들수 있음.
if(typeof callback === 'function')
{
callback();
}
else
{
console.error('함수 타입이 아님');
}
2. 자주 사용하는 유틸 함수나 라이브러리 메소드의 반환값은 고정이기 때문에 반환값에 맞게 코드를 만들어놓으면 잘 돌아가는 상태로 그대로 대부분 계속 잘 돌아감.
3. 특정 클래스에서만 사용하는 특정 기능을 가진 메소드 같은건 호출하는 위치가 특정 위치로 한정되어있기 때문에, 악의적으로 이상한 곳에서 호출하거나, 해킹을 당해서 해커가 호출하거나, 코드 몽키가 이상한 인자로 저기 다른 클래스에서 호출하지않는 한에는 문제가 발생할 여지가 대부분 없음.
class MyModule
{
//이 모듈에서만 쓰는 메소드
async _updatePosition(values) {
const { x, y } = values
// ...
}
}
4. JSDoc으로 함수 주석으로 매개변수를 표시해 함수사용시 알려줄수 있음
5. 실제로 js의 어이없는 동적 타입 변환 짤같은 식으로 코드를 짜지는 않음.
물론 잠재적 에러를 컴파일 시점에 못잡아내는건 단점이긴하지만 우려가 조금 과장되었다고 생각함.
대규모 협업환경에서 문제가 발생할 여지에 대해서는, C++이나 js 같은프로그래밍 언어도 중요하지만 사람도 중요한 것 같음.
물론 잠재적 에러를 컴파일 시점에 못잡아내는건 단점 << 이게 진짜 ㅈㄴ큰거 아닌가 난 타스 없인 못하겠더라
런타임에 알면 머하노 코드 작성시점에 이게 무슨 타입인가 파악하려면 보려면 흐름 하나하나 추적해야하고 타입힌트가 없으니 메소드명 프로퍼티 자동완성 안되는게 매우 불편함 Ts는 옵션 다 끄고 자동완성만 써도 제 역할 한다고 본다
오호
ts 좋지
맞말 ㅇㅈ 오랜만에 유용한 게시글이네