클래스와 객체
클래스와 객체 (Classes and Objects)
자바의 모든 코드는 결국 클래스 안에서 살아요. 상태를 담는 필드와 행동을 정의하는 메서드를 한 덩어리로 묶어 놓은 설계도가 클래스이고, 그 설계도에서 뽑아낸 실제 인스턴스가 객체죠. 공식 dev.java 문서는 클래스 정의부터 객체 생성, 중첩 클래스, 열거형까지를 하나의 연속된 흐름으로 가르쳐 줘요. 이 페이지에서는 그 흐름을 따라 기초 개념을 정리해 볼게요.
클래스 정의와 객체 생성
클래스는 class 키워드로 선언하고, 중괄호 안에 멤버 변수(필드)와 메서드를 담아요. 객체는 new 연산자로 생성하는데, 이때 생성자가 호출되면서 객체가 초기화된 상태로 반환돼요. 기본 타입(int, double, boolean)과 참조 타입(객체)을 구분해서 필드를 선언하는 것도 이 단계에서 익히게 됩니다.
public class Book {
private String title; // 필드: 객체의 상태
private int pages;
public Book(String title, int pages) { // 생성자
this.title = title;
this.pages = pages;
}
public void printInfo() { // 메서드: 객체의 행동
System.out.println(title + " (" + pages + "쪽)");
}
}
// 사용
Book b = new Book("자바의 정석", 1088);
b.printInfo();
메서드와 생성자
메서드는 어떤 입력(인자)을 받아 작업을 수행하고 결과를 돌려주는 함수예요. 생성자는 클래스 이름과 동일한 특별한 메서드로, 객체가 만들어질 때 필드를 초기화하는 역할을 해요. 생성자가 여러 부류의 초기화를 지원하도록 오버로딩(overload)할 수 있고, 메서드도 인자 구성에 따라 오버로딩할 수 있어요. 메서드에 정보를 전달하는 방식(값 전달, this 키워드)과 접근 제어(public/private 등)까지 아우르는 게 이 시리즈의 핵심이에요.
중첩 클래스와 열거형
클래스 안에 클래스를 정의하는 중첩 클래스(nested class) 를 쓰면 논리적으로 연관된 타입을 묶어 응집도를 높일 수 있어요. 정적 중첩 클래스, 내부(inner) 클래스, 지역(local) 클래스, 익명(anonymous) 클래스가 각기 다른 상황에 맞춰 쓰입니다. 또 열거형(enum) 은 정해진 상수 집합을 안전하게 표현하는 타입으로, 상태가 유한한 값을 다룰 때 매우 유용해요. 시리즈 마지막에서는 언제 중첩 클래스·지역 클래스·익명 클래스·람다 표현식 중 무엇을 골라야 하는지 기준을 안내합니다.