본문 바로가기
Java_language

객체지향 개념 (클래스, 객체, 인스턴스)

by 헬로제이콥 2025. 11. 26.

 

☕ 클래스, 객체, 인스턴스 자바로 이해하기

붕어빵 비유는 그대로 유지하면서, 자바 문법으로 어떻게 구현되는지 살펴보겠습니다.


1. 🌟 Pokemon 클래스 (붕어빵 틀) 만들기

자바에서 클래스는 데이터(속성)와 메서드(기능)의 묶음입니다. 이 클래스가 바로 객체를 찍어내는 설계도인 '붕어빵 틀'의 역할을 합니다.

Java
 
// 1. 🌟 Pokemon (포켓몬) 클래스 만들기
//    이것이 바로 '붕어빵 틀' 입니다.
class Pokemon {
    // 📝 속성 (특징) - 모든 포켓몬이 가질 기본 특징을 정의합니다.
    String name;  // 이름
    String type;  // 타입 (전기, 물, 불 등)
    int hp;       // 체력

    // 🔨 생성자 (Constructor) - 객체를 만들 때(new) 속성 값을 초기화하는 기능입니다.
    //    파이썬의 __init__과 같은 역할을 합니다.
    public Pokemon(String name, String type, int hp) {
        this.name = name; // this.name은 클래스의 속성, name은 매개변수
        this.type = type;
        this.hp = hp;
    }

    // 🔨 기능 (할 수 있는 행동) - '메서드(Method)'라고 부릅니다.
    public void useSkill() {
        System.out.println("[" + this.name + "]이(가) 스킬을 사용합니다!");
    }

    public void showStatus() {
        System.out.println("--- " + this.name + " 상태 ---");
        System.out.println("타입: " + this.type);
        System.out.println("체력: " + this.hp);
        System.out.println("--------------------");
    }
}
  • 속성 (Attribute): String name, int hp 등은 클래스가 가진 변수로, 객체마다 다른 값을 가질 수 있습니다.
  • 생성자 (Constructor): public Pokemon(...)는 클래스 이름과 같은 특별한 메서드입니다. new 키워드를 사용하여 객체(인스턴스)를 생성할 때 반드시 호출되며, 속성을 초기화하는 역할을 합니다.
  • 메서드 (Method): public void useSkill() 등은 객체가 수행할 수 있는 동작을 정의합니다.

2. ⚡️ 객체 (인스턴스) 만들기 및 기능 사용하기

new 키워드를 사용하여 Pokemon 클래스라는 틀에서 **실제 객체(인스턴스)**인 피카츄와 꼬부기를 찍어냅니다.

Java
 
// 2. ⚡️ 객체 (인스턴스) 만들기 및 기능 사용해 보기
public class Main {
    public static void main(String[] args) {
        // '피카츄' 라는 객체(인스턴스) 만들기
        // new Pokemon(...)은 생성자를 호출하며 메모리에 실제 객체를 만듭니다.
        Pokemon pikachu = new Pokemon("피카츄", "전기", 35);

        // '꼬부기' 라는 객체(인스턴스) 만들기
        Pokemon squirtle = new Pokemon("꼬부기", "물", 44);

        System.out.println("--- ⚡️ 피카츄 행동 ---");
        pikachu.showStatus(); // 피카츄 객체의 기능 사용
        pikachu.useSkill();   // 피카츄 객체의 기능 사용

        System.out.println("\n");

        System.out.println("--- 💧 꼬부기 행동 ---");
        squirtle.showStatus(); // 꼬부기 객체의 기능 사용
        squirtle.useSkill();   // 꼬부기 객체의 기능 사용

        System.out.println("\n");
        
        // 4. 🧩 같은 클래스(틀)에서 나왔지만 서로 다른 값 (속성)을 가질 수 있어요.
        System.out.println("피카츄의 타입: " + pikachu.type);
        System.out.println("꼬부기의 타입: " + squirtle.type);
    }
}

코드 실행 결과 (예상)

--- ⚡️ 피카츄 행동 ---
--- 피카츄 상태 ---
타입: 전기
체력: 35
--------------------
[피카츄]이(가) 스킬을 사용합니다!


--- 💧 꼬부기 행동 ---
--- 꼬부기 상태 ---
타입: 물
체력: 44
--------------------
[꼬부기]이(가) 스킬을 사용합니다!


피카츄의 타입: 전기
꼬부기의 타입: 물

🖼️ 자바에서의 개념 정리

개념 붕어빵 비유 자바 (Java)에서의 역할
클래스 (Class) 붕어빵 틀 객체를 만들기 위한 설계도. 속성(변수)과 기능(메서드)을 정의.
객체 (Object) 실제 붕어빵 클래스를 기반으로 new 키워드를 통해 메모리에 생성된 실체.
인스턴스 (Instance) 팥 붕어빵, 슈크림 붕어빵 **"특정 클래스(Pokemon)를 기반으로 만들어진 객체"**를 강조할 때 사용. pikachu는 Pokemon 클래스의 인스턴스.

이처럼 자바에서 클래스는 틀이고, 객체는 그 틀로 만들어진 실체이며, 인스턴스는 그 객체가 특정 클래스에 속한다는 관계를 강조할 때 사용되는 용어라고 이해하시면 됩니다.