정적 타이핑 vs 동적 타이핑

박재성·2021년 12월 23일
4

어떤 기업의 채용 공고를 보면, '자바스크립트 정적 타이핑 개발 툴에 친숙한 사람' 이라는 말이 있습니다.

자바스크립트는 동적 타입 언어입니다.

왜 기업에서 정적 타입의 자바스크립트를 채용하는지, 동적 타입과 정적 타입의 개념을 통해 알아보겠습니다.

타입이 왜 중요한가

타입이 왜 중요할까요? 타입을 왜 정해야 하며, 타입을 바꿀 수 없게 프로그래밍을 하는 까닭이 무엇일까요?

데이터 타입이란?

데이터 타입은 값의 종류라고 표현합니다. 틀린 말은 아니지만, 좀더 컴퓨터적으로 접근하겠습니다.

데이터 타입은 '저장 가능한 메모리 크기'라고 정의하고 싶습니다.

c언어의 int는 정수를 저장하는 타입이 아니라 4바이트의 데이터를 저장하는 타입입니다.

예를 들어, 문자 유니코드를 생각해 보겠습니다.

char var = 'a'

유니코드에 따르면, a는 정수 97로 변환됩니다.

즉, char 데이터에 정수가 들어간 것이나 다름 없습니다. 하지만 에러는 나지 않죠.

그래서 데이터 타입은 값의 종류가 아니라 저장 가능한 메모리 크기로 정의했습니다.

메모리 당장은 모르지만 항상 신경쓰고 코딩 해야한다.

지금은 컴퓨터의 성능이 크게 발전해서, 메모리에 대해 크게 생각하지 않아도 무언가 빠르게 만들 수 있습니다. 하지만 메모리를 생각하지 않은 프로그램은 지속가능성이 떨어지는 프로그램이라고 생각합니다.

타입 선언에 따른 메모리 절약은 몇 바이트밖에 안되지만, 이런 변수들이 몇 억개가 쌓인다면 프로그램이 심각하게 무거워 질수 있습니다.

이로써 데이터 타입이 무엇인지, 왜 중요하게 생각하고 코딩을 해야하는지 알았습니다.

정적 타이핑

보통 프로그램을 처음 배우면 c언어를 먼저 배웁니다.

c언어에서 변수를 선언할 때,

int var = 10;
float var1 = 3.14;
char str = 'a'

이렇게 타입을 써줘야 합니다. 한 번 타입이 정해진 변수는 다른 타입의 값을 넣을 수 없습니다.

선언한 데이터 타입에 적절한 값을 할당한지 검사하고, 만약 통과하지 못하면 에러를 발생합니다.

동적 타이핑

하지만 어떤 언어들은 코딩할 때 데이터 타입을 직접적으로 선언하지 않습니다. 대표적으로 자바스크립트와 파이썬 등이 있습니다.

이런 언어를 '동적 타이핑' 이라 합니다.

정적타입과 타입을 지정하는 방식에서 차이가 있지만, 동적 타이핑 언어들도 결국에는 타입을 선언해야 합니다. 단지, 누가 하느냐와 언제 하느냐의 차이가 있는 것입니다.

동적 타이핑 언어는 사용자가 직접 타입을 지정 하지 않습니다. 사용자는 값을 대입하고, 자바스크립트 엔진은 사용자가 대입한 값을 바탕으로 타입을 지정합니다.

동적 타이핑 언어는 '런타임' 에 타입 지정이 실행된다.

즉, 변수를 선언할 때가 아닌, 값을 할당할 때 타입이 정해진다.

그래서 자바스크립트는 값을 재할당 할 때 값은 타입이 아니더라도 오류 없이 작동하는 것입니다.

무엇이 더 좋은 방식?

정적 타이핑과 동적 타이핑의 의미를 알았다. 그렇다면 어떤 언어를 사용하는게 더 좋은걸까 생각할 수 있다.

동적타이핑 언어는 매우매우 편하다. 타입을 신경 쓰지 않아도 제품을 만들 수 있다.

하지만 어떤 일이든, 양날의 검이 존재하기 마련...

타입으로부터 해방 됐지만, 타입을 자유롭게 조작하는 것 또한 제한됩니다. 또한 의도치 않은 타입 변환을 통해 출력값이 예상과 다를 수 있습니다. 이 점은 규모가 큰 프로덕트에서 심각한 오류로 발전할 수 있습니다.

그렇기에 상황에 따라 양쪽 모두 사용하지만, 결국에는 정적타이핑으로 통해 타입에 대한 권한을 가지는게 더 좋은 코딩 방식이라 생각합니다.

결론

첫 물음으로 돌아와 다시 생각해봤습니다.

기업에서 자바스크립트 정적 타이핑 툴에 익숙한 사람을 원하는 이유는 '흐름'이라 그렇습니다. 타입 컨트롤을 통해 더 정교한 비즈니스 로직을 구성하려고 그렇습니다. 자바스크립트는 타입이 너무 자유로워 자기 멋대로 바뀌는 상황도 벌어지는데 강타입 언어를 통해 혼란스런 상황을 해결한다고 생각합니다.

배워야 할 것이 많도다.

profile
개발, 정복

0개의 댓글