프로그래밍 언어/Java

자바 클래스 Class와 객체 인스턴스 instance — 객체 지향 프로그래밍 첫걸음(Java 기초)

테크위키 2026. 3. 22. 20:00
반응형

클래스와 객체 — 객체 지향 프로그래밍 첫걸음

자바를 배우면서 가장 중요한 개념이 바로 클래스객체예요.
처음엔 조금 어렵게 느껴질 수 있지만, 이걸 이해하면 자바의 진짜 힘을 쓸 수 있어요! 🏗️


📌 이 글에서 다룰 내용

  1. 객체 지향 프로그래밍이란?
  2. 클래스 만들기
  3. 객체 생성하기
  4. 생성자 (Constructor)
  5. 캡슐화 — getter와 setter
  6. 실습 — 학생 클래스 만들기

1. 객체 지향 프로그래밍이란?

객체 지향 프로그래밍(OOP) 은 현실 세계의 사물을 코드로 표현하는 방식이에요.

예를 들어 "자동차"를 코드로 표현한다면?

  • 속성(필드) — 색깔, 브랜드, 속도, 연료량
  • 행동(메서드) — 출발(), 정지(), 가속(), 주유()

이처럼 데이터(속성)와 기능(행동)을 하나로 묶은 게 클래스예요.
그리고 클래스를 바탕으로 만든 실제 사물이 객체(인스턴스) 예요.

💡 클래스 = 설계도, 객체 = 설계도로 만든 실제 제품


2. 클래스 만들기

public class Car {
    // 필드 (속성)
    String brand;
    String color;
    int speed;

    // 메서드 (행동)
    void drive() {
        System.out.println(brand + " 출발!");
    }

    void accelerate(int amount) {
        speed += amount;
        System.out.println("현재 속도: " + speed + "km/h");
    }

    void stop() {
        speed = 0;
        System.out.println(brand + " 정지!");
    }
}

3. 객체 생성하기

클래스(설계도)로 객체(실제 차)를 만들려면 new 키워드를 써요.

public class Main {
    public static void main(String[] args) {
        // 객체 생성
        Car myCar = new Car();

        // 필드에 값 넣기
        myCar.brand = "현대";
        myCar.color = "빨강";
        myCar.speed = 0;

        // 메서드 호출
        myCar.drive();
        myCar.accelerate(60);
        myCar.stop();
    }
}
현대 출발!
현재 속도: 60km/h
현대 정지!

설계도 하나로 여러 객체를 만들 수 있어요.

Car car1 = new Car();
car1.brand = "현대";

Car car2 = new Car();
car2.brand = "기아";

4. 생성자 (Constructor)

객체를 만들 때 초기값을 한 번에 설정하는 특별한 메서드예요.
클래스 이름과 같고, 반환 타입이 없어요.

public class Car {
    String brand;
    String color;
    int speed;

    // 생성자
    Car(String brand, String color) {
        this.brand = brand;
        this.color = color;
        this.speed = 0;
    }

    void drive() {
        System.out.println(color + " " + brand + " 출발!");
    }
}
Car myCar = new Car("현대", "빨강");
myCar.drive();  // 빨강 현대 출발!

💡 this지금 이 객체 자신을 가리켜요.
필드 이름과 매개변수 이름이 같을 때 this.brand 로 구분해줘요.


5. 캡슐화 — getter와 setter

필드를 외부에서 직접 수정하면 잘못된 값이 들어올 수 있어요.
private 으로 필드를 숨기고, getter/setter 메서드 로만 접근하게 해요.

public class Student {
    private String name;
    private int age;

    Student(String name, int age) {
        this.name = name;
        setAge(age);  // setter를 통해 유효성 검사
    }

    // getter
    public String getName() { return name; }
    public int getAge() { return age; }

    // setter (유효성 검사 포함)
    public void setAge(int age) {
        if (age > 0 && age < 150) {
            this.age = age;
        } else {
            System.out.println("올바른 나이를 입력하세요.");
        }
    }
}
Student s = new Student("홍길동", 25);
System.out.println(s.getName());  // 홍길동
System.out.println(s.getAge());   // 25
s.setAge(-5);  // 올바른 나이를 입력하세요.

6. 실습 — 학생 클래스 만들기

StudentManager.java 파일을 만들고 아래 코드를 작성해요.

import java.util.ArrayList;

class Student {
    private String name;
    private int score;

    Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() { return name; }
    public int getScore() { return score; }

    public String getGrade() {
        if (score >= 90) return "A";
        else if (score >= 80) return "B";
        else if (score >= 70) return "C";
        else return "D";
    }

    public void printInfo() {
        System.out.printf("%-8s | %3d점 | %s학점%n", name, score, getGrade());
    }
}

public class StudentManager {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();

        students.add(new Student("홍길동", 92));
        students.add(new Student("김철수", 78));
        students.add(new Student("이영희", 85));
        students.add(new Student("박민준", 67));

        System.out.println("=== 학생 성적표 ===");
        for (Student s : students) {
            s.printInfo();
        }
    }
}
=== 학생 성적표 ===
홍길동     |  92점 | A학점
김철수     |  78점 | C학점
이영희     |  85점 | B학점
박민준     |  67점 | D학점

오늘 배운 것 정리

  • ✅ 클래스는 설계도, 객체는 설계도로 만든 실제 제품이에요.
  • new 키워드로 객체를 생성해요.
  • ✅ 생성자로 객체 생성 시 초기값을 설정할 수 있어요.
  • private 필드와 getter/setter로 데이터를 안전하게 관리해요.

🎯 다음 편 예고
드디어 마지막 편! 10편에서는 지금까지 배운 모든 것을 활용한 미니 프로젝트를 만들어봐요!


이 글이 도움이 됐다면 다음 편도 같이 읽어봐요 😊 질문이 있으면 언제든지 댓글로 남겨주세요!