강 타입 언어 (vs 약 타입 언어)

2021. 12. 4. 02:18컴퓨터 공학/프로그래밍 언어론

반응형

강 타입 언어와 약 타입 언어를 다들 어디선가 한 번쯤 들어봤을 것이다.
(안 들어 봤어? 그럼 지금 들어봐~)

(뀨?)

📕강약약강인가요?


얼추 비슷하다
라고 말하고 싶지만 그런건 아니고,
이 두 언어 형태를 구분하는 요인은 여러 가지가 있다고들 하지만 가장 중요한 것은

'타입 에러를 항상 검출할 수 있냐' 이다.

사실 앞에 int, float 등등 자료형이 붙으면 강타입인줄 알았는데...(나도 그랬다. 강의 미리미리 들을걸)
교수님이 강 타입은~~가 강 타입(Strong type)입니다.

📕강 타입 그게 뭔데? 어떻게 하는 건데


나는 이제까지 C/C++을 강 타입 언어로 알고 있었다.
이 글을 읽는 사람들도 에?? 라고 생각할 것이다. (아님 말구)

강 타입을 정의를 보자. 타입 에러를 항상 검출할 수 있어야한다. '항상'
그런데 c/c++의 union 타입에서는 타입 에러를 검출 할 수 없다.

그렇기 때문에 C/C++은 강 타입 언어가 아니다.

자바와 C#은 강 타입 적인 성향이 강하지만, 강 타입 언어가 아니다.

그럼 뭐가 강 타입 언어냐?
GO, ML과 F#이 대표적인 강 타입 언어이다.

이 친구들은 항상 타입 에러를 검출한다.

📕뭐가 좋음?


int a = 1;
float b = 2.0;

cout << a + b;
// 3.0 이 나온다.

cout << (int)(a + b);
// 3이 나온다.


타입이 달라도 전혀 문제가 없는 상황에서는 약타입 언어가 좋을 수 있다.
하지만 3.00 과 3이 달라야만 하는 상황에서 위의 코드처럼 암시적 형변환이 이루어진다면, 이는 큰 문제로 이어질 수 있다.

그래서
강 타입 언어의 최대 장점은 한 마디로 타입에러의 결과를 낳을 수 있는 잘못 사용된 변수들을 모두 골라낼 수 있다는 것이다.


다들 한 번쯤 타입에러 때문에 고생한 적이 있을 것이다. (아무것도 모를 시절)
분명히 같은데? 왜 다르다고 하는거지? 같은 3인데 왜!!

강 타입 언어를 사용하게 되면 위와 같은 상황을 모면할 수 있다.

-----------추가

Concepts of programming languages 313.p를 확인하면 위와 같은 문장을 만날 수 있다.



반응형

'컴퓨터 공학 > 프로그래밍 언어론' 카테고리의 다른 글

Statement-Level (two-way selection)  (0) 2021.12.05