객체, 클래스, 인스턴스는 어떻게 구분해야 하는가
객체지향을 처음 공부할 때 가장 헷갈리는 단어가 객체, 클래스, 인스턴스다. 세 단어가 비슷한 맥락에서 함께 등장하지만, 같은 의미는 아니다. 이 차이를 흐리게 이해하면 이후에 상속, 캡슐화, 생성자, 메모리 모델 같은 개념도 같이 흐려진다.
객체란 무엇인가
객체는 상태와 동작을 함께 가진 독립적인 단위다.
예를 들어 사용자, 주문, 계좌 같은 개념을 코드로 표현할 때, 각각의 데이터와 그 데이터에 대해 수행할 동작이 함께 묶인 대상을 객체라고 본다.
객체는 보통 다음 두 가지를 가진다.
- 상태: 필드, 속성, 값
- 동작: 메서드, 행위, 규칙
즉, 객체는 단순한 데이터 묶음이 아니라 의미 있는 행동의 주체다.
클래스란 무엇인가
클래스는 객체를 만들기 위한 설계도다.
자바에서는 class 키워드로 타입을 정의한다.
1
2
3
4
5
6
7
8
9
10
11
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
위 코드는 Person이라는 객체를 어떤 구조와 동작으로 만들지 정의한 것이다. 이 시점에는 아직 실제 사람이 메모리에 생성된 것은 아니다.
클래스는 형식과 규칙을 정의하는 틀이고, 실행 중의 실체는 아니다.
인스턴스란 무엇인가
인스턴스는 클래스를 바탕으로 실제로 생성된 객체다.
1
Person person = new Person("Alice");
여기서 new Person("Alice")로 생성된 실체가 인스턴스다. 즉, 인스턴스는 클래스가 메모리 상에 구체화된 결과다.
실무에서는 객체와 인스턴스를 거의 같은 뜻처럼 쓰는 경우도 많지만, 엄밀히 보면 관점이 다르다.
- 객체: 상태와 동작을 가진 개념적 실체
- 인스턴스: 어떤 클래스로부터 생성되었는지까지 포함한 표현
person은 객체이면서 동시에 Person 클래스의 인스턴스다.
객체와 클래스는 왜 다른가
클래스는 설계도이고, 객체는 설계도를 통해 만들어진 실행 단위다.
예를 들어 아파트 설계도와 실제 아파트를 같은 것으로 보지 않는 것과 비슷하다.
- 클래스는 정의
- 객체는 실행 중 존재하는 대상
이 구분이 중요한 이유는, 클래스 수준에서 정의된 것과 인스턴스 수준에서 존재하는 것을 나누어 생각해야 하기 때문이다.
예를 들어:
- 클래스 변수(
static)는 클래스에 속한다 - 인스턴스 변수는 객체마다 별도로 가진다
클래스와 인스턴스는 왜 다른가
클래스는 타입 정의이고, 인스턴스는 그 타입의 실제 값이다.
예를 들어 String 클래스 자체와 "hello"라는 문자열 인스턴스는 다르다. List 인터페이스와 new ArrayList<>()로 만든 실제 리스트도 다르다.
이 구분이 익숙해지면 다음 문장들이 자연스럽게 이해된다.
- 여러 인스턴스가 하나의 클래스를 공유한다
- 인스턴스마다 상태는 다르지만 동작 규약은 클래스가 정한다
- 같은 클래스라도 생성된 인스턴스는 각자 다른 값을 가진다
흔한 오해
객체와 클래스가 같은 것처럼 느껴지는 경우
초기 학습 단계에서는 “Person 객체를 만든다”와 “Person 클래스를 만든다”가 한 흐름에서 등장해서 같은 것으로 느껴지기 쉽다. 하지만 클래스는 정의이고, 객체는 결과다.
객체와 인스턴스가 완전히 같은 말이라고 생각하는 경우
실무 대화에서는 거의 섞어 쓰지만, 인스턴스는 어떤 클래스의 실체인지까지 강조하는 표현이다. 객체는 더 넓은 개념으로 이해하면 된다.
왜 이 구분이 중요한가
이 차이를 명확히 이해해야 다음 주제들이 자연스럽게 연결된다.
- 생성자와
new this와 인스턴스 참조static과 클래스 멤버- 상속과 다형성
- 메모리 모델에서 객체가 생성되고 참조되는 방식
즉, 객체, 클래스, 인스턴스는 초급 개념 같지만 자바 전체를 이해하는 기준점이 된다.
정리
- 클래스는 객체를 만들기 위한 정의다
- 객체는 상태와 동작을 가진 실행 단위다
- 인스턴스는 특정 클래스로부터 생성된 실제 객체다
세 단어를 정확히 구분하면, 이후의 객체지향 개념을 외우지 않고 구조로 이해하기 쉬워진다.
댓글
아직 댓글이 없습니다