Jin's IT Story
자바 클래스와 자바스크립트 프로토타입 차이 쉽게 이해하기 본문
목차

클래스와 프로토타입, 무엇이 다를까?
프로그래밍 언어를 배우다 보면 “자바(Java)는 클래스(class) 기반 언어”, “자바스크립트(JavaScript)는 프로토타입(prototype) 기반 언어”라는 말을 자주 듣게 됩니다. 처음 들으면 어렵게 느껴지지만, 실제로는 ‘사물을 만드는 방식이 다르다’고 생각하면 훨씬 쉽게 이해할 수 있습니다.
예를 들어, 자바는 “설계도”를 먼저 만들고 그 설계도를 바탕으로 물건(객체)을 찍어내는 방식이고, 자바스크립트는 이미 만들어진 물건을 복사하거나 변형하면서 새로운 물건을 만드는 방식입니다. 이 차이가 바로 클래스와 프로토타입의 핵심입니다.
자바의 클래스(Class)란?
자바에서 클래스는 “객체를 만들기 위한 설계도”입니다.
예를 들어 ‘자동차’라는 개념을 코드로 표현한다고 해봅시다. 자동차에는 색상, 브랜드, 속도 같은 속성이 있고, 달리기(run)나 멈추기(stop) 같은 기능이 있습니다. 이 모든 걸 묶어서 정의한 것이 바로 클래스입니다.
class Car {
String color;
String brand;
void run() {
System.out.println("자동차가 달립니다!");
}
}
이 코드는 자동차라는 설계도입니다. 아직 진짜 자동차는 아니죠.
이 클래스를 이용해서 실제 자동차를 만들려면 new 키워드를 사용해야 합니다.
Car myCar = new Car();
myCar.color = "red";
myCar.run();
이렇게 하면 “빨간색 자동차 객체”가 만들어집니다.
즉, 자바에서는 클래스를 정의하고, 그 클래스로 객체를 생성해야만 실제로 사용할 수 있습니다.
이처럼 자바의 클래스는 객체가 만들어지기 전에 구조를 명확히 정의해야 하는 체계적인 방식입니다.
이런 이유로 자바는 규모가 크고 안정성이 필요한 프로그램(예: 은행 시스템, 모바일 앱, 기업 서버 등)에 자주 사용됩니다.
자바스크립트의 프로토타입(Prototype)이란?
자바스크립트에는 자바처럼 “클래스”라는 개념이 원래 존재하지 않았습니다. 대신 프로토타입(prototype)이라는 독특한 구조가 있습니다.
프로토타입은 “기존 객체를 복사해서 새로운 객체를 만드는 방식”입니다.
즉, 설계도 없이 이미 존재하는 물건을 보고 “이걸 참고해서 비슷한 걸 하나 더 만들자”라고 하는 개념이지요.
예를 들어보겠습니다.
function Car(color) {
this.color = color;
}
Car.prototype.run = function() {
console.log("자동차가 달립니다!");
}
let myCar = new Car("red");
myCar.run();
이 코드에서 Car는 함수처럼 보이지만, 실제로는 객체를 만드는 생성자 역할을 합니다. 그리고 Car.prototype.run을 통해 모든 자동차 객체가 공통으로 사용할 수 있는 기능(메서드)을 정의했습니다. 이때 prototype이라는 연결 고리가 객체들 사이를 이어줍니다.
즉, 자바스크립트의 객체는 “프로토타입 체인(prototype chain)”을 통해 서로 연결되어 있으며, 필요한 기능을 위쪽(부모 객체)에서 찾아서 사용할 수 있습니다.
이 구조는 자바의 ‘클래스 상속’과 비슷한 개념처럼 보이지만, 사실 훨씬 유연합니다. 객체를 만든 후에도 자유롭게 속성을 추가하거나 수정할 수 있기 때문입니다.
클래스 기반과 프로토타입 기반의 차이
| 구분자바(Java) | 클래스자바스크립트(JavaScript) | 프로토타입 |
| 설계 방식 | 설계도(클래스)를 먼저 정의 | 이미 존재하는 객체를 복사 |
| 객체 생성 방식 | new 키워드로 클래스 인스턴스 생성 | 생성자 함수 또는 객체 리터럴 사용 |
| 상속 방식 | 클래스 상속 (extends 키워드) | 프로토타입 체인으로 상속 |
| 변경 가능 여부 | 정의된 클래스는 변경이 어려움 | 객체 생성 후에도 자유롭게 수정 가능 |
| 실행 시점 | 컴파일 시점에 구조 고정 | 실행 중에도 구조 변경 가능 |
이처럼 자바는 구조적이고 안정적인 설계 방식을, 자바스크립트는 유연하고 동적인 방식을 채택하고 있습니다.
쉽게 말해, 자바는 “규칙이 정해진 블록놀이”, 자바스크립트는 “자유롭게 조립하는 점토놀이” 같은 느낌입니다.
자바스크립트의 클래스 문법은 진짜 클래스일까?
요즘 자바스크립트에서도 class라는 키워드를 사용할 수 있습니다. 예를 들어, 이렇게 작성하죠.
class Car {
constructor(color) {
this.color = color;
}
run() {
console.log("자동차가 달립니다!");
}
}
겉보기에는 자바의 클래스와 거의 똑같아 보입니다. 하지만 실제 내부 동작은 여전히 프로토타입 기반입니다.
즉, class 키워드는 문법적으로 편리하게 보이도록 만든 “겉모습”일 뿐, 엔진 내부에서는 여전히 프로토타입 체인을 통해 작동합니다. 이 덕분에 자바스크립트 개발자들도 객체를 다루기가 훨씬 쉬워졌지만, 근본적인 언어의 동작 원리는 여전히 자바와 다르다는 점을 기억해야 합니다.
초보자를 위한 비유로 이해하기
조금 더 쉽게 비유해보면 이렇습니다. 자바의 클래스는 “자동차 공장”입니다. 공장에서 정해진 설계도에 따라 같은 모양의 자동차를 계속 찍어냅니다. 한 번 설계가 정해지면 바꾸기 어렵습니다.
반면 자바스크립트의 프로토타입은 “수공예 작업실”입니다. 기존에 만든 자동차를 보고 “이번엔 바퀴를 다르게 달아볼까?” 하며 기존 모델을 조금씩 바꾸고 새로운 것을 만들어냅니다.
즉, 자바스크립트는 즉흥적이고 창의적인 작업에 더 어울립니다.
정해진 설계도 vs 유연한 복제 방식
정리하자면, 자바의 클래스는 객체를 만들기 전에 설계를 먼저 정의하는 엄격한 방식이고, 자바스크립트의 프로토타입은 이미 존재하는 객체를 바탕으로 새로운 객체를 만들어내는 유연한 방식입니다.
두 언어 모두 객체 지향이라는 공통된 철학을 가지고 있지만, 접근하는 방식이 다릅니다.
자바는 안정성과 명확함을 중시하고, 자바스크립트는 자유로움과 확장성을 중시합니다.
프로그래밍을 처음 배우는 분이라면, 자바는 체계적인 사고를 기르기에 좋고, 자바스크립트는 실험하고 시도하기에 좋은 언어입니다. 두 언어의 이런 차이를 이해하면, 개발의 세계가 훨씬 흥미롭게 다가올 것입니다.
'DevBasics: 개발 개념 기초 다지기' 카테고리의 다른 글
| 자바와 자바스크립트 차이 쉽게 이해하기 (0) | 2025.10.29 |
|---|---|
| 로그 함수 log의 개념과 원리 완벽 정리 (0) | 2025.10.28 |
| JavaScript 비동기 처리 방식과 Promise, Async Await 개념 완벽 정리 (0) | 2025.10.27 |
| PostgreSQL 데이터베이스 기본 개념과 구조 이해 (0) | 2025.10.19 |
| CSV 파일이란? 데이터 저장과 분석의 핵심 형식 완벽 이해 (0) | 2025.10.13 |