Java (클래스(Class))

최병현·2025년 12월 29일

java

목록 보기
15/38

1. 클래스(Class)란?

클래스는 객체를 생성하기 위한 설계도이며, 틀 또는 청사진에 해당한다. 현실 세계의 사물이나 개념을 프로그래밍으로 표현할 때, 특정 대상의 특징과 행동을 하나의 구조로 정의한다.

클래스는 크게 두 가지 요소로 구성된다.

  • 속성: 객체가 가지는 데이터 (필드, 멤버 변수)
  • 행위: 객체가 수행할 수 있는 동작 (메서드)

예를 들어 자동차를 클래스로 만든다면, 색상이나 속도 같은 속성과 주행, 정지 같은 동작을 코드로 표현할 수 있다.

2. 객체(Object)와 인스턴스(Instance)

클래스를 설계도라고 가정하면, 해당 설계도를 기반으로 실제 생성된 실체를 객체라고 한다.

Object와 Instance는 국내 학습 환경에서는 거의 같은 의미로 사용된다. 다만 개념적으로는 다음과 같은 차이가 있다.

  • 객체: 클래스에서 생성된 모든 실체를 포괄적으로 지칭
  • 인스턴스: 특정 객체가 어떤 클래스에서 생성되었는지를 강조하는 표현

비유로 정리하면 다음과 같다.

  • 사람이라는 클래스가 존재한다
  • 홍길동, 김철수는 사람 클래스에서 생성된 객체이다
  • 홍길동은 사람 클래스의 인스턴스이다

3. 클래스 기본 구조

클래스는 필드와 메서드로 구성된다. 아래 예제는 학생 정보를 표현하는 간단한 클래스이다.

public class ClassA {

    // 필드 (속성)
    int num;
    String name;
    double score;

    // 메서드 (행위)
    public void callName() {
        System.out.println(name + "을 부릅니다.");
    }
}

4. 객체 생성과 필드 값 대입

클래스를 사용하려면 먼저 객체를 생성해야 한다. 객체는 new 키워드를 사용하여 생성한다.

public class ClassAMain {
    public static void main(String[] args) {

        ClassA classA1 = new ClassA();

        classA1.num = 1;
        classA1.name = "홍길동";
        classA1.score = 4.5;

        System.out.println(classA1.name + " 학생의 학번은 "
                + classA1.num + "번이고, 점수는 "
                + classA1.score + "점입니다.");

        classA1.callName();
    }
}

같은 클래스를 사용하더라도, 각 객체는 서로 다른 값을 가질 수 있다.

ClassA classA2 = new ClassA();
classA2.num = 100;
classA2.name = "홍길동";
classA2.score = 2.0;

System.out.println(classA2.num + "번 학생의 이름은 "
        + classA2.name + "이고, 점수는 "
        + classA2.score + "점입니다.");

classA2.name = "홍길서";
classA2.callName();

5. 생성자(Constructor)

생성자는 객체가 생성될 때 자동으로 호출되는 특별한 메서드이다. 객체 생성과 동시에 필드를 초기화하는 역할을 담당한다.

객체 생성 코드에서 new 클래스명() 부분이 생성자 호출에 해당한다.

생성자의 특징

  • 클래스 이름과 동일한 이름을 가진다
  • 리턴 타입이 없다
  • 객체의 초기화를 담당한다

6. 기본 생성자와 매개변수 생성자

생성자는 매개변수의 유무에 따라 두 가지로 나뉜다.

  • 기본 생성자: 매개변수가 없는 생성자
  • 매개변수 생성자: 하나 이상의 값을 전달받는 생성자
public class Constructor {

    int num;
    String name;

    // 기본 생성자
    public Constructor() {
        System.out.println("기본 생성자 호출");
    }

    // 매개변수 생성자
    public Constructor(int num) {
        this.num = num;
    }

    public Constructor(String name) {
        this.name = name;
    }

    public Constructor(int num, String name) {
        this.num = num;
        this.name = name;
    }
}
public class ConstructorMain {
    public static void main(String[] args) {

        Constructor c1 = new Constructor();
        Constructor c2 = new Constructor(10);

        System.out.println(c2.num);
    }
}

this 키워드는 현재 생성되는 객체 자신을 의미하며, 필드와 매개변수 이름이 같을 때 이를 구분하기 위해 사용된다.

7. 클래스 활용 예제 — Car 클래스

클래스를 활용하면 같은 구조를 가진 객체를 여러 개 생성하고, 각각 다른 상태와 동작을 수행하도록 만들 수 있다.

public class Car {

    String color;
    int speed;

    public void drive() {
        System.out.println(color + " 자동차가 주행 중입니다.");
    }

    public void brake() {
        System.out.println(color + " 자동차가 멈췄습니다.");
    }

    public void displayInfo() {
        System.out.println("이 차의 색깔은 " + color + "색이고,");
        System.out.println("최고 속도는 " + speed + "km/h입니다.");
    }
}
public class CarMain {
    public static void main(String[] args) {

        Car myCar = new Car();
        Car yourCar = new Car();

        myCar.color = "빨강";
        myCar.speed = 160;

        yourCar.color = "노랑";
        yourCar.speed = 180;

        myCar.drive();
        myCar.displayInfo();

        yourCar.brake();
        yourCar.displayInfo();
    }
}

8. 오늘 정리하며 느낀 점

클래스는 단순히 변수를 묶는 문법이 아니라, 데이터와 동작을 함께 관리하기 위한 구조라는 점이 인상적이었다.

객체를 여러 개 생성하면 같은 구조를 공유하면서도 각각 독립적인 상태를 유지할 수 있다는 점이 명확해졌다.

생성자를 사용하면 객체 생성과 동시에 초기화를 수행할 수 있어 코드의 의도가 훨씬 분명해진다는 것도 이해할 수 있었다.

profile
Develop

0개의 댓글