데이터 타입 소개: 정적, 동적, 강한 타입과 약한 타입까지

원문: Tim Hurd, "Introduction to Data Types: Static, Dynamic, Strong & Weak"
이 글에서는 데이터 타입은 무엇이고, "정적", "동적", "강하고 약한"이라는 용어가 데이터 타입과 어떤 관련이 있고 우리가 왜 이를 신경 써야 하는지를 설명합니다.
데이터 타입이란 무엇일까요?
프로그래밍에서 데이터 타입이란 컴퓨터가 처리하는 데이터의 유형 (예: 문자열, 숫자 또는 객체)을 컴퓨터에게 알려주는 것입니다. 컴퓨터가 변수를 정의할 때 변수를 저장하고 처리하는 과정을 거치기 전에 데이터의 이름과 타입을 모두 알아야 합니다. 이를 통해 컴퓨터가 얼마나 메모리를 할당할지, 어떻게 데이터에 접근하고 데이터를 변경할지를 알 수 있기 때문입니다. 이 용어를 우리가 다루는 '데이터 타입'이라고 조금 다르게 생각해 보면 더 쉽게 이해할 수 있을지도 모릅니다. 예를 들어 자바스크립트에서 let name = "sitepoint";는 문자열 타입의 name이라는 변수를 생성합니다.
let name = "sitepoint";
console.log(typeof name);
// "문자열"
프로그래밍 언어마다 데이터 타입을 할당하는 방식 (정적 타입과 동적 타입)과 데이터 타입을 유연하게 변경할지 (강타입과 약타입)를 처리하는 방식이 다릅니다. '정적' 타입과 '동적' 타입, '강타입'과 '약타입'에 대해 서로 상충된다고 알고 있으셨을 수도 있습니다. 이 둘은 같은 것이 아니며 언어에는 정적·동적 및 강·약 데이터 타입의 조합이 포함될 수 있습니다.
정적 타입과 동적 타입은 언어가 데이터 타입의 선언 방식을 정의합니다. 정적 타입 언어는 데이터 (예: 변수, 매개변수, 반환 값)를 생성할 때 데이터 타입을 명시적으로 정의해야 합니다. 동적 언어는 그 반대입니다. 사용 중인 타입을 유추하는 방식이거나 최소한 추론할 수 있도록 합니다.
강타입과 약타입은 언어가 데이터 타입 간의 연산을 얼마나 유연하게 허용하는지를 정의합니다. 예를 들어 강타입의 언어는 둘 다 숫자라고 할지라도 먼저 변환하지 않고는
integer에float을 더하는 것을 허용하지 않습니다. 반면에 약타입 언어는 프로그래머가 요구한다면 이러한 연산 수행에 보다 적극적입니다.
정적 타입과 동적 타입 또는 강타입과 약타입을 선택하는 데 있어 왕도는 없습니다. 엄격한 언어는 일관성을 보장하고 코드에서 발생하는 오류의 양을 줄여줍니다. 대신 더 장황한 코드를 작성하고 사람의 눈에는 명백해 보일 수 있는 타입을 굳이 정의하고 변환해야 할 수도 있습니다.
왜 데이터 타입을 신경 써야 하나요?
모든 프로그래밍 언어에는 데이터 타입 시스템이 있습니다. 타입 시스템이 없다면 컴퓨터는 프로그램에서 데이터를 어떻게 표현해야 할지를 알 수 없을 것입니다. 특정 타입의 데이터를 가져와서 다른 타입의 데이터에 더하는 방법이나 데이터를 저장하는 방법도 모를 것입니다. 변수를 정수로 지정하면 컴퓨터는 값을 표현하는 데 필요한 바이트 수를 알 수 있습니다. 여기에 더 중요한 것은 이 값으로 연산을 수행하는 방법을 알 수 있다는 것입니다. 두 정수를 더하는 것은 두 문자열을 더하는 것과는 다른 연산입니다. 컴퓨터가 데이터를 처리하는 방법을 알 수 있는 유일한 방법은 처리하는 데이터의 타입을 아는 것입니다. 물론 기본 타입 시스템에 대해 잘 몰라도 프로그래밍을 시작할 수 있습니다. 이것이 바로 이러한 상위 수준 언어의 장점 중 하나이기도 합니다. 하지만 다루는 데이터 타입과 작업 중인 데이터를 가장 잘 표현하는 방법을 이해한다면 아래와 같은 이점이 있습니다.
메모리와 저장 공간을 더 효율적으로 사용하는 프로그램을 만들 수 있습니다.
integer배열이double배열보다 공간을 덜 차지한다는 사실을 알면 메모리나 하드 디스크에서 매우 큰 배열을 처리할 경우 킬로바이트 또는 메가바이트의 공간을 절약할 수 있습니다.디버깅 메시지를 해독하고 데이터 타입 관련 문제를 더 잘 이해하는 데 도움이 됩니다. 프로그램에서 숫자 중 하나가 문자열이기 때문에 두 개의 숫자를 더할 수 없다는 오류 메시지가 등장했을 때 그 이유를 이해할 수 있습니다. 이 사실을 알게 되면 처음부터 문자열에 숫자를 추가하려고 하는 실수를 피할 것입니다.
일단 타입이 어떻게 작동하는지 알게 되면 영화 매트릭스에 나오는 네오처럼 규칙을 응용하는 방법을 알 수 있게 됩니다.
char에 정수를 더할 때 어떻게 다른char를 얻게 되는지에 대한 이유를 알 수 있습니다.
정적 vs 동적 데이터 타입 시스템
정적 데이터 타입 언어는 프로그래머가 데이터 (변수, 매개변수, 반환 값 등)를 생성할 때 데이터 타입을 명시적으로 정의해야 하는 언어입니다. 일반적으로 이러한 타입은 프로그램 생애 동안 해당 타입으로 고정되며 변경되지 않습니다. 한 가지 예시를 살펴보겠습니다.
int myNumber = 42; // 정수 데이터 타입
string name = "Rocky Balboa"; // 문자열 데이터 타입
final double PI = 3.141592; // 실수(double) 데이터 타입
// 함수는 두 개의 정수 데이터 타입을 넘겨 받고 정수 데이터 타입을 반환합니다.
public int add(int a, int b) {
return a + b;
}
위의 예시는 정의되는 몇 가지 변수와 두 숫자를 더하는 함수의 예시를 보여 줍니다. 보시다시피, 정수, 문자열 및 실수(double)를 다루고 있음을 언어 (이 경우는 자바)에 명시적으로 알려주고 있습니다. 컴파일러에 이러한 힌트를 주지 않는다면 컴파일러는 myNumber를 어떻게 처리해야 할지 모를 것입니다. myNumber는 컴퓨터가 아니라 우리에게 의미가 있는 이름일 뿐입니다. 정적 타입 언어로는 자바, C#, C++, Go 등이 있습니다. 하지만 이는 수많은 언어 중 일부에 불과합니다. 이를 동적 데이터 타입 언어와 대조해 보겠습니다. 아래는 그 예시입니다.
$myNumber = 42; // 정수 데이터 타입
$name = "Rocky Balboa"; // 문자열 데이터 타입
$PI = 3.141592; // 실수(float) 데이터 타입
// 함수는 두 개의 정수 데이터 타입을 넘겨 받고 정수 데이터 타입을 반환합니다.
function add($a, $b) {
return $a + $b;
}
타입은 다 어디로 갔을까요? 위의 예시에서는 동적 타입 언어인 PHP의 변수가 어떤 데이터 타입인지 명시적이지 않다는 것을 알 수 있습니다. PHP에 데이터 타입을 알려주지 않으면 어떻게 알 수 있을까요? 할당된 값을 기반으로 추론합니다. 42라는 값이 정수이므로 $myNumber가 정수라고 정확하게 추론할 수 있습니다. 함수는 어떨까요? 이 함수 역시 전달된 값을 기반으로 추론합니다. 즉, add()는 두 정수를 받아 정수를 반환하거나 두 실수(float)를 받아 실수를 반환할 수 있습니다. 타입은 추론되며 런타임 중에도 변경될 수 있습니다. 나중에 같은 프로그램에서 $myNumber가 Tom과 같다고 하면 변수를 문자열로 전환할 수 있습니다. 자바스크립트, PHP, 파이썬, 루비 등 많은 언어가 동적 언어입니다.
왜 정적 타입 언어를 동적 타입 언어보다 더 선호하나요? 아니면 왜 그 반대인가요?
정적 데이터 타입 언어의 경우 컴파일러에 처리하는 데이터 타입을 미리 명시해 줌으로써 코드에서 흔히 발생하는 실수와 오류를 배포하기 훨씬 전에 잡아낼 수 있습니다. 예를 들어 한 값을 정수로 정의하고 다른 값을 문자열로 정의하면 컴파일 중에 컴파일러가 추가 오류를 포착하여 프로그램 빌드를 막아낼 수 있습니다. 오류를 더 일찍 발견할수록 코드가 더 강력해지고 개발자와 클라이언트가 오류를 수정하는 데 드는 비용이 줄어든다는 점에서 이점이 있습니다. 배포 후 나중에 수정하는 것보다 조기에 수정하는 것이 훨씬 쉽기 때문입니다. 그래서 정적 타입이 옳은 방법인가요? 단점은 사용하기 전에 모든 것을 명시적으로 정의해야 한다는 것입니다. 더 많은 코드를 입력해야 하고, 처리하는 데이터 타입을 미리 알아야 하며(항상 알고 있는 것은 아닙니다), 연산에서 어떤 일이 일어날지 미리 알아야 합니다. 1 / 3은 .33333이 아니라 0이 된다는 사실 같은 것 말이죠. 동적 언어는 이 영역에서 추가적인 유연성을 제공합니다. 프로그래머들은 종종 동적 언어를 "더 표현력이 풍부하다"라고 설명합니다. 예를 들어 PHP에서는 예상대로 .3333…이 표시됩니다. 하지만 문제는 인터프리터가 데이터 타입을 잘못 추론하는 경우 사용자가 이 점을 인지해야 한다는 것입니다. 그렇지 않으면 내가 알지 못하는 사이에 문제가 일어날 수 있습니다. 모든 것을 사전에 파악할 수 없기 때문에 동적 언어의 코드는 오류가 발생하기 쉽고 연약한 경향이 있습니다. 이러한 동적 언어의 데이터 타입은 일반적으로 런타임에 결정됩니다. 따라서 프로덕션 환경에 도달할 때까지 많은 오류를 포착하기 어렵습니다. 로컬 개발 환경에서는 정상적으로 작동할 수 있지만 프로덕션 런타임 환경은 약간 다를 수 있으므로 인터프리터가 사실과 다른 추론을 할 수 있습니다. 자바스크립트는 동적으로 간주되는 언어 중 하나입니다. 자바스크립트의 상위 개념인 타입스크립트가 도입되면서 프로그래머들은 변수의 데이터 타입을 명시적으로 선언하여 언어를 보다 정적으로 만들고자 했습니다. 심지어 Node.js와 같은 도구를 사용하는 브라우저를 넘어서는 등 자바스크립트의 인기가 높아지면서, 프로그래머들은 자바스크립트의 잘못된 추론을 없애면서도 정적 데이터 타입의 이점을 취하고 싶었습니다. 자바스크립트는 데이터와 그 타입을 다룰 때 잘못된 추론을 하는 것으로 악명이 높습니다. 바로 이것이 동적 언어인 자바스크립트를 정적으로 타입이 지정된 언어처럼 만들어 오류를 조기에 발견하고 더 건강한 코드를 만드는 예시입니다. 자바스크립트가 Node.js의 도움으로 서버 측 애플리케이션에 도입되고 있다는 점을 고려하면 이는 더욱 중요합니다. 요컨대 정적 데이터 타입은 엄격한 환경을 제공하며 일반적으로 더 강력한 코드를 생성합니다. 동적 언어는 유연성과 코드를 더 빠르게 작성할 수 있지만 타입을 주의 깊게 확인하지 않으면 오류가 발생하기 쉬운 코드가 될 수 있습니다.
강한 vs 약한 데이터 타입 시스템
강·약 데이터 타입은 연산 값을 처리하는 방식입니다. 언어가 미리 몇 가지를 짐작하고 개발자에게 타입과 관련해 도움을 주게 될까요? 아니면 그저 무엇을 해야 할지 모른다고 불평만 할까요? 다음은 이와 관련해 어떻게 작동하는지에 대한 예시입니다.
int main() {
int a = 5;
std::string b = "5";
// 휴스턴, 문제가 생겼어요!
std::cout << (a + b);
return 0;
}
이 C++ 예시에서는 정수와 문자열을 서로 더하려고 합니다. 네, 분명히 입력은 됐지만 언어 자체에서 프로그래머가 b를 정수로 만들어주지는 않습니다. 프로그램은 문제 해결 대신 오류 플래그를 보이며 포기합니다. 프로그램을 컴파일하려고 할 때 (또는 때때로 프로그램을 작성하는 도중 IDE에 의해) 이와 같은 검사가 진행됩니다. 여기서는 문자열을 문자열로 사용하지 않아 문제가 됩니다. 강타입을 사용하는 언어에는 C#, 자바, Go, 파이썬, C++가 포함되며 모두 이와 같은 컴파일 오류를 냅니다. 현재는 C++에 강타입 시스템을 약화시키는 방법이 있지만 이 글의 범위를 벗어나기에 여기서 언급하지는 않겠습니다. 약한 데이터 타입을 다룬 다음 강·약에 대해 함께 이야기하고 정적·동적 타입만큼 명확하지 않다는 점에 대해 이야기하겠습니다. 약한 데이터 타입 언어는 프로그래머가 연산을 수행할 때 도움을 주려고 합니다. 자바스크립트를 살펴보고 위의 C++ 예시에서 수행한 것과 유사한 연산을 어떻게 수행할 수 있는지 살펴봅시다.
const a = 5;
const b = "5";
console.log(a + b);
자바스크립트의 특징에 대해 조금이라도 알고 있다면 위의 코드가 무리 없이 작동한다는 것을 알고 있을 것입니다. 자바스크립트는 프로그래머에게 아무것도 지적하지 않습니다. 하지만 원하던 대로 콘솔에 10을 기록하지는 않습니다. 정수와 문자열을 보고 "잠깐만요, 이걸로 뭘 해야 할지 모르겠어요!"라고 생각할 수 있습니다. 대신 자바스크립트는 두 값 중 하나를 다른 값과 같도록 강제 (또는 변환)하고 계산을 수행한 후 결과를 제공하고 계속 진행합니다. 여기서 결과는 "55"가 됩니다.
그 이유는 변수의 값을 문자열로 변환한 다음 서로 연결해 주기 때문입니다. 그러면 결과는 문자열 데이터 타입이 됩니다. 보시다시피 언어의 강약은 프로그래머의 의도를 이해하기 위해 해당 타입을 얼마나 강력하게 사용하려고 시도하는지에 달려 있습니다. 이러한 측면에서 바라본다면 동적인 파이썬과 같은 언어도 타입이 강하다고 말할 수 있겠습니다. 값을 생성할 때 타입을 명시적으로 정의할 필요는 없지만 (동적 타입), 해당 타입을 예상하지 못한 방식으로 사용하려고 시도하면 즉시 문제를 플래그하고 종료합니다 (강타입).
강하거나 약한 타입을 선호하는 이유는 무엇인가요?
강한 언어는 엄격합니다. 다시 말하지만 이들은 프로그래머가 의도하는 바를 명확히 이해해야만 합니다. 오류가 발생하면 프로그래머가 연산을 이해하지 못해 발생하는 오류인 경우가 많습니다. 이러한 오류는 잠재적으로 문제에 대한 이해 부족을 가리키기도 합니다. 문자열 '5'에 5라는 숫자를 더하려고 시도한다는 것 자체가 당신이 컴퓨터가 어떻게 이를 이해하지 못할지 몰라서 생기는 일일 수 있다는 것입니다. 이는 당신이 연산을 이해하도록 하고 (주로 변환 또는 캐스팅 메커니즘 형태 등을 통해서) 컴퓨터가 원하는 것을 명시적으로 말하게 합니다. 강타입 언어를 사용하면 프로덕션 환경에서 더 강력하고 오류가 덜 발생하는 코드를 작성하는 장점이 있지만 개발 과정에서 처리해야 할 시간과 절차가 추가됩니다. 약한 언어는 강력한 언어의 엄격함을 줄이고 프로그래머로 하여금 그들의 코드가 스스로 일할 수 있도록 함으로써 유연성과 표현력의 측면에 더 많이 기대고 있습니다. 하지만 단점은 프로그래머가 의도하지 않았을 수도 있는 가정을 컴퓨터가 한다는 것입니다. 타입이 약한 언어 (동적 언어이기도 한)인 자바스크립트는 타입스크립트를 통해 다시 한 번 더 강력해졌습니다. 타입스크립트의 입력 처리를 통해 프로그래머는 명시적 타입을 사용하여 자바스크립트를 작성하고 강력한 타입 언어의 이점을 얻을 수 있습니다. 컴파일 단계에서 많은 오류를 잡아내고 모호한 자바스크립트의 추측이 프로덕션까지 도달하는 것을 방지하는 데 도움이 됩니다. 하지만 개발 과정에서 코딩 형식이 더 형식적이고 엄격해지는 대가를 치러야 합니다. 타입스크립트를 사용 가능한 에디터에서 코드 작성 시 오류에 플래그를 지정할 수 있습니다. VS Code가 이를 수행하는 좋은 예시입니다.
강약의 정도
지금까지 강약타입 언어에 대해 살펴보았습니다. 정적·동적 타이핑에 존재하는 명확한 선과 달리 언어의 강약 정도는 다양하게 나타납니다. 각 언어는 다양한 스펙트럼 위에 위치합니다. C++가 약하다고 말하는 아티클이 있는가 하면 강하다고 말하는 아티클이 있는 것도 이 때문입니다. 그것은 상대적입니다. 특정 언어는 즉시 타입을 변환하고 변경하는 데 도움이 되는 도구를 제공하는데, 이 또한 다양한 스펙트럼 위에 각 언어가 위치하게 되는 이유입니다. 일부는 포인터와 같은 것을 사용합니다. 그렇기 때문에 누군가 C++는 자바스크립트에 비해 타입이 훨씬 강하다고 말할 때 자바가 C나 C++보다 타입이 더 강하다는 말을 하게 되는 이유입니다. 저는 언어의 강약에 대한 모든 뉘앙스를 이해하는 것이 그렇게 중요하지 않다고 생각합니다. 몇 가지 기본 사항만 알고 강도의 차이를 구분할 수 있다면 주어진 프로젝트와 요구 사항에 맞는 언어를 선택할 때 큰 도움이 될 것입니다.
어떤 타입이 내 프로젝트에 적절한지를 선택하기
당신의 다음 프로젝트를 위해 어떤 언어를 선택하는 데는 여러 가지 이유가 있습니다. 대부분의 경우 타입 시스템은 다음과 같은 더 중요한 고려 사항 때문에 우선순위에서 밀리는 경향이 있습니다.
프로그래머에게 더 편한 언어인지
프로젝트 수준에 더 맞는 기능을 제공하는 언어인지
더 빠른 개발이 가능한 언어인지
타입 시스템과 관련한 고민을 한다면 프로젝트별로 다르게 접근하세요. 메모리 효율적이고, 엄격해야 하며, 오류를 조기에 발견할 수 있는 미션 크리티컬한 프로젝트에서 작업하는 경우 정적 타입 언어를 염두에 두시면 좋습니다. 언어가 추측을 해서는 안 되고 중요한 알고리즘을 지원하기 위해 분명한 지침이 필요하다면 강한 타입 언어도 고려하세요. 예를 들면 대규모인 "AAA" 게임 프로젝트에서 이러한 언어를 흔히 선택하고 있습니다. 그러나 프로그래머가 어느 정도 표현력을 발휘할 수 있는 유연성을 갖추고 빠르게 무언가를 만들어야 한다면 동적 또는 약타입 언어가 더 적합할 수 있습니다. 또는 이 두 가지를 혼합한 언어를 선호할 수도 있습니다. 이것이 바로 많은 사람들이 파이썬과 같은 언어를 선택하는 이유 중 하나입니다.
결론
이 글에서는 정적 및 동적 타입 시스템의 차이점과 강·약타입 시스템의 차이점을 소개했습니다. 두 시스템을 어떻게 비교하고, 왜 한 시스템을 선택해야 하는지, 각 시스템에 적합한 언어는 무엇인지, 그리고 이러한 차이점을 활용하여 다음 프로젝트에 사용할 언어를 선택하는 방법들을 알 수 있게 되었을 것입니다. 이 글이 도움이 되었기를 바랍니다. 한 가지만 기억해야 한다면 정적이라고 해서 반드시 강하고 동적이라고 해서 반드시 약한 것은 아니라는 점입니다. 언어에는 이 둘의 다양한 조합이 존재할 수 있습니다. 강약타입의 경우 그 사이의 정도에 따라 다양하게 나타날 수 있습니다. 모두들 다음 프로젝트에 행운이 있기를 바라며 읽어 주셔서 감사합니다!
정적 타입과 동적 타입에 관하여 자주 묻는 질문 (FAQ)
정적 타입 언어와 동적 타입 언어의 주요 차이점은 무엇인가요?
정적 타입 언어는 컴파일 타임, 즉 코드가 실행되기 전에 타입을 검사하는 언어입니다. 예를 들면 자바, C++, C# 등이 있습니다. 반면 동적 타입 언어는 런타임, 즉 코드가 실행되는 동안에 타입 검사를 수행합니다. 파이썬, 루비, 자바스크립트 등이 그 예시입니다. 정리해 보면 타입 검사가 일어나는 시점과 각 접근 방식이 제공하는 유연성 및 안정성에 주요 차이점이 있습니다.
정적 타입이 어떻게 코드 안정성에 기여하나요?
정적 타이핑은 컴파일 타임에 오류를 포착하여 코드 안정성에 기여합니다. 즉 코드가 실행되기 전에 많은 잠재적 문제를 감지하고 수정할 수 있습니다. 또한 모든 변수의 타입을 미리 알 수 있어 코드를 더 예측 가능하게 하고 쉽게 디버깅할 수 있습니다.
그럼 왜 동적 타입 언어를 선택하나요?
동적 타입 언어는 런타임에 변수 타입을 변경할 수 있으므로 유연성이 더 뛰어납니다. 따라서 특정 작업에 더 쉽게 사용할 수 있고 더 간결한 코드를 만들 수 있습니다. 스크립팅, 신속한 프로토타이핑, 런타임까지 특정 타입을 알 수 없는 상황 등에 주로 사용됩니다.
정적 타입과 동적 타입의 예시를 들어주실 수 있나요?
자바와 같은 정적 타입 언어에서는 int x = 10;처럼 변수를 선언할 수 있습니다. x의 타입은 int로 선언되며 변경할 수 없습니다. 파이썬과 같은 동적 타입 언어에서는 x = 10을 작성하고 나중에 x = "hello"를 작성해 문자열로 변경할 수 있습니다.
정적 타이핑과 동적 타이핑의 성능에는 어떤 차이가 있나요?
정적으로 타입이 지정된 언어는 컴파일러가 알려진 타입을 기반으로 최적화를 수행할 수 있기 때문에 성능에 유리한 경우가 많습니다. 반면 동적으로 타입이 지정된 언어는 런타임에 추가 검사가 필요하므로 실행 속도가 느려질 수 있습니다.
정적 타이핑은 코드 가독성에 어떤 영향을 미치나요?
정적 타입은 변수의 타입을 명시적으로 만들어 코드 가독성을 높입니다. 특히 대규모 코드베이스에서 코드가 무엇을 하고 있는지 더 쉽게 이해할 수 있습니다.
정적 타입과 동적 타입 모두를 지원하는 언어가 있나요?
네 있습니다. C# 및 파이썬과 같은 일부 언어는 정적 타이핑과 동적 타이핑을 모두 지원합니다. 이러한 언어를 '선택적 타이핑' 언어라고 합니다. 이를 통해 개발자는 특정 요구 사항에 가장 적합한 방식을 선택할 수 있습니다.
정적 타입과 동적 타입을 사용하는 것의 트레이드오프는 무엇인가요?
정적 타입과 동적 타입의 사이는 종종 안정성과 유연성 사이를 절충하는 것으로 귀결됩니다. 정적 타입은 안정성이 높고 코드가 더 효율적일 수 있지만 장황하고 유연성이 떨어질 수 있습니다. 동적 타입은 더 많은 유연성을 제공하고 더 간결하겠지만 런타임 오류가 더 많이 발생한다거나 효율성이 떨어질 수 있습니다.
정적으로 타입이 지정된 언어에서 타입 추론은 어떻게 작동하나요?
타입 추론은 컴파일러가 변수 값에서 변수의 타입을 유추할 수 있도록 하는 일부 정적 타입 언어의 기능입니다. 이는 정적 타입의 안정성은 그대로 유지하면서도 정적으로 타입이 지정된 언어를 더 간결하고 사용하기 쉽도록 합니다.
정적 타입과 동적 타입을 혼합하여 쓸 수도 있나요?
일부 언어에서는 동일한 코드에 정적 타이핑과 동적 타이핑을 혼합하여 사용할 수 있습니다. 이는 종종 두 가지 접근 방식의 이점을 모두 얻기 위해 수행됩니다. 예를 들어 안정성과 성능이 중요한 코드의 핵심 부분에는 정적 타이핑을 사용하고, 보다 유연해야 하거나 런타임까지 타입을 알 수 없는 경우 동적 타이핑을 사용할 수 있습니다.




