bungker 22일전 | parent | favorite | on: 그냥 자바를 쓰세요(teamten.com)

비용문제만 한정하면 자바는 메모리 사용때문에 클라우드에서 비용이 많이 나가더라구요. 정적언어로 100MB,200MB 메모리 필요한 프로그램이 자바로 작성하면 1G,2G 필요한 경우가 허다하구 경량쓰레드는 라이브러리 호환성때문에 안되는 경우가 많더라구요.

자바도 정적언어입니다만... 메모리 문제는 가비지 콜렉터나 JVM에 해당하는거고 말씀하신 "정적언어로 100MB,200MB 메모리 필요한 프로그램"은 C, C++ 같은 네이티브 언어에 해당하는 얘기일 듯 합니다.

환각 죄송합니다. ㅠㅠ java도 정적 언어 맞습니다. 클라우드에서 이런저런 비용 합치면 메모리 1G당 3만원 정도 생각해야 되서 자바로 개발하는 서비스는 매우 비싼 비용이 지출되더라구요.

예외가 존재하면 동적 타입 언어입니다. 별개로 타입 시스템과 메모리 사용이 별개라는 논점엔 동의합니다

말씀하신 예외의 의미가 너무 넓게 와닿는데 조금만 자세히 설명해주실 수 있을까요?
제가 아는 정적/동적 타입 언어의 정의는 변수의 타입이 컴파일 타임에 정해져있고 그걸 바꿀때 명시적으로 해야하면 정적 타입 언어이고, 동적 타입 언어는 런타임 시점에 얼마든지 변수의 타입을 정할 수도 있고 암시적으로 바꿀 수도 있는 언어였습니다.

런타임에 다운캐스팅을 수행한다거나 하는 상황을 마주하면 자바는 런타임에 타입 체크를 해야합니다. 이런 이유로 자바가 동적타입이고, 이때 발생하는게 예외죠
근본적으로 이 간극이 없다면 예외를 예외라고 부를 필요가 없습니다. throw는 throw하는 객체를 전역변수에 담아두고 goto하는 패턴의 문법설탕이 되겠죠

말씀하신것과 유사하게 타입체크를 런타임에 수행하는 언어를 동적타입이라 부릅니다. 하지만 이건 프로그램에서 다뤄지는 모든 값에 대한 얘기입니다. 자바 글이니 자바를 예로 들면, 자바 코드는 컴파일타임에 타입체크 되지만 이건 그 변수에 대응될 값이 변수의 타입과 일치해야한다는 중요한 암시를 내포하고 있습니다.

타입체크를 런타임에 한다고 동적타입이면 C도 동적타입 언어 인가요? void포인터라는 개념이 있는걸로 아는데 둘간의 어떤 차이가 있는지요

C는 그 과정에 타입체크랄게 없습니다. 부동소수 자료를 정수로 읽는다고 아무 문제가 없잖아요? 동적타입인게 아니고 그냥 위험한거죠

타입체크를 런타임에 한다고 동적타입이면 C도 동적타입 언어 인가요?

네 C가 타입체크를 런타임에 하면 동적타입 언어입니다.
그렇지 않기 때문에 정적 타입입니다.

void 포인터는 그냥 원래 자료형을 알 수 없는 raw 포인터입니다. 해당 포인터가 가르키는 주소에 어떤 타입이 있는지는 알 수 없습니다.

어떤 C컴파일러가 자료형 검사를 코드에 끼워넣고 자료형이 틀렸을때 명시적인 오류를 발생시키나요? 그런 구현체가 있으면 예를 하나만 들어 주십시오