Back-End/Java
05. 클래스와 객체
Yerin Thea Yoo
2026. 2. 11. 23:10
Java는 클래스 기반 객체지향 언어다.
프로그램은 클래스 → 객체 생성 → 객체 간 상호작용 구조로 동작한다.
1. 클래스의 기본 정의
클래스는 객체를 생성하기 위한 설계도다.
속성(데이터)과 기능(동작)을 하나로 묶어 정의한다.
class Student {
String name; // 속성
int grade;
void study() { // 기능
System.out.println("공부한다.");
}
}
클래스는 설계도일 뿐, 아직 메모리에 실체가 없다.
2. 클래스와 인스턴스
- 객체(Object) : 클래스 기반으로 생성된 실체
- 인스턴스(Instance) : 특정 클래스로부터 만들어진 객체
Student s1 = new Student();
- Student → 클래스
- s1 → 참조 변수
- new Student() → 인스턴스 생성
클래스는 공동 설계도, 인스턴스는 실제 메모리에 올라간 개별 객체다.
3. 참조 자료형
클래스는 모두 참조 자료형이다.
Student s1;
이 변수에는 객체 그 자체가 아니라, 객체가 저장된 Heap 메모리의 주소 값이 저장된다.
메모리 구조
- Stack → 참조 변수
- Heap → 실제 객체
4. 메서드와 스택 메모리
메서드는 객체의 행동을 정의한다.
void study() {
int time = 2;
}
메서드가 호출되면,
- 스택 메모리에 호출 정보 저장
- 지역 변수 생성
- 실행 종료 후 스택에서 제거
즉, 메서드는 호출될 때마다 Stack Frame이 생성된다.
5. 생성자(Constructor)
객체 생성 시 초기화를 담당한다.
class Student {
String name;
Student(String name) {
this.name = name;
}
}
특징
- 클래스 이름과 동일
- 반환 타입 없음
- 객체 생성 시 자동 호출
6. this 예약어
현재 객체 자신을 가리킨다.
this.name = name;
용도
- 필드와 매개 변수 구분
- 자기 자신의 메서드 호출
- 생성자 간 호출(this())
7. 정보 은닉(캡슐화)
객체 내부 데이터를 외부에서 직접 접근하지 못하게 막는 것
class Student {
private int grade;
public int getGrade() {
return grade;
}
}
- private → 외부 접근 차단
- public 메서드로 간접 접근
목적
- 데이터 보호
- 객체 무결성 용이
- 유지보수 용이
8. 객체 간 협력
객체는 단독으로 존재하지 않는다.
다른 객체의 기능을 호출하며 협력한다.
class Order {
Payment payment;
void process() {
payment.pay();
}
}
객체는 메세지(메서드 호출)를 통해 협력한다.
9. static 변수와 static 메서드
static은 클래스 레벨에서 공유되는 요소다.
class Student {
static int count = 0;
Student() {
count++;
}
}
특징
- 모든 인스턴스가 공유
- Heap이 아닌 Method Area에 저장
- 객체 생성 없이 접근 가능
Student.count;
10. 변수의 유효 범위(Scope)
변수는 선언된 위치에 따라 사용 범위가 다르다.
1) 지역 변수
- 메서드 내부
- 스택에 저장
- 초기화 필수
2) 인스턴스 변수
- 클래스 내부
- Heap에 저장
- 객체마다 별도 존재
3) 클래스 변수(static)
- 클래스 레벨
- 모든 객체가 공유