# 클래스와 객체, 인스턴스
클래스와 객체, 인스턴스 🤔
프로그래밍을 하면서 자주 마주치는 개념 중 하나가 바로 클래스(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(); // 객체
여기서 a
는 Person
클래스를 기반으로 생성된 객체이다.
인스턴스(Instance) 💡
그렇다면 인스턴스는 무엇일까? 인스턴스는 객체가 메모리에 할당된 상태를 의미한다. 즉, 객체와 같은 의미로 사용될 수도 있지만, 좀 더 구체적으로는 특정 클래스의 실체화된 결과물이다.
Person b;
b = new Person("taejung", 1, 1000); // 인스턴스
여기서 b
는 Person
클래스의 객체이면서 동시에 메모리에 할당된 인스턴스이다.
객체와 인스턴스의 차이점 ⚖️
둘의 차이점을 다시 한 번 정리해보자.
개념 | 설명 |
---|---|
객체(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(...)
을 통해 메모리에 할당되면서 인스턴스가 된다.
마무리 🎯
클래스는 객체를 만들기 위한 설계도이고, 객체는 클래스를 기반으로 생성된 실체이다. 인스턴스는 객체가 메모리에 할당된 상태를 의미한다. 결국 모든 인스턴스는 객체이지만, 모든 객체가 인스턴스인 것은 아니다.
이제 객체와 인스턴스의 차이를 좀 더 명확히 이해할 수 있을 것 같다! 😊