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;
}

메서드가 호출되면,

  1. 스택 메모리에 호출 정보 저장
  2. 지역 변수 생성
  3. 실행 종료 후 스택에서 제거

즉, 메서드는 호출될 때마다 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)

  • 클래스 레벨
  • 모든 객체가 공유