Java 클래스와 객체: 실전 가이드
Java 클래스와 객체
Java의 클래스와 객체 모델이 실제 개념을 재사용 가능한 코드로 바꾸는 방법을 알아보세요.
Java는 근본적으로 객체 지향입니다. 복잡한 문제를 관리 가능하고 독립적인 엔티티(객체)로 분해합니다. 각 객체는 상태와 행동을 가집니다.
객체는 데이터(상태)를 보유하고 행동(동작)을 제공하는 모든 것이 될 수 있습니다. 예를 들어 자전거는:
- 상태: 유휴, 1단 기어 등
- 행동: 브레이크, 가속 등
객체로 들어가기 전에 객체를 정의하는 청사진인 클래스를 탐구해 봅시다.
Java 클래스
클래스는 객체가 인스턴스화되는 템플릿입니다. 집 설계도가 층, 문, 창문을 지정하는 것처럼 생각하세요. 같은 설계도에서 여러 집을 지을 수 있듯, 단일 클래스에서 많은 객체를 생성할 수 있습니다.
Java에서 클래스 생성
class 키워드로 클래스 정의:
class ClassName {
// 필드
// 메서드
}
필드(변수)는 객체 상태를 저장하고 메서드는 행동을 캡슐화합니다.
- 필드는 데이터를 저장합니다.
- 메서드는 연산을 수행합니다.
예: Bicycle 클래스.
class Bicycle {
// 상태
private int gear = 5;
// 행동
public void braking() {
System.out.println("브레이크 작동");
}
}
여기서 Bicycle은 프로토타입입니다. 같은 구조를 공유하지만 독립적인 데이터를 보유하는 여러 자전거 인스턴스를 생성할 수 있습니다.
참고: private과 public은 가시성을 제어하는 접근 한정자입니다. 자세한 내용은 Java 접근 한정자 참조.
Java 객체
객체는 클래스의 인스턴스입니다. 예: Bicycle은 클래스이고 MountainBicycle, SportsBicycle, TouringBicycle 등은 해당 클래스에서 파생된 개별 객체입니다.
Java에서 객체 생성
new 키워드와 클래스 생성자로 객체 인스턴스화:
className object = new className();
// Bicycle 예
Bicycle sportsBicycle = new Bicycle();
Bicycle touringBicycle = new Bicycle();
생성자는 클래스 이름과 같은 특수 메서드입니다. 더 알아보려면 Java 생성자 탐색.
sportsBicycle과 touringBicycle 같은 이름은 각 인스턴스에 대한 참조 역할을 합니다.
동일 클래스의 여러 인스턴스는 서로 간섭 없이 공존할 수 있습니다.
참고: 클래스 필드와 메서드는 총칭하여 멤버라고 합니다.
클래스 멤버 접근
객체 참조와 점 연산자로 멤버에 접근:
class Bicycle {
int gear = 5;
void braking() {
// ...
}
}
Bicycle sportsBicycle = new Bicycle();
sportsBicycle.gear;
sportsBicycle.braking();
여기서 sportsBicycle은 gear 필드를 읽고 braking() 메서드를 호출합니다.
- sportsBicycle.gear – 기어 값 읽기.
- sportsBicycle.braking() – 브레이크 루틴 호출.
다음 장에서 Java 메서드를 깊이 탐구합니다.
아래는 이 개념들을 연결하는 완전한 예제입니다.
예제: Java 클래스와 객체
class Lamp {
// 램프가 켜져 있는지 추적
boolean isOn;
void turnOn() {
isOn = true;
System.out.println("Light on? " + isOn);
}
void turnOff() {
isOn = false;
System.out.println("Light on? " + isOn);
}
}
class Main {
public static void main(String[] args) {
Lamp led = new Lamp();
Lamp halogen = new Lamp();
led.turnOn();
halogen.turnOff();
}
}
출력:
Light on? true
Light on? false
이 프로그램에서 Lamp는 인스턴스 변수 isOn과 이를 조작하는 두 메서드를 정의합니다. Main 클래스는 두 램프 객체 led와 halogen을 생성하고 메서드를 독립적으로 호출합니다.
각 객체는 자체 isOn 복사본을 보유하므로 한 램프 조작이 다른 램프에 영향을 주지 않습니다.
예제: 같은 클래스 내부에서 객체 생성
객체는 정의하는 같은 클래스 내부에서도 인스턴스화할 수 있습니다. 방법은 다음과 같습니다:
class Lamp {
boolean isOn;
void turnOn() {
isOn = true;
System.out.println("Light on? " + isOn);
}
public static void main(String[] args) {
Lamp led = new Lamp();
led.turnOn();
}
}
출력
Light on? true
이 패턴은 메인 로직이 같은 클래스 내에 있는 작은 데모나 유틸리티 클래스에 유용합니다.