본문 바로가기
프로그래밍 언어

강타입 (Strongly Typed) VS 약타입 (Weakly Typed)

by Jo_Wick 2025. 9. 18.
반응형

강타입

서로 다른 타입 간의 연산을 엄격하게 제한하는 타입 시스템

 

특징

- 암묵적인(자동) 타입 변환을 거의 허용하지 않음.

- 잘못된 타입끼리 연산하려고 하면 무조건 에러.

 

예시 언어: C++, Java, Rust

 


약타입

서로 다른 타입 간의 연산을 느슨하게 허용하는 타입 시스템

 

특징

- 암묵적 타입 변환을 많이 허용

- 의도치 않은 버그가 생길 수 있음.

 

예시 언어: Python, JavaScript


예시

C++ (정적, 약타입)

#include <stdio.h>

int main() {
    char *s = "3";
    int x = 4;
    printf("%s\n", s + x); // 위험한 코드
    return 0;
}

 

 

  • "3" + 4 는 문자열 "3"의 시작 주소에서 4바이트 뒤의 메모리를 가리킴.
  • 결과는 "3"이 아니라 이상한 메모리 값 출력
  • 타입 변환을 강제하지 않고 그냥 포인터 연산으로 처리

Java (정적, 강타입)

public class Main {
    public static void main(String[] args) {
        System.out.println("3" + 4);
    }
}

 

 

 

  • 결과: "34"
  • 문자열 연결 연산자로 작동 (+가 오버로드됨).
  • 숫자를 문자열로 자동 변환해서 안전하게 처리.

 


Python (동적, 강타입)

print("3" + 4)

 

실행결과

TypeError: can only concatenate str (not "int") to str
  • 자동 변환 허용 안 함, 명시적으로 str(4) 해야 "34".

JavaScript (동적, 약타입)

console.log("3" + 4); // "34"
console.log("3" - 4); // -1

 

  • +는 문자열로 변환 → "34"
  • -는 숫자로 변환 → -1
  • 상황에 따라 문자열 ↔ 숫자 변환을 자동으로 함

 


 

반응형

'프로그래밍 언어' 카테고리의 다른 글

로케일(Locale)이란?  (0) 2025.10.01
타입 승격 (Type Promotion)  (0) 2025.09.21
버퍼링 (Buffering)  (0) 2025.09.19
스트림 (Stream)  (0) 2025.09.19
정적 타이핑 vs 동적 타이핑  (0) 2025.09.18

댓글