반응형
강타입
서로 다른 타입 간의 연산을 엄격하게 제한하는 타입 시스템
특징
- 암묵적인(자동) 타입 변환을 거의 허용하지 않음.
- 잘못된 타입끼리 연산하려고 하면 무조건 에러.
예시 언어: 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 |
댓글