Java Classes-Objects
자바 클래스와 객체: 개념 및 예제
자바(Java)는 객체 지향 프로그래밍 언어로, 클래스와 객체는 자바의 핵심 개념입니다. 클래스는 객체를 생성하기 위한 템플릿이고, 객체는 클래스를 통해 생성된 실제 데이터와 기능을 담고 있는 인스턴스입니다. 이 글에서는 자바에서 클래스와 객체의 개념을 설명하고, 이를 이해하는 데 도움이 되는 예제와 함께 주요 사항을 소개합니다.
클래스(Class)란?
클래스는 객체의 설계도 또는 템플릿입니다. 클래스는 속성(필드)과 동작(메서드)을 정의하며, 이 클래스를 기반으로 객체가 생성됩니다.
클래스의 구성 요소
- 필드(Field): 클래스의 속성을 정의합니다. 객체의 상태를 저장하는 변수입니다.
- 메서드(Method): 클래스의 동작을 정의합니다. 객체가 수행할 기능을 포함합니다.
- 생성자(Constructor): 객체를 생성할 때 호출되는 특별한 메서드로, 객체의 초기화를 담당합니다.
클래스 예제
// 클래스 정의
class Car {
// 필드
String model;
String color;
int year;
// 생성자: 필드를 초기화하는 메서드
public Car(String model, String color, int year) {
this.model = model;
this.color = color;
this.year = year;
}
// 메서드: 객체가 수행하는 동작을 정의
public void drive() {
System.out.println(model + " is driving.");
}
public void stop() {
System.out.println(model + " has stopped.");
}
}
위 예시에서 Car
클래스는 자동차의 모델, 색상, 연도를 나타내는 필드와, drive()
와 stop()
같은 메서드를 포함하고 있습니다.
객체(Object)란?
객체는 클래스의 인스턴스로, 클래스로부터 생성된 실제 데이터와 기능을 가진 실체입니다. 객체는 클래스의 속성에 접근하고 메서드를 호출하여 동작을 수행합니다.
객체 생성과 사용
객체는 new
키워드를 사용하여 생성됩니다. 생성자는 객체를 초기화하는 역할을 하며, 이후 객체는 클래스에서 정의된 메서드를 사용할 수 있습니다.
객체 생성 예제
public class Main {
public static void main(String[] args) {
// Car 클래스의 객체 생성
Car myCar = new Car("Tesla Model S", "Red", 2023);
// 객체 메서드 호출
myCar.drive(); // 출력: Tesla Model S is driving.
myCar.stop(); // 출력: Tesla Model S has stopped.
}
}
위 예제에서 myCar
객체는 Car
클래스의 인스턴스로, drive()
와 stop()
메서드를 호출할 수 있습니다.
클래스와 객체의 관계
- 클래스는 설계도이며, 여러 개의 객체를 생성할 수 있습니다.
- 각 객체는 클래스의 구조를 따르지만 서로 독립적인 상태를 가질 수 있습니다.
예제: 여러 객체 생성
public class Main {
public static void main(String[] args) {
// 여러 객체 생성
Car car1 = new Car("BMW X5", "Black", 2020);
Car car2 = new Car("Audi A6", "White", 2022);
// 각 객체의 메서드 호출
car1.drive(); // 출력: BMW X5 is driving.
car2.drive(); // 출력: Audi A6 is driving.
}
}
여기서 car1
과 car2
는 서로 다른 데이터를 가진 독립적인 객체입니다. 각 객체는 클래스의 구조를 따르지만 각기 다른 상태를 유지합니다.
클래스의 특징
1. 캡슐화(Encapsulation)
캡슐화는 데이터(필드)를 숨기고, 메서드를 통해서만 데이터를 접근하게 하는 OOP의 원칙입니다. 이를 통해 클래스 외부에서 필드에 직접 접근하는 것을 막고, 데이터를 보호할 수 있습니다.
private
접근 제어자를 사용하여 필드를 감추고, getter
와 setter
메서드를 통해 필드에 접근할 수 있습니다.
class Person {
// 필드를 private으로 설정
private String name;
private int age;
// Getter 메서드
public String getName() {
return name;
}
// Setter 메서드
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 0) {
this.age = age;
}
}
}
2. 생성자(Constructor)
생성자는 객체를 생성할 때 호출되며, 객체의 초기 상태를 설정하는 역할을 합니다. 생성자의 이름은 클래스명과 같아야 하며, 반환 타입을 가지지 않습니다.
기본 생성자 예제
class Car {
String model;
String color;
int year;
// 기본 생성자
public Car() {
this.model = "Unknown";
this.color = "Unknown";
this.year = 0;
}
}
public class Main {
public static void main(String[] args) {
Car defaultCar = new Car();
System.out.println(defaultCar.model); // 출력: Unknown
}
}
3. this 키워드
this
는 현재 객체를 참조하는 키워드로, 주로 필드와 메서드의 매개변수를 구분하기 위해 사용됩니다.
class Car {
String model;
public Car(String model) {
// this는 현재 객체의 필드를 참조
this.model = model;
}
}
자바 객체와 메모리
자바에서 객체는 힙 메모리에 저장되며, 가비지 컬렉터가 필요 없어진 객체를 자동으로 삭제하여 메모리 누수를 방지합니다.
요약
- 클래스는 객체를 생성하는 설계도이며, 객체의 속성과 동작을 정의합니다.
- 객체는 클래스를 기반으로 생성된 실체로, 클래스의 속성(필드)과 동작(메서드)을 가집니다.
- 자바에서는
new
키워드를 사용하여 객체를 생성하고, 이를 통해 메서드와 필드에 접근할 수 있습니다. - 객체 지향 프로그래밍의 핵심 원칙인 캡슐화, 생성자, this 키워드 등은 자바 클래스와 객체를 효율적으로 설계하고 사용할 수 있게 도와줍니다.
자바 클래스와 객체의 개념을 제대로 이해하면 더 복잡한 프로그램을 효율적으로 설계할 수 있으며, 유지보수성 높은 코드를 작성할 수 있습니다.