프로그래밍 언어의 유형에 대해 지속적으로 살펴보고 있습니다.
지난 포스팅에서 프로그래밍 언어의 종류 및 특징을 아래와 같이 정리했습니다.
- 패러다임
방법 혹은 목적 (저 수준/고 수준)빌드(Build)유무 (컴파일 / 인터프리터)- 자료형 지정 유무
이번 시간에는 언어의 종류를 구분하는 특징 중
자료형 지정 유무란 분류에 따른 언어의 특징을 살펴보겠습니다.
다만, 단순히 두루뭉실한 개념이 아닌, 실제 코드를 작성해보고
이에 발생되는 Error를 통해 알아보고자 합니다.
Type Checking
정적/동적 언어의 분류 기준은 상수, 변수, 함수 등에 대한 타입을 확인하는 시점
앞서 포스팅에서 다룬
컴파일(Compiled), 인터프리터(Interpreter)언어에 대해 간단하게 짚고 넘어가보자면..
- 컴파일 언어(Compiled Language)
- 코드의 명령을 한데 모아놓고, 한 번에 실행(Build)
- 인터프리터 언어(Interpreter Language)
- 코드 한 줄, 한 줄마다 번역을 동시에 처리 (Build 과정 없음)
여기서, 컴파일 언어에 대한 다음과 같은 의문이 발생할 수 있습니다.
"밤새 노력해서 코드를 짰는데, 빌드(Build)시 오류가 나면 너무 아깝지 않을까?"
하지만, 다행히도 우리가 Swift를 활용해 코드를 작성할 때 문법 상 실수가 생기면
아래와 같은 빨간색 오류 가 줄 옆에 발생하는 것을 보실 수 있습니다.
Build 혹은 코드를 실행하기도 전에
친절하게 'someInt는 Integer 타입이므로, String 값이 올 수 없어!' 라고 알려줍니다.
이렇듯, Swift와 같은 컴파일(Compiled)언어의 경우
개발자가 소스코드를 작성을 완료하게 되면, 이를 목적코드(Object Code)로 변환할 시점에서
해당 변수/상수의 타입(Type)을 컴파일 시점(고 수준 ➟ 저수준)에서 파악하는 과정을 거치고,
적합하지 않다고 판단될 경우에 Error를 발생시키는 형태를 가지고 있습니다.
(위 예시에서 발생되는 오류는 'syntax Error', 즉 문법상 오류입니다)
정적타입 언어(Static Typed Language)
- '정적타입' 언어란, 상수, 변수 혹은 함수의 타입을 컴파일시 결정하는 언어입니다.
- 컴파일 시, 타입을 검사하기 때문에 추후에 발생할 여지가 있는 오류를 방지 할 수 있습니다.
- 명시적으로 타입을 지정하였기 때문에, 코드 자체의 가독성이 매우 높습니다!
- 대표적인 언어로는 C, C#, C++, JAVA, Swift가 있습니다.
Swift의 컴파일 오류(예시)
// 정적언어(Swift)
// 1. 컴파일 에러(Compiled Error) 발생
var someArray = [3,4,5]
someArray = false // Cannot assign value of type
someArray = "Lime" // Cannot assign value of type
someArray = 123 // Cannot assign value of type
// 2. 컴파일 에러(Compiled Error) 중 Type Checking 오류
var x: Int = 3
var x: Bool = true // Invalid redeclartion of 'x'
동적타입 언어(Dynamic Typed Language)
- '동적타입' 언어는 타입체크(Type Checking)를 '실행'할 시점에서 결정합니다.
- 프로그램을 실행하는 Runtime 시점에서 타입을 확인하므로, 컴파일 언어와는 반대입니다.
- 즉, Runtime 에러 는 프로그램을 실행해야만 확인할 수 있습니다.
- 소스코드를 작성하는 시점에서는 타입 없이 변수/상수/함수를 지정해도 무방합니다.
- 동적타입의 언어는 인터프리터 언어의 특징과 유사하거나, 동일합니다.
- '소스코드 한 줄, 한 줄마다 번역을 동시에 처리' 하는 특징과 연관되어 있습니다.
- 정적 언어와는 달리, 타입을 설정하기 위해 많은 선택의 기회가 있습니다.
- 상대적으로 코드가 간결하므로 상대적으로 학습하기에 매우 용이합니다.
- 하지만, 반대로 Runtime시 예상치 못한 오류, 변수가 발생할 우려가 있습니다.
- 대표적인 언어로는, JavaScript, Python, Ruby, SmallTalk 등이 있습니다.
이번 포스팅에서는
정적, 동적타입의 언어의 유형과 특징을 비교해보고,
컴파일 및 런타임 오류의 개념에 대해 살펴보았습니다.
다음 포스팅에서는
프로그래밍 언어를 나누는 기준 중 하나로
'개발자가 소스코드를 작성할 시 어떤 기준을 삼고 있는가?' 와 관련된
프로그래밍 패러다임에 대해 구체적으로 다뤄보도록 하겠습니다.
'CS > Computer Basic' 카테고리의 다른 글
[CS/Basic] 그래서, 객체(Object)가 무엇인가요? (0) | 2022.12.29 |
---|---|
[CS/Basic] 좀 더 나은 프로그램을 위해, 프로그래밍 패러다임 (2) | 2022.12.26 |
[CS/Basic] 컴파일? 인터프린터? 빌드(Build) 유무에 따른 비교 (0) | 2022.12.05 |
[CS/Basic] 컴퓨터와 개발자가 소통하는 방법, 프로그래밍 언어 (0) | 2022.12.04 |
[CS/Basic] 비 전공자가 이해하는 컴퓨터 프로그래밍과 코딩 (0) | 2022.12.02 |
댓글