CS 공부

# 클래스와 객체, 인스턴스

박태정 입니다. 2025. 2. 16. 00:09
반응형

클래스와 객체, 인스턴스 🤔

프로그래밍을 하면서 자주 마주치는 개념 중 하나가 바로 클래스(class), 객체(object), 인스턴스(instance) 이다. 하지만 이 개념들이 헷갈릴 때가 많다. 그래서 오늘은 이를 정리해보려고 한다.

클래스(Class) 🏗️

클래스는 객체를 만들어 내기 위한 틀이다. 쉽게 말해, 객체를 만들기 위한 설계도라고 할 수 있다. 클래스 안에는 객체가 가질 속성(변수)과 동작(메서드) 들이 정의된다.

class Person {
    String name;
    int level;
    int experience;

    Person() {
        this.name = "Unknown";
        this.level = 1;
        this.experience = 0;
    }

    Person(String name, int level, int experience) {
        this.name = name;
        this.level = level;
        this.experience = experience;
    }

    void levelup() {
        this.level++;
    }
}

위의 Person 클래스는 name, level, experience 속성을 가지고 있고, levelup() 메서드를 가진다. 이 클래스를 바탕으로 여러 개의 객체를 생성할 수 있다.

객체(Object) 🧩

객체는 클래스에서 만들어지는 실체다.

Person a = new Person(); // 객체

여기서 aPerson 클래스를 기반으로 생성된 객체이다.

인스턴스(Instance) 💡

그렇다면 인스턴스는 무엇일까? 인스턴스는 객체가 메모리에 할당된 상태를 의미한다. 즉, 객체와 같은 의미로 사용될 수도 있지만, 좀 더 구체적으로는 특정 클래스의 실체화된 결과물이다.

Person b;
b = new Person("taejung", 1, 1000); // 인스턴스

여기서 bPerson 클래스의 객체이면서 동시에 메모리에 할당된 인스턴스이다.

객체와 인스턴스의 차이점 ⚖️

둘의 차이점을 다시 한 번 정리해보자.

개념 설명
객체(Object) 클래스를 기반으로 만들어진 실체
인스턴스(Instance) 객체가 메모리에 할당된 상태

코드로 비교해보기

public static void main(String[] args) {
    Person a = new Person(); // 객체 & 인스턴스
    a.levelup();

    Person b; // 아직 메모리에 할당되지 않음 (객체 X)
    b = new Person("taejung", 1, 1000); // 객체 & 인스턴스
}

위 코드에서 a는 생성과 동시에 인스턴스가 된다. 반면 b는 먼저 선언만 되었기 때문에 아직 인스턴스가 아니다. 하지만 new Person(...)을 통해 메모리에 할당되면서 인스턴스가 된다.

마무리 🎯

클래스는 객체를 만들기 위한 설계도이고, 객체는 클래스를 기반으로 생성된 실체이다. 인스턴스는 객체가 메모리에 할당된 상태를 의미한다. 결국 모든 인스턴스는 객체이지만, 모든 객체가 인스턴스인 것은 아니다.

이제 객체와 인스턴스의 차이를 좀 더 명확히 이해할 수 있을 것 같다! 😊

반응형