프로그래밍/개념 뽀개기

인스턴스란 무엇인가?

lamarcK 2025. 3. 29. 07:53

✨ 인스턴스(Instance)란 무엇일까? (쉬운 설명 + 상세 설명)

인스턴스(Instance)라는 말, 처음 들으면 조금 헷갈릴 수 있다. 가장 쉽게 비유하자면, 붕어빵 틀과 실제 붕어빵의 관계를 생각하면 된다!

🍞🚗 쉬운 비유로 이해하기

  • 클래스 (Class): 붕어빵을 만드는 '틀' 또는 자동차를 만드는 **'설계도'**와 같다. 어떤 모양(속성)을 가질지, 어떤 기능(행동)을 할 수 있는지 정의해 놓은 템플릿(Template)이다. 이 자체는 실제 붕어빵이나 자동차가 아니다. 그냥 '틀'이나 '설계도'일 뿐이다.
  • 인스턴스 (Instance): 그 '틀'을 사용해서 실제로 만들어낸 '붕어빵' 또는 '설계도'를 보고 실제로 조립하여 만들어낸 '자동차'를 말한다. 즉, 클래스라는 설계도를 바탕으로 메모리에 실체화된 객체(Object)이다.

📌 핵심:

클래스(Class)는 개념적인틀이고, 인스턴스(Instance)는 그 틀에서 찍어낸 실제 사물이다!


자세히 알아보자면

    1. 클래스(Class)와 객체(Object):
      • 객체 지향 프로그래밍(Object-Oriented Programming, OOP)에서 클래스객체를 만들기 위한 청사진(Blueprint) 또는 템플릿이다. 클래스는 객체가 가질 속성(Property, 데이터)행동(Method, 기능)을 정의한다.
      • 객체(Object)는 클래스에 정의된 속성과 행동을 가지는 실체이다.
    2. 인스턴스(Instance)는 '실체화된 객체':
      • 인스턴스는 클래스를 기반으로 메모리에 실제로 생성된 객체를 지칭하는 용어다. 즉, "어떤 클래스의 인스턴스"라고 말하면, "그 클래스를 보고 실제로 만들어낸 객체"라는 의미다.
      • 예를 들어, 자동차라는 클래스가 있다면, 도로 위를 달리는 '나의 파란색 자동차''너의 빨간색 자동차' 는 각각 자동차 클래스의 인스턴스가 된다.
    3. 인스턴스화 (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
      
    4. 독립적인 상태(State):
      • 같은 클래스로부터 생성된 인스턴스들이라도, 각 인스턴스는 자신만의 속성 값(State)을 가질 수 있다.
      • 위 예시에서 myCar의 color는 '파란색'이고, yourCar의 color는 '빨간색'이다. myCar의 fuel이 줄어도 yourCar의 fuel에는 영향을 주지 않는다. 즉, 각 인스턴스는 독립적인 상태를 유지한다.
    5. 공유되는 행동(Behavior):
      • 일반적으로, 같은 클래스로부터 생성된 인스턴스들은 클래스에 정의된 **동일한 행동(메서드)**을 공유한다.
      • myCar와 yourCar 모두 drive()라는 동일한 메서드를 가지고 있지만, 각자 자신의 fuel 상태에 따라 동작한다.
    6. 왜 인스턴스를 사용할까?
      • 현실 세계 모델링: 현실 세계의 개별적인 사물들(자동차, 사람, 고양이 등)을 프로그램 내에서 각각의 독립적인 객체(인스턴스)로 표현하기 위해 사용한다.
      • 상태 관리: 각 객체의 고유한 상태를 저장하고 관리할 수 있다.
      • 재사용성: 클래스라는 틀을 재사용하여 동일한 구조와 행동을 가진 여러 인스턴스를 효율적으로 생성할 수 있다.

요약:

  • 인스턴스클래스(설계도)를 바탕으로 실제로 메모리에 만들어진 객체(실체)를 의미하며, 각각 고유한 상태(값)를 가질 수 있지만, 클래스에 정의된 행동(기능)은 공유한다. new 키워드를 통해 인스턴스화 과정을 거쳐 생성된다.