프로그래밍/개념 뽀개기
인스턴스란 무엇인가?
lamarcK
2025. 3. 29. 07:53
✨ 인스턴스(Instance)란 무엇일까? (쉬운 설명 + 상세 설명)
인스턴스(Instance)라는 말, 처음 들으면 조금 헷갈릴 수 있다. 가장 쉽게 비유하자면, 붕어빵 틀과 실제 붕어빵의 관계를 생각하면 된다!
🍞🚗 쉬운 비유로 이해하기
- 클래스 (Class): 붕어빵을 만드는 '틀' 또는 자동차를 만드는 **'설계도'**와 같다. 어떤 모양(속성)을 가질지, 어떤 기능(행동)을 할 수 있는지 정의해 놓은 템플릿(Template)이다. 이 자체는 실제 붕어빵이나 자동차가 아니다. 그냥 '틀'이나 '설계도'일 뿐이다.
- 인스턴스 (Instance): 그 '틀'을 사용해서 실제로 만들어낸 '붕어빵' 또는 '설계도'를 보고 실제로 조립하여 만들어낸 '자동차'를 말한다. 즉, 클래스라는 설계도를 바탕으로 메모리에 실체화된 객체(Object)이다.
📌 핵심:
클래스(Class)는 개념적인틀이고, 인스턴스(Instance)는 그 틀에서 찍어낸 실제 사물이다!
자세히 알아보자면
- 클래스(Class)와 객체(Object):
- 객체 지향 프로그래밍(Object-Oriented Programming, OOP)에서 클래스는 객체를 만들기 위한 청사진(Blueprint) 또는 템플릿이다. 클래스는 객체가 가질 속성(Property, 데이터)과 행동(Method, 기능)을 정의한다.
- 객체(Object)는 클래스에 정의된 속성과 행동을 가지는 실체이다.
- 인스턴스(Instance)는 '실체화된 객체':
- 인스턴스는 클래스를 기반으로 메모리에 실제로 생성된 객체를 지칭하는 용어다. 즉, "어떤 클래스의 인스턴스"라고 말하면, "그 클래스를 보고 실제로 만들어낸 객체"라는 의미다.
- 예를 들어, 자동차라는 클래스가 있다면, 도로 위를 달리는 '나의 파란색 자동차' 나 '너의 빨간색 자동차' 는 각각 자동차 클래스의 인스턴스가 된다.
- 인스턴스화 (Instantiation):
- 클래스로부터 인스턴스(객체)를 생성하는 과정을 인스턴스화(Instantiation)라고 한다.
- 많은 프로그래밍 언어(Java, C#, JavaScript, Python 등)에서 new 키워드를 사용하여 클래스의 생성자(Constructor)를 호출함으로써 인스턴스를 생성한다.
// 자동차 클래스 (설계도) 정의 class Car { constructor(color) { this.color = color; // 속성 (Property) this.fuel = 100; } drive() { // 행동 (Method) this.fuel -= 10; console.log(`${this.color} 자동차가 운전합니다. 남은 연료: ${this.fuel}`); } } // 'Car' 클래스로부터 인스턴스 생성 (인스턴스화) let myCar = new Car('파란색'); // myCar는 Car 클래스의 인스턴스 let yourCar = new Car('빨간색'); // yourCar도 Car 클래스의 인스턴스 // 각 인스턴스는 독립적인 상태(state)를 가진다. console.log(myCar.color); // '파란색' console.log(yourCar.color); // '빨간색' myCar.drive(); // 파란색 자동차가 운전합니다. 남은 연료: 90 yourCar.drive(); // 빨간색 자동차가 운전합니다. 남은 연료: 90 // myCar의 연료를 소모해도 yourCar의 연료에는 영향이 없다. console.log(myCar.fuel); // 90 console.log(yourCar.fuel); // 90
- 독립적인 상태(State):
- 같은 클래스로부터 생성된 인스턴스들이라도, 각 인스턴스는 자신만의 속성 값(State)을 가질 수 있다.
- 위 예시에서 myCar의 color는 '파란색'이고, yourCar의 color는 '빨간색'이다. myCar의 fuel이 줄어도 yourCar의 fuel에는 영향을 주지 않는다. 즉, 각 인스턴스는 독립적인 상태를 유지한다.
- 공유되는 행동(Behavior):
- 일반적으로, 같은 클래스로부터 생성된 인스턴스들은 클래스에 정의된 **동일한 행동(메서드)**을 공유한다.
- myCar와 yourCar 모두 drive()라는 동일한 메서드를 가지고 있지만, 각자 자신의 fuel 상태에 따라 동작한다.
- 왜 인스턴스를 사용할까?
- 현실 세계 모델링: 현실 세계의 개별적인 사물들(자동차, 사람, 고양이 등)을 프로그램 내에서 각각의 독립적인 객체(인스턴스)로 표현하기 위해 사용한다.
- 상태 관리: 각 객체의 고유한 상태를 저장하고 관리할 수 있다.
- 재사용성: 클래스라는 틀을 재사용하여 동일한 구조와 행동을 가진 여러 인스턴스를 효율적으로 생성할 수 있다.
요약:
- 인스턴스는 클래스(설계도)를 바탕으로 실제로 메모리에 만들어진 객체(실체)를 의미하며, 각각 고유한 상태(값)를 가질 수 있지만, 클래스에 정의된 행동(기능)은 공유한다. new 키워드를 통해 인스턴스화 과정을 거쳐 생성된다.