객체와 클래스 - 클래스, 인스턴스, 생성자
요약
정보처리기사 실기에 출제되는 객체지향의 기초 개념을 정리합니다. 클래스와 객체(인스턴스)의 관계, 속성과 메서드, 생성자의 역할을 Java 코드 예시와 함께 알아봅니다.
| 용어 | 키워드 |
|---|---|
| 클래스(Class) | 설계도, 틀, 속성과 메서드 정의 |
| 객체(Object) | 클래스의 인스턴스, new 키워드로 생성, 실체 |
| 인스턴스(Instance) | 클래스로부터 생성된 객체, 메모리에 할당 |
| 속성(Field) | 객체의 데이터, 멤버 변수 |
| 메서드(Method) | 객체의 기능, 멤버 함수 |
| 생성자(Constructor) | 객체 생성 시 초기화, 클래스명과 동일 |
클래스란? 쌩기초
클래스(Class) 는 객체를 만들기 위한 설계도(틀) 입니다. 붕어빵 틀에 비유할 수 있습니다. 틀(클래스) 하나로 여러 개의 붕어빵(객체)을 만들 수 있습니다.
클래스는 속성(데이터) 과 메서드(기능) 를 정의합니다.
속성은 필드, 멤버 변수1라고도 부르고, 메서드는 멤버 함수2라고도 부릅니다. 속성, 필드, 멤버 변수는 모두 같은 것을 가리키는 다른 이름입니다.

C언어 구조체와 비교
C언어의 구조체(struct)를 배웠다면, 클래스는 쉽게 이해할 수 있습니다. 구조체도 "설계도를 만들고, 그 설계도로 실제 데이터 공간을 만드는" 두 단계로 나뉘었습니다. 클래스도 똑같습니다.
| 구분 | C언어 구조체 | Java 클래스 |
|---|---|---|
| 역할 | 설계도(틀) | 설계도(틀) |
| 담을 수 있는 것 | 데이터만 | 데이터 + 기능(메서드) |
| 실체 만들기 | struct Student s1; | Student s1 = new Student(); |
| 실체의 이름 | 구조체 변수 | 객체(인스턴스) |
핵심 차이는 하나입니다. 구조체는 데이터만 묶지만, 클래스는 데이터와 기능을 함께 묶습니다.
객체(인스턴스)란? 쌩기초
객체(Object) 는 클래스(설계도)로부터 만들어진 실체입니다. new 키워드를 사용하여 생성합니다. 클래스로부터 생성된 객체를 해당 클래스의 인스턴스(Instance) 라고 합니다.
Student는 클래스(설계도)입니다s1,s2는 Student 클래스의 객체(인스턴스) 입니다- 하나의 클래스로 여러 개의 객체를 만들 수 있습니다

new Student()가 실행되면?
"객체를 생성한다"는 것은 구체적으로 무엇을 의미할까요?
클래스는 설계도일 뿐, 클래스 코드 자체는 프로그램에 포함되지만 name이나 dream에 실제 값을 담을 공간은 아직 만들어지지 않았습니다. new 키워드를 사용해야 비로소 설계도를 바탕으로 메모리에 실제 공간이 만들어집니다. 이것이 "객체가 생성된다"의 의미입니다.
위 코드가 실행되면:
s1 안에 객체 데이터가 통째로 들어있는 것이 아닙니다. s1에는 객체가 있는 메모리 위치(참조) 가 저장됩니다. 참조란 객체가 저장된 메모리 주소를 가리키는 것으로, 주소를 적어둔 메모 같은 것입니다. 그래서 s1과 s2는 각각 다른 객체를 가리키며, 한쪽을 수정해도 다른 쪽에 영향을 주지 않습니다.

속성과 메서드 쌩기초
객체는 속성 과 메서드를 가집니다. 데이터와 기능을 하나의 객체로 묶는 것이 객체지향 프로그래밍의 핵심입니다.
| 구분 | 설명 | 예시 |
|---|---|---|
| 속성 | 객체가 가지는 데이터 | name, dream |
| 메서드 | 객체가 수행하는 기능 | study(), getName() |
클래스 vs 객체 비교 쌩기초
| 구분 | 클래스 | 객체(인스턴스) |
|---|---|---|
| 정의 | 객체를 만들기 위한 설계도 | 클래스를 기반으로 생성된 실체 |
| 비유 | 붕어빵 틀 | 붕어빵 |
| 메모리 | 값을 담을 공간은 없음 | new + 생성자로 생성 시 메모리에 할당. 변수에는 참조(주소)가 저장됨 |
| 개수 | 하나의 설계도 | 여러 개 생성 가능 |
| 예시 | class Student { ... } | new Student() |
생성자 (Constructor) 기초
생성자는 객체가 생성될 때 자동으로 호출되어 객체를 초기화하는 특별한 메서드입니다. 클래스 이름과 동일하며, 반환 타입이 없습니다.

생성자의 특징:
- 클래스 이름과 동일합니다
- 반환 타입이 없습니다 — 일반 메서드는 앞에
void나int같은 타입을 쓰지만, 생성자는 아무것도 쓰지 않습니다 - 객체 생성 시
new와 함께 자동 호출됩니다 - 생성자를 정의하지 않으면 컴파일러가 기본 생성자를 자동으로 만듭니다
생성자를 직접 정의하지 않으면 컴파일러가 아래와 같은 기본 생성자를 자동으로 만들어줍니다.
반면 매개변수가 있는 생성자를 직접 정의하면, 기본 생성자는 자동으로 만들어지지 않습니다.
관련 이론
- 객체지향 프로그래밍 vs 절차지향 프로그래밍: 두 프로그래밍 패러다임의 차이
- 객체 지향 설계 원칙 - SOLID: 객체지향 설계의 5대 원칙
- 상속: 부모 클래스의 속성과 메서드를 물려받는 개념 (
this키워드 상세 설명 포함) - 추상 클래스: 추상화를 구현하는 Java 문법
- 인터페이스: 다형성과 추상화를 구현하는 Java 문법
- 오버라이딩과 오버로딩: 다형성의 대표적인 예시
Footnotes
-
클래스 안에 선언된 변수. 객체의 상태(데이터)를 저장합니다. ↩
-
클래스 안에 정의된 함수. 객체의 동작(기능)을 구현합니다. ↩
-
null은 아직 아무 값도 넣지 않은 상태를 의미합니다. String 속성의 기본값입니다. ↩
-
생성자(Constructor)는 객체가 생성될 때 자동으로 실행되어 초기화를 담당하는 특별한 메서드입니다. 아래 "생성자" 섹션에서 자세히 설명합니다. ↩
-
기본 생성자란 매개변수가 없는 생성자(
Student() {})입니다. 아래 "생성자" 섹션에서 자세히 설명합니다. ↩ -
참조(Reference)란 객체가 저장된 메모리 주소를 가리키는 값입니다. 주소를 적어둔 메모 같은 것입니다. ↩