프로그래밍을 처음 배우다 보면 클래스, 객체, 인스턴스라는 개념에서 헷갈리는 경우가 많다. 이 글에서는 이 세 가지 개념을 쉽게 이해할 수 있도록 정리해보았다.
클래스는 객체를 만들기 위한 설계도 또는 틀이다.
어떤 속성과 동작(메서드)을 가질지 정의해놓은 것이다.
예를 들어, Person이라는 클래스를 만든다고 하면 이 클래스에는 다음과 같은 것들이 포함될 수 있다:
즉, 클래스는 아직 만들어지지 않은 '붕어빵'을 위한 '붕어빵 틀'과 같다.
class Person {
String name;
int age;
void speak() {
System.out.println("Hello!");
}
}
객체는 클래스를 바탕으로 실제로 만들어진 실체이다.
클래스로부터 만들어진 붕어빵 한 개, 한 개가 바로 객체다.
붕어빵 틀(클래스)에서 팥 100g, 팥 200g이 들어간 붕어빵(객체)이 각각 만들어질 수 있는 것처럼, 같은 클래스로 만들어진 객체들도 속성 값은 서로 다를 수 있다.
Person a = new Person(); // a는 Person 클래스에서 만들어진 객체
a.name = "철수";
a.age = 20;
인스턴스는 조금 더 메모리 상에서 '객체가 존재하는 상태'를 강조하는 표현이다.
즉, 클래스에서 객체가 생성되어 메모리에 올라가면 그때 우리는 '인스턴스'라고 부른다.
정리하자면 다음과 같다:
Person a = new Person(); // a는 Person 클래스의 인스턴스
Person b; // b는 아직 메모리에 객체가 올라간 상태가 아님 → 인스턴스 아님
메서드는 클래스 안에 정의된 함수로, 객체가 할 수 있는 동작을 의미한다.
객체의 속성을 바꾸거나, 특정 동작을 수행할 수 있도록 한다.
a.speak(); // "Hello!" 출력
| 개념 | 비유 |
|---|---|
| 클래스 | 붕어빵 틀 |
| 객체 | 붕어빵 (속성 값 다름) |
| 인스턴스 | 메모리에 올라간 붕어빵 |
| 메서드 | 붕어빵의 맛을 바꾸는 도구 |