
* 개념 복습과 학습 정도를 파악하고자 포스팅합니다!
* Claude, ChatGPT를 활용하여 이미지를 생성하고 활용합니다.
Java 클래스와 객체
1. 클래스(Class)란?
객체를 만들기 위한 설계도(틀) 입니다. 현실 세계의 사물이나 개념을 코드로 표현하는 방법이에요.
붕어빵 틀로 비유하면 클래스는 붕어빵 틀, 객체는 틀로 찍어낸 붕어빵이에요. 틀 하나로 붕어빵을 무한히 만들 수 있듯이, 클래스 하나로 객체를 무한히 만들 수 있어요.

2. 객체(Object)란?
클래스를 기반으로 실제로 메모리에 생성된 실체(Instance) 입니다.
객체는 두 가지를 가지는데요!
- 속성 (필드) - 객체가 가진 데이터. 예) 이름, 나이, 키
- 행동 (메서드) - 객체가 할 수 있는 동작. 예) 먹기, 자기, 달리기
현실 세계로 비유하면 아래와 같습니다.
| 현실 | 클래스 | 객체 |
| 자동차 설계도 | Car 클래스 | 내 차, 네 차 |
| 사람 | Person 클래스 | 홍길동, 이순신 |
| 스마트폰 설계도 | Phone 클래스 | 아이폰, 갤럭시 |
3. 인스턴스(Instance)란?
클래스로부터 객체를 만드는 과정을 인스턴스화(Instantiation) 라고 하고, 만들어진 객체를 인스턴스(Instance)라고 합니다.
객체와 인스턴스는 거의 같은 의미지만 관계를 강조할 때 구분해서 쓰나봐요.

Person p1 = new Person("홍길동", 25);
// p1은 객체이기도 하고, Person 클래스의 인스턴스이기도 해요.
// "p1은 Person의 인스턴스다" ← 클래스와의 관계를 강조
// "p1은 객체다" ← 실체임을 강조
4. 클래스 구조
클래스는 크게 필드, 생성자, 메서드 세 가지로 이루어져 있어요.

5. 클래스 작성과 객체 생성
클래스 작성
public class Person {
// 필드 (속성)
String name;
int age;
double height;
// 생성자 — 객체 생성 시 자동 호출
Person(String name, int age, double height) {
this.name = name; // this = 현재 객체 자신
this.age = age;
this.height = height;
}
// 메서드 (행동)
void introduce() {
System.out.println("이름: " + name + ", 나이: " + age);
}
double getBMI(double weight) {
return weight / (height * height);
}
}
객체 생성과 사용
public class Main {
public static void main(String[] args) {
// 객체 생성 — new 키워드 사용
Person p1 = new Person("홍길동", 25, 1.75);
Person p2 = new Person("이순신", 45, 1.80);
// 필드 접근
System.out.println(p1.name); // 홍길동
System.out.println(p2.age); // 45
// 메서드 호출
p1.introduce(); // 이름: 홍길동, 나이: 25
p2.introduce(); // 이름: 이순신, 나이: 45
}
}
6. 객체 생성 과정
new 키워드를 쓸 때 내부에서 어떤 일이 일어나는지 순서대로 보면 다음과 같아요!

7. 참조 타입의 특성
객체를 담는 변수는 객체 자체가 아니라 객체의 주소(참조값)를 저장합니다.
이 특성을 이해하니까 헷갈리는 코드를 쉽게 읽을 수 있더라구요..!!

Person p1 = new Person("홍길동", 25, 1.75);
Person p2 = new Person("이순신", 45, 1.80);
Person p3 = p1; // p3는 새 객체가 아니라 p1과 같은 객체를 가리킴
p3.name = "김유신"; // p3를 바꾸면
System.out.println(p1.name); // "김유신" — p1도 바뀜!
// p1과 p3가 같은 객체를 가리키기 때문
8. null과 NullPointerException
객체 변수에 아무 객체도 가리키지 않을 때 null입니다. null 상태의 변수로 메서드를 호출하면 NullPointerException이 발생됩니다.
가장 흔한 런타임 오류라고 볼 수 있지요!
Person p = null; // 아무 객체도 가리키지 않음
p.introduce(); // NullPointerException 발생!
// 방어 코드 — null 체크
if (p != null) {
p.introduce(); // 안전하게 호출
}
정리

오늘 복습하고 학습한 내용을 정리해보자면!!
클래스는 설계도, 객체는 설계도로 만든 실체, 인스턴스는 어떤 클래스로부터 만들어졌는지 관계를 강조하는 표현
이 되겠네요.. 매일매일 잊지 않도록 키워드 위주로 기억을 해야겠어요!
감사합니다 :)
'Language > Java' 카테고리의 다른 글
| [Java] 생성자 & 캡슐화 완전히 정리해버리기 (0) | 2026.04.22 |
|---|---|
| [Java] 메서드 (0) | 2026.04.20 |
| [Java] 자바는 입력을 어떻게 받아? - Scanner (0) | 2026.04.20 |
| [Java] 형변환(Type Casting) (0) | 2026.04.20 |
| [Java] 스코프(Scope) (0) | 2026.04.20 |