클래스는 객체의 상태(필드)와 동작(메서드)을 정의한 청사진입니다. 클래스는 객체를 만들기 위한 틀이며, 실제 실행 가능한 실체는 객체(인스턴스)입니다.
public class 클래스이름 {
// 필드 (속성, 변수)
타입 변수명;
// 생성자 (객체 생성 시 호출되는 특별한 메서드)
클래스이름() {
// 초기화 코드
}
// 메서드 (행동)
반환타입 메서드이름() {
// 실행 코드
}
}
public class Car {
// 필드 (속성)
String color;
int speed;
// 생성자
Car(String c, int s) {
color = c;
speed = s;
}
// 메서드
void drive() {
System.out.println(color + " 자동차가 " + speed + "km/h로 달립니다.");
}
}
public class Main {
public static void main(String[] args) {
// 객체 생성
Car myCar = new Car("빨간", 120);
// 메서드 호출
myCar.drive(); // 출력: 빨간 자동차가 120km/h로 달립니다.
}
}
클래스의 멤버(필드, 메서드)는 접근 제어자로 외부에서의 접근을 제한할 수 있습니다.
접근 제어자 |
설명 |
---|---|
public |
어디서든 접근 가능 |
private |
해당 클래스 내에서만 접근 가능 |
protected |
같은 패키지 또는 상속 클래스에서 가능 |
(default) |
같은 패키지에서만 접근 가능 |
public class Person {
private String name;
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
}
한 클래스가 다른 클래스를 확장할 수 있습니다.
class Animal {
void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
void bark() {
System.out.println("멍멍!");
}
}
// 사용
public class Main {
public static void main(String[] args) {
Dog d = new Dog();
d.sound(); // 부모 메서드
d.bark(); // 자식 메서드
}
}
클래스 전체에서 공유되는 필드나 메서드
public class MathUtil {
static int square(int x) {
return x * x;
}
}
// 사용
int result = MathUtil.square(5); // 25
관계 |
설명 |
예제 |
---|---|---|
상속 |
A extends B |
Dog extends Animal |
포함 |
클래스 안에 다른 클래스 포함 |
Car 안에 Engine 포함 |
인터페이스 |
다중 구현 가능 (implements) |
Runnable, Comparable 등 |