1. ✅ static 이란?
Static 은 "정적인", 즉 클래스에 귀속되는 요소임을 나타내는 키워드
자바에서 static이 붙은 변수나 메서드는 인스턴스(객체)가 없어도 사용 가능하며, 클래스 수준에서 공유
2. 🔍 static이 붙을 수 있는 대상
대상 | 의미 |
변수 (static 변수) | 모든 객체가 공유하는 클래스 변수 |
메서드 (static 메서드) | 인스턴스 없이 호출 가능한 클래스 메서드 |
블록 (static 초기화 블록) | 클래스 로딩 시 단 한 번 실행 |
클래스 (staitc 중첩 클래스) | 외부 클래스에 종속된 내부 정적 클래스 |
3. 📦 static 변수 (클래스 변수)
public class User {
public static int userCount = 0;
public User() {
userCount++;
}
}
1. 모든 인스턴스가 같은 userCount를 공유
2. 객체 없이도 User.userCount로 접근 가능
3. 메모리상 **클래스 영역(Method Area)**에 저장됨
4. ⚙️ static 메서드
public class MathUtil {
public static int add(int a, int b) {
return a + b;
}
}
int result = MathUtil.add(3, 5); // 객체 없이 사용 가능
1. 객체 없이도 호출 가능
2. this 키워드 사용 불가 (인스턴스가 없기 때문)
3. 주로 유틸리티 클래스에서 사용
5. 🧪 static 초기화 블록
public class App {
static {
System.out.println("클래스 로딩 시 단 한 번 실행");
}
}
1. 클래스가 JVM에 처음 로딩될 때 실행됨
2. DB 연결 초기화, 상수 세팅 등에 사용
6. 🧱 static 중첩 클래스
public class Outer {
static class Inner {
void hello() {
System.out.println("Hello from static inner class");
}
}
}
1. 외부 클래스의 인스턴스 없이 사용 가능 : new Outer.Inner()
2. 내부 클래스 중에서 유일하게 static을 붙일 수 있음
7. ❗ static의 주의사항
항목 | 설명 |
공유성 | 모든 인스턴스가 값을 공유하기 때문에 상태 관리 주의 |
테스트 어려움 | 상태가 고정되면 테스트 시 의존성 주입이 어려움 |
남용 금지 | 무분별한 static 사용은 객체지향 원칙 위반 가능성 있음 |
8. 🎯 언제 static을 써야 할까?
사용 경우 | 예시 |
인스턴스 없이도 동작해야 할 때 | Math.random(), Collection.sort() |
전역적으로 공유할 값이 있을 때 | static final int MAX_USER = 100; |
공통 유틸리티 로직 | StringUtils, FileUtil 등 |
9. ✅ 결론 정리
개념 | 요약 |
static 이란? | 클래스 레벨에서 공유되는 변수/메서드/블록 |
언제 사용? | 공통 기능, 공유 데이터, 유틸리티 메서드 등 |
장점 | 메모리 절약, 접근성이 높음 |
단점 | OOP 위반 가능성, 테스트 어려움 |
static은 클래스에 속한 요소를 정의하는 키워드이며, 객체 없이 사용할 수 있는 메서드나 변수, 유틸리티 함수 등에 유용하게 쓰임
'개발기초지식' 카테고리의 다른 글
[면접질문대비] SpringBoot 트랜잭션 관리 (0) | 2025.06.09 |
---|---|
[면접질문대비] Static 클래스/메서드는 오버라이딩이 될까? NO! (1) | 2025.06.06 |
[면접질문] 면접질문대비 / Spring Bean이란 무엇인가? 생명주기는? (1) | 2025.05.29 |
[면접질문] 면접질문대비 / Gradle과 Maven 어떤것을 사용할까? (2) | 2025.05.28 |
[면접준비] 면접질문대비 (1) | 2025.05.26 |