Type Safe라는 말을 처음 접했을 때, 단순히 타입에 안정적이라는 말로 이해했습니다.
하지만, 더욱 찾아본 결과 복잡한 개념인 것을 알게되었습니다.
Type Safe 라는 개념은 고정적인 개념이 아닌 언어의 타입 시스템에 따라 다른 의미를 가집니다.
일반적으로 언어의 타입 안정성이 프로그램의 well-defined를 보장하는것을 의미합니다.
"제대로 타입된 프로그램은 절대 잘못될 수 없다" 라는 문장을 통해 타입 안정성을 직관적으로 이해할 수 있습니다.
여기서 잘못된다라는 의미는 문법적으로는 틀리지 않았지만 의미적으로 문제가 발생하는 것으로 대표될 수 있습니다.
예를 들면 아래 코드는 문법적으로 틀리지 않았지만 에러가 발생하는 코드입니다.
따라서 이 언어의 경우 잘못되었으므로 type safe 하지 않습니다.
char buf[4];
buf[4]='a';
c와 c++은 Type Safe하지 않습니다.
이 언어들은 문법적으로 맞지만 의미있는 코드를 배제하지 않습니다.
위에서 본 예시코드에서 문법적으로 맞게 코드를 작성하였지만 에러를 발생시켰기 때문입니다.
java와 c#에서는 문제가 발생하는 코드의 경우 예외를 처리해주기 떄문에 Type Safe합니다.
다시 위 예시 코드에서 java나 c#의 경우에서는 ArrayOutOfBoundsException 을 던져주기 때문에 프로그램은 잘못되지 않습니다.