Notice
Recent Posts
Recent Comments
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 애플페이
- ChatGPT
- 랜섬웨어
- wannacry
- 메플리
- 다음아고라서명운동
- perplexity
- 예제
- 이클립스
- 토큰털이
- Applepay
- 티스토리
- 토큰탈취
- 다음아고라사칭
- 자바
- 페이스북서명운동
- 방문자추적기
- 젤프
- 베이직쎈
- 2017 티스토리 결산
- 윈도우11
- Ai
- 2017티스토리결산
- 컨택리스
- 페이스북
- 0원메가패스
- zelf
- 취약점
- 내방문자찾아주오
- 토스뱅크
Archives
- Today
- Total
EdgeSecu
static에 관하여 본문
Static vs Instance: Java에서 static과 인스턴스 멤버의 차이
Java에서 static 키워드를 사용하면 클래스 레벨 멤버를, 그렇지 않으면 인스턴스(객체) 레벨 멤버를 정의합니다. 두 가지를 비교해 보겠습니다.
1. static 멤버 (클래스 레벨)
- 공유: 모든 객체가 하나의 멤버를 공유합니다.
- 접근 방법:
클래스이름.멤버형태로 객체 생성 없이 바로 접근할 수 있습니다. - 주요 용도:
- 공통 상태 유지 (예: 전체 인스턴스 개수 카운터)
- 유틸리티 메서드 (예:
Math.max(),Collections.sort()) - 상수 선언 (예:
public static final double PI = 3.14;)
class Counter {
static int totalCount = 0; // 클래스마다 하나
int instanceCount = 0; // 인스턴스마다 하나
void increment() {
totalCount++;
instanceCount++;
}
}
Counter a = new Counter();
Counter b = new Counter();
a.increment();
b.increment();
System.out.println(Counter.totalCount); // 2
System.out.println(a.instanceCount); // 1
System.out.println(b.instanceCount); // 1
2. 인스턴스 멤버 (객체 레벨)
- 독립적: 각 객체가 자신의 복사본을 가집니다.
- 접근 방법:
객체참조.멤버형태로 접근합니다. - 주요 용도:
- 객체별로 상태를 유지해야 할 때
class User {
String name; // 인스턴스 필드
static String group; // 클래스 필드
User(String name) {
this.name = name;
}
}
User.group = "A";
User u1 = new User("x");
User u2 = new User("y");
System.out.println(u1.name); // x
System.out.println(u2.name); // y
System.out.println(User.group); // A
u1.group = "B"; // 그룹 변경
System.out.println(u2.group); // B (공유됨)
3. static vs non-static 비교 표
| 구분 | static 멤버 | 인스턴스 멤버 |
|---|---|---|
| 저장 위치 | 클래스 영역 | 힙(Heap) |
| 개수 | 클래스 당 하나 | 객체 당 하나 |
| 접근 방법 | 클래스이름.멤버 | 객체참조.멤버 |
| 사용 예시 | 유틸리티, 상수, 공통 상태 | 객체 상태, 개별 데이터 |
4. 언제 static을 사용해야 할까?
- 전체 인스턴스가 공유해야 하는 값이나 기능
- 인스턴스 생성과 무관한 유틸리티 메서드
- 변경 불가능한 상수
'공부 > JAVA' 카테고리의 다른 글
| 래핑, 박싱 하는 이유 + 제네릭에 기본형을 못 쓰는 이유 (1) | 2025.05.27 |
|---|---|
| 함수형 인터페이스와 SAM의 차이 (0) | 2025.05.26 |
| final에 관하여 (0) | 2025.05.17 |
| JAVA-네트워크 자원 정리 (0) | 2025.05.16 |
| JAVA try-with-resources(자동 자원 해제) (0) | 2025.05.13 |