[ 학습목표 ]
- static 키워드의 의미와 역할 이해
- 인스턴스 변수 vs 클래스 변수의 차이 학습
- static 메서드의 특징과 사용법 익히기
[ 이론 ]
1. static 키워드란?
- 클래스에 속한 변수, 메서드를 의미함
- 객체를 만들지 않고도 사용할 수 있음
2. 인스턴스 변수와 클래스 변수 차이
- 인스턴스 변수: static 없이 선언. 객체마다 개별 저장.
- 클래스 변수: 클래스에 하나만 존재. 모든 인스턴스가 공유
3. static을 사용하는 이유
- 공용 데이터 공유: 모든 인스턴스가 같은 값을 가져야 할 때 (예: 상수, 카운터)
- 유틸리티 메서드 작성: 객체와 무관한 기능 (예: Math.pow(), Collections.sort())
- 클래스 초기화: static 블록을 이용해 한 번만 초기화가 필요할 때
=> class Config 처럼 어플리케이션 정보(앱이름, 정보 등)를 설정하는 클래스를 사용할 때 - 메모리 절약: 인스턴스 마다 생성되지 않으므로 효율적임
4.실무에서 static을 언제 사용하는가
- 상수 정의: public static final String APP_NAME = "MyApp";
- 유틸리티 클래스: Math, Collections 처럼 기능만 제공할 때
- 공통 설정값: 설정 클래스에 static 변수로 저장
- 로그 객체 공유: private static final Logger logger = ... ;
- 싱글톤 패턴 공유: 인스턴스를 static으로 관리
=> 싱글톤 패턴은 아래 메모에 작성
5. 사용 방법
- 클래스명.변수명
- 클래스명.메서드명()
6. static 변수 예시
public class Counter {
static int count = 0; // 클래스 변수
public Counter() {
count++;
}
public void printCount() {
System.out.println("현재 객체 수: " + count);
}
}
public class Main {
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
Counter c3 = new Counter();
c1.printCount(); // 3
c2.printCount(); // 3
c3.printCount(); // 3
}
}
7. static 메서드 예시
public class MathUtils {
public static int square(int x) {
return x * x;
}
}
public class Main {
public static void main(String[] args) {
int result = MathUtils.square(5); // 객체 생성 없이 사용
System.out.println(result); // 25
}
}
[ 실습 ]
✅ 실습 1: User 클래스 만들기
public class User {
private String name;
static int userCount = 0;
public User(String name) {
this.name = name;
userCount++; // 인스턴스 만들 때마다 userCount++ 됨
}
public String getName() {
return name;
}
public static void printUserCount() {
System.out.println("총 사용자 수: " + userCount);
}
}
✅ 실습 2: Main에서 사용
public class Main {
public static void main(String[] args) {
User u1 = new User("홍길동");
User.printUserCount(); // static 메서드 호출
User u2 = new User("김철수");
System.out.println("사용자 1: " + u1.getName());
System.out.println("사용자 2: " + u2.getName());
User.printUserCount(); // static 메서드 호출
}
}
[ 메모 ]
- 싱글톤 패턴: 프로그램 전체에서 오직 하나의 인스턴스만 존재하게 하는 디자인 패턴
- 필요 이유: 객체가 하나만 필요하고, 모든 곳에서 그 하나를 써야 할 때
- 장점: 중복 생성 방지, 일관성 유지, 자원 절약, 어디서든 쉽게 접근 가능 (클래스명.getInstance() )
- 실제 사용 예:
사용처 | 이유 |
설정 클래스 (Config) | 앱 전체에서 공통 설정값 사용 — 하나만 있으면 충분 |
DB 연결 관리 (ConnectionManager) | 커넥션을 여러 번 만들면 비효율적이기 때문에 한 객체로 관리 |
로그 시스템 (Logger) | 로그 기록은 한 군데에서 일관되게 관리해야 함 |
캐시 관리자 (CacheManager) | 데이터 캐싱은 하나의 저장소로 일관되게 처리 |
스레드 풀 관리자 (ThreadPoolManager) | 여러 개 만들면 성능에 악영향, 하나로 통합 관리 |
게임 매니저, 앱 상태 매니저 등 | 앱 상태를 전역에서 공유하고 관리할 필요가 있을 때 |
'공부 기록 > Java with ChatGPT' 카테고리의 다른 글
[Java/ChatGPT] Day 8: 상속(Inheritance)의 개념과 기본 사용법 (0) | 2025.06.17 |
---|---|
[Java/ChatGPT] Day 7: 생성자 오버로딩 (Constructor Overloading) (0) | 2025.06.16 |
[Java/ChatGPT] Day 5: 클래스의 캡슐화 개념과 Getter/Setter 메서드 (0) | 2025.06.14 |
[Java/ChatGPT] Day 4: 컬렉션(Collection)과 ArrayList 완전 정복 (0) | 2025.06.09 |
[Java/ChatGPT] Day 3: 객체 배열과 반복문 활용하기 (0) | 2025.06.09 |