반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- math
- js
- CSS
- 인텔리제이
- vscode
- input
- junit
- string
- 자바문법
- 자바
- javascript
- 문자열
- Array
- 배열
- list
- 자바스크립트
- 테스트자동화
- 정규식
- 이클립스
- Eclipse
- junit5
- ArrayList
- IntelliJ
- Java
- html
- Visual Studio Code
- java테스트
- 단위테스트
- json
- HashMap
Archives
- Today
- Total
어제 오늘 내일
[Java] static 변수와 static 메서드 차이 본문
Java에서 static 키워드는 클래스 수준에서 공유되는 멤버를 정의할 때 사용됩니다.
static 변수와 static 메서드는 모두 객체가 아닌 클래스 자체에 소속되지만, 두 개념은 용도와 동작 방식에서 차이가 있습니다.
이 글에서는 static 변수와 static 메서드의 차이를 명확하게 정리합니다.
1. static 변수 (클래스 변수)
static 변수가 선언되면, 해당 변수는 모든 객체가 공유하는 하나의 값만 존재합니다.
클래스가 메모리에 로드될 때 단 한 번 생성됩니다.
예제
class Counter {
static int count = 0; // static 변수
int id;
Counter() {
count++;
id = count;
}
}
사용:
Counter c1 = new Counter();
Counter c2 = new Counter();
System.out.println(c1.id); // 1
System.out.println(c2.id); // 2
System.out.println(Counter.count); // 2
특징
- 모든 객체가 같은 count 변수를 공유
- 클래스명으로 직접 접근 가능
- 객체 생성 없이 사용할 수 있음
2. static 메서드 (클래스 메서드)
static 메서드는 객체 생성 없이 호출 가능한 메서드입니다.
객체 상태(instance field)에 접근할 수 없고, 오직 static 변수 또는 전달받은 매개변수만 사용할 수 있습니다.
예제
class MathUtil {
static int add(int a, int b) {
return a + b;
}
}
사용:
int result = MathUtil.add(3, 5);
특징
- 객체 없이 호출 가능
- 인스턴스 변수 사용 불가
- 보통 유틸리티 기능 제공 시 사용
3. static 변수와 static 메서드의 차이
구분 static 변수 static 메서드
| 구분 | static 변수 | static 메서드 |
| 소속 | 클래스 | 클래스 |
| 생성 시점 | 클래스 로딩 시 | 클래스 로딩 시 |
| 사용 목적 | 데이터 공유 | 객체 없이 기능 제공 |
| 인스턴스 정보 접근 | 가능(단, 공유됨) | 불가능 |
| 호출 방식 | 클래스명.변수 | 클래스명.메서드 |
핵심 차이
- static 변수 = 데이터를 공유하기 위해 사용
- static 메서드 = 객체 없이 실행할 기능을 제공하기 위해 사용
4. static 메서드에서 인스턴스 변수 사용 불가
class Test {
int value = 10;
static void printValue() {
// System.out.println(value); // ❌ 컴파일 오류
}
}
왜?
static 메서드는 객체와 무관하게 호출되기 때문에 객체에 속한 변수를 사용할 수 없음
5. static 변수 + static 메서드 함께 사용 예
class Logger {
static int count = 0;
static void log(String msg) {
count++;
System.out.println("[" + count + "] " + msg);
}
}
Logger.log("start");
Logger.log("loading");
출력:
[1] start
[2] loading
설명
- count는 로그 횟수를 모든 곳에서 공유
- log()는 클래스 메서드이므로 객체 없이 호출
6. 언제 static을 사용할까?
static 변수
- 모든 객체가 공유해야 하는 값이 있을 때
- 설정값, 카운트 값, 상수 값 등
static 메서드
- 유틸리티 메서드 (Math, Arrays…)
- 객체의 상태와 관계없는 기능 제공할 때
- 인스턴스 생성이 불필요한 기능
7. 정리
- static 변수는 하나의 값을 여러 객체가 공유
- static 메서드는 객체 없이 호출 가능한 함수
- static 메서드는 인스턴스 변수나 메서드에 접근할 수 없음
- 클래스 기반 데이터/기능을 다룰 때 static을 사용하면 효율적
반응형
'IT > Java' 카테고리의 다른 글
| [Java] 다형성(Polymorphism) 이해하기 (0) | 2025.12.26 |
|---|---|
| [Java] this 키워드 사용법 (0) | 2025.12.26 |
| [Java] final 키워드 (변수, 메서드, 클래스) (0) | 2025.12.25 |
| [Java] 추상 클래스와 인터페이스 차이 (0) | 2025.12.24 |
| [Java] 추상클래스란? (abstract class) (0) | 2025.12.24 |
Comments
