Java/Grammar

[Java] 클래스(Class), 객체(Object), 인스턴스(Instance)

annovation 2025. 4. 27. 09:15

클래스(Class)

💡클래스(Class)란?

  • Java에서 클래스는 객체 지향 프로그래밍의 핵심 요소로, 관련된 데이터와 동작을 하나의 단위로 묶어 코드의 재사용성과 유지보수성을 높입니다.
  • 클래스를 사용하면 int, String과 같은 타입을 직접 만들 수 있습니다. 즉, 사용자가 직접 정의하는 사용자 정의 타입을 만드는 설계도가 클래스입니다.

✅ 예제 : 클래스를 사용하지 않은 경우

public class NoClassExample {
    public static void main(String[] args) {
        // Bicycle 1
        int cadence1 = 0;
        int speed1 = 0;
        int gear1 = 1;

        cadence1 = 50;
        gear1 = 2;
        speed1 += 10;

        System.out.println("Bicycle1 - cadence:" + cadence1 + " speed:" + speed1 + " gear:" + gear1);

        // Bicycle 2
        int cadence2 = 0;
        int speed2 = 0;
        int gear2 = 1;

        cadence2 = 70;
        gear2 = 3;
        speed2 += 20;

        System.out.println("Bicycle2 - cadence:" + cadence2 + " speed:" + speed2 + " gear:" + gear2);
    }
}
  • 자전거가 여러 개일 경우 변수명이 무한히 늘어남 → 유지보수 어려움
  • 중복 코드 많고 코드 가독성 떨어짐

✅ 예제 : 클래스를 사용한 경우

public class Bicycle {
    int cadence = 0;
    int speed = 0;
    int gear = 1;

    void changeCadence(int newValue) {
        cadence = newValue;
    }

    void changeGear(int newValue) {
        gear = newValue;
    }

    void speedUp(int increment) {
        speed += increment;
    }

    void applyBrakes(int decrement) {
        speed -= decrement;
    }

    void printStates() {
        System.out.println("cadence:" + cadence + " speed:" + speed + " gear:" + gear);
    }
}

public class ClassExample {
    public static void main(String[] args) {
        Bicycle bike1 = new Bicycle();
        Bicycle bike2 = new Bicycle();

        bike1.changeCadence(50);
        bike1.changeGear(2);
        bike1.speedUp(10);

        bike2.changeCadence(70);
        bike2.changeGear(3);
        bike2.speedUp(20);

        bike1.printStates();
        bike2.printStates();
    }
}

 

  • 재사용 가능, 명확한 구조, 상태 관리 쉬움

 

💡배열(Arrays)을 사용하면 안되나요?

  • 배열은 동일한 타입의 데이터를 순차적으로 저장하는 데 유용하지만, 각 요소에 의미를 부여하기 어렵고, 구조가 복잡해질수록 유지보수가 어려워집니다.

✅ 예제

public class BicycleArrayExample {
    public static void main(String[] args) {
        // [0]: cadence, [1]: speed, [2]: gear
        int[] bike1 = {0, 0, 1};
        int[] bike2 = {0, 0, 1};

        bike1[0] = 50;  // cadence
        bike1[1] += 10; // speed
        bike1[2] = 2;   // gear

        bike2[0] = 70;
        bike2[1] += 20;
        bike2[2] = 3;

        System.out.println("Bicycle1 - cadence:" + bike1[0] + " speed:" + bike1[1] + " gear:" + bike1[2]);
        System.out.println("Bicycle2 - cadence:" + bike2[0] + " speed:" + bike2[1] + " gear:" + bike2[2]);
    }
}

 

  • 어떤 인덱스가 어떤 의미인지 외우거나 주석 달아야 함
  • 캡슐화 불가능, changeGear(), speedUp() 같은 동작 정의 불가

 

💡클래스(Class) 내부 구성 요소

  • 멤버 변수(Member Variable) or 필드(Field) : 클래스 내에 선언된 변수로, 객체의 상태를 저장합니다. [각주:1]
    • 멤버 변수 : 특정 클래스에 소속된 멤버이기 때문에 멤버 변수라고 부른다.
    • 필드 : 데이터 항목을 가르키는 전통적인 용어이다. DB, 엑셀 등 데이터 각각의 항목을 필드라고 한다.
Member variables in a class—these are called fields.

 

✅ 예제 : Bicycle 클래스의 필드는 다음과 같이 선언됩니다

public class Bicycle {
    public int cadence;
    public int gear;
    public int speed;
}

객체(Object)

💡객체(object)란?

  • 클래스를 기반으로 생성된 실체로, 클래스에서 정의한 필드와 메서드를 가집니다. [각주:2]
An object stores its state in fields(variables in some programming languages) and exposes its behavior through methods(functions in some programming languages).

💡객체 참조의 개념

  • Java에서는 객체 자체가 아닌 객체의 참조값을 변수에 저장합니다. 이 참조값은 객체가 저장된 메모리 위치를 나타내며, 이를 통해 객체에 접근하고 조작할 수 있습니다.

 

💡객체 생성 및 메모리 할당

  • new 연산자를 사용하여 클래스를 인스턴스화하면, 해당 클래스의 필드에 대한 메모리 공간이 할당되고, 생성된 객체의 참조값이 반환됩니다. [각주:3]
The "new" operator instantiates a class by allocating memory for a new object and returning a reference to that memory.

 

✅ 예제

Bicycle bicycle1 = new Bicycle(); // 객체의 주소 x0001이 bicycle1에 저장됨

💡객체 활용

  • 객체의 필드나 메서드에 접근할 때는 . 연산자를 사용합니다. 이 연산자는 객체의 참조값을 통해 해당 멤버에 접근하는 역할을 합니다.

💡객체의 독립성

  • 객체는 서로 독립적인 상태를 가집니다.
  • 각각 독립적인 메모리 공간을 가지므로, 한 객체의 필드 값을 변경해도 다른 객체에 영향을 주지 않습니다.
Bicycle bicycle1 = new Bicycle();
Bicycle bicycle2 = new Bicycle();

bicycle1.gear = 3;
bicycle2.gear = 5;

인스턴스(Instance)

💡인스턴스(Instance)란?

  • 객체와 인스턴스는 실무에서 거의 동일하게 사용되지만, 엄밀히 말하면 인스턴스는 클래스의 실체화된 객체를 의미합니다. [각주:4]
The phrase "instantiating a class" means the same thing as "creating an object." When you create an object, you are creating an "instance" of a class, therefore "instantiating" a class.

출처

1) 김영한의 실전 자바 - 기본편

 

김영한의 실전 자바 - 기본편 강의 | 김영한 - 인프런

김영한 | , 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을 안다? 이걸로는 안됩니다!전 우아한형제들 기술이사, 누적 수강생 40만 명 돌

www.inflearn.com


출처 주석

반응형

'Java > Grammar' 카테고리의 다른 글

[Java] 생성자 (Constructor)  (0) 2025.04.30
[Java] 배열 (Arrays)  (1) 2025.04.25
[Java] 변수의 생존 범위 (Scope)  (1) 2025.04.24
[Java] 제어 흐름 문 (Control Flow Statements)  (2) 2025.04.22
[Java] Checked, Unchecked Exception  (0) 2025.03.25