강타입과 약타입 혹은 정적타입과 동적타입

Jee.e (황지희)·2022년 4월 25일
0

강타입과 약타입

  • 강타입과 약타입은 형변환(Type Casting 또는 Type Conversion)을 기준으로 구분된다.
  • 강타입 언어는 다른 형끼리의 변환이 금지되어있고, 만약 변환을 하고싶다면 명시적으로 타입을 선언해줘야한다.
    (자료형이 맞지 않을 시 에러 발생)
  • 약타입 언어는 다른 형끼리의 변환이 가능하며, 심지어 암묵적으로 변환을 해주기도 한다.

☑️ 예시
먼저 약타입 언어인 C의 코드를 보면, int 형인 a가 float 형으로 변환 된다.

int a = 1;
float b = 1.3f;
float c = a + b;

강타입 언어인 Go의 코드를 보면, int 형인 a가 float32 형으로 변환되지 않고 컴파일 에러가 발생 된다.

var a int = 1
var b float32 = 1.3
var c float32 = a + b // 컴파일 에러 발생



정적 타입과 동적 타입

  • 타입의 결정 시점 을 기준으로 구분된다.
  • 정적타입 언어는 컴파일 시 타입이 결정된다. 때문에 자료형을 명시적으로 지정해줘야한다.
    만약 타입이 맞지 않는다면 컴파일 에러를 발생시킨다.
  • 동적타입 언어는 런타임 시 타입이 결정된다. 때문에 자료형을 명으로 지정해줄 필요가 없다.

☑️ 장점

정적 타입동적 타입
컴파일 시 타입 에러를 처리하기 때문에 안정성이 높다.코드 작성 시 타입에 대한 제한이 없어 유연성이 높다.
컴파일 시 미리 타입을 결정해 실행속도가 빠르다.코드 작성이 효율적이다.

☑️ 단점

정적 타입동적 타입
컴파일 타임에 타입에 대한 제한으로 코드 작성 시 유연함이 떨어진다.타입에 대한 리스크를 런타임에 감당해야한다. (코드가 길고 복잡해질 경우 타입 에러를 찾기가 어려워짐)



Swift는 어떤 타입의 언어인가?

데이터 타입에 대한 구분이 엄격한 강타입이자 정적타입의 언어이다.
컴파일 시점에 코드의 타입을 검사해 타입이 맞지 않는 경우 컴파일러가 에러를 발생시킨다.

let a: Int = 1
let b: Float = 1.2
let sum = a + b // Binary operator '+' cannot be applied to operands of type 'Int' and 'Float'

위의 예시를 보면 IntFloat 형의 합을 구하려하자
Binary operator '+' cannot be applied to operands of type 'Int' and 'Float' 이라는 에러가 뜬다.




언어별 타입 정리




참고 문서
1. 약타입과 강타입
2. 정적타입 동적타입
3. 정적타입 동적타입2

profile
교훈없는 경험은 없다고 생각하는 2년차 iOS 개발자입니다.

0개의 댓글