IT공부

[Unity] 왜 .cs 파일을 스크립트 파일이라고 부를까? 그리고 인터프리터 언어인가?

shine94 2025. 4. 27. 18:50

🤔 유니티에서 ".cs 파일"을 왜 스크립트 파일이라고 부를까?

유니티를 공부하다가,

".cs 파일을 왜 스크립트 파일이라고 부를까?" 하는 궁금증이 생겼다

 

.cs 파일은 사실 C# 소스 파일(C# Source)이다

 

즉, 스크립트(script)의 약자가 아니다!😲 

 

 

그런데도 불구하고, 유니티에서는 .cs 파일을 스크립트 파일이라고 부른다

 

[왜 그럴까......?]

유니티에서는 .cs 파일을

하나의 독립된 프로그램처럼 만드는 것이 아니라, 게임 오브젝트에 붙여서 동작(Behavior)을 추가하는 코드 조각으로 사용한다

 

이 방식은 마치

.html 파일에 자바 스크립트를 붙여서 페이지에 동작을 추가하는 것과 매우 비슷하다

 

즉, html 파일에 붙은 javascript처럼, 게임 오브젝트에 붙은 .cs 파일이랄까...? ㅎㅎ

 

 

[기존 소프트웨어 개발에서 스크립트(script)란......?]

동작을 정의하는 짧은 코드를 뜻하는데, 유니티의 .cs 파일 사용 방식이 이 개념과 딱 들어 맞는다

 

그래서 유니티에서 자연스럽게 .cs파일을 스크립트 파일이라고 부르게 된 것이다

 

 

😲 스크립트 파일인데, 인터프리터 언어일까?

유니티에서 .cs 파일을 스크립트 파일이라고 부르다 보니, 자연스럽게 이런 생각이 들었다.

"스크립트 파일이면 인터프리터 언어인가?!?!"

 

 

왜냐하면 나는 "스크립트"라는 단어를 들으면, 인터프리터 방식으로 한 줄씩 해석하고 실행하는 언어로 떠올렸기 때문이다

(대표적으로 Python, JavaScript 같은 언어들)

 

하지만 이걸 공부하면서 알게 됐다

현대에서는 "스크립트"라는 단어가 꼭 "인터프리터 언어"를 의미하지는 않는다

 

전통적으로는 스크립트 = 인터프린트 언어가 맞았다

 

하지만 지금은 가볍게 동작을 추가할 수 있는 코드를 통틀어 스크립트라고 부른다

실행방식(컴파일이든 인터프린트든)은 중요한 기준이 아니다

 

결국, 유니티의 .cs 파일은
C#으로 작성된 컴파일 언어이면서 하이브리드 방식이지만,
오브젝트에 동작을 추가하는 짧은 코드라는 점에서 스크립트 파일처럼 다루는 것이다

 

 

🚀 요즘은 한 줄 한 줄 해석하는 언어가 없다

요즘 인터프린트 언어들도

소스코드를 바로 해석하지 않고

먼저 바이트코드(Bytecode)로 변환하거나, 내부적으로 중간 형태(IR)로 최적한 뒤 실행하는 경우가 많다

 

(예) Python은 .py 파일을 .pyc 바이트코드로 변환,

      JavaScript(V8 엔진)는 내부에서 최적화를 거쳐 실행 속도를 높임

 

즉, 겉으로 보기에는 코드를 수정하면 바로 반영되는 것처럼 보이지만
내부적으로는 한 줄 한 줄 해석하는 게 아니라 최적화 과정을 거쳐 빠르게 실행하는 방향으로 진화했다

 

 

🤔 여기서 헷갈렸던 것: JIT은 인터프리터인가?

공부를 하면서 처음에는

"JIT 컴파일러가 변경된 부분만 컴파일한다"는 이야기를 듣고,
"변경된 부분만 다루니까 인터프리터처럼 동작하는 거 아냐?"라고 생각했다

 

하지만 정확히는 그렇지 않다

JIT는 소스 코드가 아니라 중간 언어를 기계어로 컴파일한다

 

변경된 부분만 컴파일이란 것은 성능 최적화를 위한 전략일 뿐이지

인터프린트처럼 그냥 해석만 하는 것이 아니다

 

 

✅ 최종 한 줄 요약

"스크립트 = 인터프리트는 옛날 이야기고, C#과 Java는 런타임 컴파일하는 하이브리드 언어다"

 ㄴ 이때, JIT 컴파일러는 메서드 단위 또는 블록 단위로 실행 도중에 기계어로 변환하여 실행한다