---
title: "Strong Typing 언어와 Coercion"
author: "jungsuk lee"
published_at: "2026-10-01T07:06:11.737Z"
updated_at: "2026-10-01T07:06:11.737Z"
tags: ["coercion","언어","c언어","ada","java"]
canonical_url: "https://ariser.io/@writer_5a76322474a3/strong-typing-%EC%96%B8%EC%96%B4"
ai_assisted: true
---

# Strong Typing 언어와 Coercion

이 글은 AI가 활용됐습니다.

[원문](https://ariser.io/@writer_5a76322474a3/strong-typing-%EC%96%B8%EC%96%B4)



프로그래밍에서 "Strong Typing"과 "Coercion"은 코딩하다가 가끔가다가 1번씩 회자되는 정말 중요한 개념이다. Strong Typing은 말 그대로 타입이 강하게 묶여서, 타입이 다른 값끼리 암묵적으로 섞여 쓰이는 것을 엄격히 제한하거나 아예 허용하지 않는 성향을 말한다. 반면 Coercion(형 변환/강제 변환)은 언어가 값을 한 타입에서 다른 타입으로 바꿔 주는 행위를 뜻하며, 개발자가 명시적으로 요청하지 않아도 일어나는 암묵적 coercion도 있다. 예를 들어서 int a=3; float b=3.0; c = a + b; 일 때 c를 6.0으로 넣고자 임의의 3.0이 생겨서 더해지는 그런 현상을 coercion이라고 한다.

간단히 말해, "Strong Typing이 강할수록 암묵적 Coercion은 적어지고, 약할수록 언어가 대신 맞춰 주는 범위가 넓어지는 경향이 있다(결국 언어를 쓰면서 주기적으로 컴파일 실패를 자주 겪는거보단 컴파일러가 추론이 잦아지는게 차선이라 보는듯)"고 볼 수 있다. 다만 이 구분은 절대적이지 않고, 언어마다 정책이 약간씩 다르다. 어떤 언어는 암묵적 변환을 최소화해 실수를 줄이고, 어떤 언어는 편의성과 유연성을 위해 제한된 coercion을 허용한다.

아래는 AI에게 물어본, 주요 언어별 이 개념이 어떻게 드러나는지 아주 짧게 정리한 것이다.

- JavaScript: 암묵적 coercion이 매우 눈에 띄는 언어다. 예를 들어 문자열과 숫자를 더할 때 숫자가 문자열로 바뀌거나, 비교문에서 타입이 섞여 예상 밖으로 평가될 수 있다. 유연하지만, 타입을 신경 쓰지 않으면 버그가 생기기 쉽다.
- Python: 강한 타입 체크에 가까운 편이라, 서로 맞지 않는 타입을 암묵적으로 섞어 쓰는 일이 제한적이다. 문자열과 숫자를 그냥 더하려는 식의 코드는 보통 오류로 걸린다. 대신 명시적인 변환은 자주 필요하다.
- Java: 정적 타입 언어라 컴파일 시점에 타입 불일치 많은 부분이 걸린다. 문자열 연결처럼 일부 맥락에서는 변환이 일어나기도 하지만, 전반적으로 암묵적 coercion은 제한적이고 명시적 캐스팅이나 변환이 더 강조된다.
- C/C++: 포인터, 정수, 부동소수점 사이에서 역사적 이유로 암묵적 변환이 꽤 넓은 편이다. 편리할 때도 있지만, 의도하지 않은 변환이 성능이나 동작에 영향을 줄 수 있어 주의가 필요하다.
- TypeScript: JavaScript의 유연함을 기반으로 하되, 타입 정보를 붙여 더 강하게 체크하려는 목적이 있다. 따라서 암묵적 coercion을 완전히 없애기보다는, 타입으로 그 위험을 줄이고 개발자가 실수하기 쉬운 부분을 드러내는 쪽에 가깝다.
- Go: 단순한 타입 규칙을 따르고, 서로 다른 타입 사이의 암묵적 변환을 엄청나게 엄격히 다루는 편이다. 편의를 위해 많은 것을 자동으로 맞춰 주기보다, 변환이 필요하면 명시적으로 쓰도록 유도한다.
- Rust:값에 대한 Coercion은 없고, 대신 소유권을 안전하게 하는 Coercion은 주기적으로 진행함.

결국 Strong Typing과 Coercion은 "언어가 타입을 얼마나 엄격하게 다루느냐"와 "개발자 대신 얼마나 알아서 바꿔 주느냐"의 문제다. 짧고 거칠게 정리하면, 안전성을 중시하면 coercion을 줄이고, 편의성과 빠른 작성을 중시하면 어느 정도 허용하는 식이다. 중요한 건 어떤 쪽이 무조건 좋다기보다, 그 언어에서 어떤 변환이 암묵적으로 일어나는지 알고 쓰는 것이다. 그리고 직관에 조금 반할 수도 있기때문에 자신이 업으로 쓰는 특정 언어가 있으면 AI시대라 생기는 코드가 많은 만큼 더더욱 '인간의 검수 체급'을 올리기 위해 이런쪽 공부를 좀 해주면 좋을 것 같다.
