
클래스 변수(정적 변수)와 인스턴스 변수의 차이를 아주 쉽게 설명하고, 이해하기 쉬운 짧은 예제와 실행 결과까지 보여드리겠습니다.
핵심 요약
- 클래스 변수(static): 클래스 하나만 가지고 있는 변수 — 모든 객체가 같은 값을 공유합니다. 마치 학교 건물 한 채에 붙어 있는 학교 이름 표지판 같음.
- 인스턴스 변수: 각 객체(인스턴스)마다 따로 있는 변수 — 객체마다 다른 값을 가질 수 있습니다. 마치 학생 한 사람 한 사람의 이름표 같음.
쉬운 비유
- 학교(클래스)에는 '학교 이름'이 하나뿐(클래스 변수).
- 학생(인스턴스)마다 '이름'이 다름(인스턴스 변수).
짧은 자바 예제 (클래스와 인스턴스 구분해서)
- Student.java
java
public class Student {
// 클래스 변수: 모든 학생이 공유하는 학교 이름
public static String schoolName = "한빛초등학교";
// 인스턴스 변수: 학생 개인의 이름과 나이
public String name;
public int age;
// 생성자
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// 간단 출력
public void printInfo() {
System.out.println("학교: " + schoolName + " | 이름: " + name + " | 나이: " + age);
}
}
- Main.java (테스트)
java
public class Main {
public static void main(String[] args) {
Student s1 = new Student("철수", 10);
Student s2 = new Student("영희", 11);
// 초기 출력: 같은 학교 이름(클래스 변수), 다른 이름/나이(인스턴스 변수)
s1.printInfo();
s2.printInfo();
// 클래스 변수 변경: 모든 학생에게 반영됨
Student.schoolName = "빛나라초등학교";
System.out.println("--- 학교 이름 변경 ---");
s1.printInfo();
s2.printInfo();
// 인스턴스 변수 변경: 특정 학생만 바뀜
s1.name = "철수개명";
System.out.println("--- 철수 이름 변경 ---");
s1.printInfo();
s2.printInfo();
}
}
예상 콘솔 출력
학교: 한빛초등학교 | 이름: 철수 | 나이: 10
학교: 한빛초등학교 | 이름: 영희 | 나이: 11
--- 학교 이름 변경 ---
학교: 빛나라초등학교 | 이름: 철수 | 나이: 10
학교: 빛나라초등학교 | 이름: 영희 | 나이: 11
--- 철수 이름 변경 ---
학교: 빛나라초등학교 | 이름: 철수개명 | 나이: 10
학교: 빛나라초등학교 | 이름: 영희 | 나이: 11
언제 무엇을 쓰나요? (한 문장씩)
- 같은 값(모든 객체가 공유해야 하는 것): 클래스 변수(static)를 사용하세요. 예: 회사 이름, 세율, 전체 회원 수(카운트) 등.
- 각 객체마다 다른 값: 인스턴스 변수를 사용하세요. 예: 사람의 이름, 잔액, 색깔 등.
'Java_language' 카테고리의 다른 글
| 상속이란? (0) | 2025.12.01 |
|---|---|
| 자바의 import (0) | 2025.12.01 |
| 캡슐화 (private) (0) | 2025.12.01 |
| 자바의 static과 this에 대해서 (0) | 2025.12.01 |
| 자바 접근제어자(Access Modifier) (0) | 2025.12.01 |