IT
자바 클래스 멤버와 인스턴스 멤버
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) 등
객체 고유의 속성이나 동작
댓글
아직 댓글이 없습니다.
로그인 후 댓글을 남길 수 있습니다.