정적(Static) 타입 언어, 동적(Dynamic) 타입 언어


정적 타입 언어, 동적 타입 언어


정적타입 언어, 동적타입 언어를 구분하는 기준은 코드의 상수, 변수, 함수 등에 대한 타입을 언제 확인하는지이다.

  • 정적타입 언어: 타입을 컴파일 타임에 확인한다.
  • 동적타입 언어: 타입을 런타임에 확인한다.

Swift의 경우 정적 타입 언어이다. 컴파일 시점에 코드의 타입을 검사해서 타입이 맞지 않는 경우 컴팡일러가 에러를 발생시킨다.

장단점?

아래 코드는 동적 타입 언어(python)를 사용한 것이다.

x = "Hi" // str
x = True // Bool
x = 1 // Int

동적타입 언어는 런타임 중에 x의 타입을 확인하기 때문에 실행 중에 타입을 변환해 사용해도 문제가 없다.

정적타입 언어는 이와 반대다. 아래는 Swift를 사용한 코드다.

var x = "Hi"
x = true // 타입 변경 안된다. 컴파일 에러
x = 1 // 타입 변경 안된다. 컴파일 에러

var x = "Hi"
var y: Bool = true
var z: Int = 1

정적타입 언어는 타입이 한 번 결정되면 타입이 변하지 않고, 컴파일 할 때 타입을 검사하기 때문에 동적타입 언어처럼 사용할 수 없다.

정적 타입 언어의 장점

정적 타입 언어는 위와 같이 컴파일 시 타입을 미리 검사하기 때문에, 런타임 중에 타입이 변경되면서 발생 가능한 런타임 오류를 방지할 수 있다.

또한 코드의 가독성을 높일 수 있다. 타입을 처음에 명시적으로 지정했기 때문에 타입이 변경됨에 따라 코드를 다르게 해석해야 할 수 있는 여지를 없앤다.

정리하자면

  1. 런타임 에러를 방지하므로 안정적
  2. 컴파일 시 타입에 대한 정보를 결정하기 떄문에 실행 속도 빠름

동적 타입 언어의 장점

동적 타입 언어는 정적 타입 언어처럼 타입 관련된 boilerPlate 코드와 규칙이 없기 때문에 코드가 상대적으로 간결해질 수 있다.

  1. 유연하다.
  2. 코드가 간결하다.
  3. 예상 못한 변수가 생길 수 있다.

참고: Boilerplate란? 정보기술에서 말하는 보일러 플레이트는 변경 없이 계속해서 재사용 할 수 있는 저작품이다. 즉 보일러 플레이트 코드는 재사용이 가능한 프로그램을 가리키게 된다. 재사용이 가능하다는 것은 최소한의 변경으로 여러곳에서 재사용하며, 반복적으로 비슷한 형태를 띄는 코드를 말한다.

  • 출처/참고
    • https://jusung.github.io/Static-and-Dynamic-Typed-Language/
    • https://itmining.tistory.com/65
    • https://charlezz.medium.com/%EB%B3%B4%EC%9D%BC%EB%9F%AC%ED%94%8C%EB%A0%88%EC%9D%B4%ED%8A%B8-%EC%BD%94%EB%93%9C%EB%9E%80-boilerplate-code-83009a8d3297