IMG-LOGO
공지사항 :

자바 클래스 멤버와 인스턴스 멤버

lmkfox - 2025-07-11 06:25:31 29 Views 0 Comment

1. 클래스 멤버 (Class Member)

정의

  • static 키워드로 선언된 필드와 메소드를 의미

  • 클래스가 메모리에 로딩될 때 자동으로 생성

  • 모든 객체가 공유

  • 객체 생성 없이 사용 가능

구성 요소

  • 클래스 변수 (Static Field)

  • 클래스 메소드 (Static Method)

예시

public class Car {
    static int totalCars = 0; // 클래스 변수

    static void showTotalCars() { // 클래스 메소드
        System.out.println("전체 자동차 수: " + totalCars);
    }
}

사용 예

Car.totalCars = 5;
Car.showTotalCars();  // 전체 자동차 수: 5

  • 클래스 이름으로 직접 접근

  • 인스턴스 없이 사용 가능


2. 인스턴스 멤버 (Instance Member)

정의

  • static 없이 선언된 필드와 메소드

  • 객체가 생성될 때마다 별도로 메모리에 생성

  • 객체마다 독립적인 값과 동작을 가짐

  • 객체를 통해서만 접근 가능

구성 요소

  • 인스턴스 변수 (Field)

  • 인스턴스 메소드

예시

public class Car {
    String model; // 인스턴스 변수

    void drive() { // 인스턴스 메소드
        System.out.println(model + "가 운행됩니다");
    }
}

사용 예

Car myCar = new Car();
myCar.model = "소나타";
myCar.drive(); // 소나타가 운행됩니다

  • 객체를 생성하고 그 참조변수를 통해 접근


3. 클래스 멤버 vs 인스턴스 멤버 비교

구분

클래스 멤버

인스턴스 멤버

키워드

static

없음

생성 시점

클래스 로딩 시

객체 생성 시

접근 방법

클래스명.변수 또는 메소드

객체명.변수 또는 메소드

메모리

클래스당 1개

객체당 각각 생성

공유 여부

모든 객체가 공유

각 객체가 독립적으로 소유

사용 예

Math.pow(), System.out 등

String.length(), 사용자 정의 등


4. 혼합 사용 예시

public class Counter {
    static int count = 0; // 클래스 변수
    int id;               // 인스턴스 변수

    public Counter() {
        count++;
        id = count;
    }

    void printInfo() {
        System.out.println("ID: " + id + ", Total: " + count);
    }

    static void printTotal() {
        System.out.println("총 객체 수: " + count);
    }
}

public class Main {
    public static void main(String[] args) {
        Counter c1 = new Counter();
        Counter c2 = new Counter();
        c1.printInfo(); // ID: 1, Total: 2
        c2.printInfo(); // ID: 2, Total: 2
        Counter.printTotal(); // 총 객체 수: 2
    }
}


5. 주의 사항

  • 클래스 메소드에서는 인스턴스 멤버에 직접 접근할 수 없음

public class Test {
    int number = 10;

    static void show() {
        // System.out.println(number); // 오류: static 메소드에서 인스턴스 변수 접근 불가
    }
}

  • 인스턴스 멤버를 사용하려면 객체를 생성하고 접근해야 함


6. 결론 요약

항목

클래스 멤버

인스턴스 멤버

키워드

static

없음

접근 방식

클래스명으로 직접 접근

객체를 통해 접근

메모리 구조

클래스당 하나 공유

객체별로 각각 존재

대표적 사용 예

상수, 공용 기능 (Math, System) 등

객체 고유의 속성이나 동작


댓글