728x90
Java에서 private, private static, private static final의 차이점을 이해하면 보다 효과적인 객체 지향 프로그래밍을 할 수 있습니다. 각각의 개념을 설명하고, 차이점을 정리해 보겠습니다.
1. private (인스턴스 변수 / 메서드)
- 정의: private 변수나 메서드는 같은 클래스 내부에서만 접근 가능.
- 인스턴스 변수: 객체마다 개별적인 값을 가질 수 있음.
- 메서드: 같은 클래스 내부에서만 호출 가능.
예제
class Example {
private int value; // 객체마다 독립적인 값
private void display() { // private 메서드
System.out.println("This is a private method.");
}
public void setValue(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
특징
- value는 객체마다 개별적인 값을 유지.
- display() 메서드는 같은 클래스 내에서만 사용 가능.
2. private static (정적 변수 / 메서드)
- 정의: 클래스 내부에서만 접근 가능하며, 모든 객체가 공유하는 정적 변수.
- 특징:
- static 키워드가 붙으면 객체가 공유하는 단 하나의 값이 됨.
- 객체 생성 없이도 접근 가능.
예제
class Example {
private static int count = 0; // 클래스 변수 (모든 객체가 공유)
private static void increment() { // 클래스 메서드
count++;
}
public static void increase() {
increment();
}
public static int getCount() {
return count;
}
}
특징
- count 변수는 모든 객체가 공유하는 값.
- increment() 메서드는 클래스 내부에서만 사용 가능.
- increase()를 통해 count 값을 증가시킬 수 있음.
3. private static final (상수 선언)
- 정의: 클래스 내부에서만 접근 가능한 변경 불가능한 상수.
- 특징:
- static: 모든 객체가 공유하는 클래스 단위의 변수.
- final: 초기화 이후 변경 불가 (상수값으로 설정됨).
예제
class Example {
private static final int MAX_USERS = 100; // 클래스 상수
private static final String MESSAGE = "Hello, World!";
public static int getMaxUsers() {
return MAX_USERS;
}
public static String getMessage() {
return MESSAGE;
}
}
특징
- MAX_USERS와 MESSAGE는 모든 객체가 공유하는 불변 값.
- 프로그램 실행 중 한 번만 초기화되며 변경되지 않음.
- 상수 값을 설정할 때 자주 사용됨.
4. 추가적인 활용 예제
(1) private static 메서드를 사용하여 캡슐화
class DatabaseUtil {
private static void connectToDatabase() {
System.out.println("Connecting to database...");
}
public static void initialize() {
connectToDatabase();
System.out.println("Database initialized.");
}
}
- connectToDatabase()는 내부적으로만 호출되도록 제한됨.
(2) private static final을 이용한 설정 값 관리
class Config {
private static final String API_KEY = "1234-5678-ABCD";
private static final int TIMEOUT = 5000;
public static String getApiKey() {
return API_KEY;
}
public static int getTimeout() {
return TIMEOUT;
}
}
- 변경 불가능한 설정 값을 유지할 때 유용하게 사용됨.
5. 차이점 정리
키워드 메모리 할당 접근 가능 여부 객체 단위 or 클래스 단위 값 변경 가능 여부
| private | Heap 영역 | 클래스 내부에서만 접근 가능 | 객체마다 개별 보유 | 가능 |
| private static | Method(메서드) 영역 | 클래스 내부에서만 접근 가능 | 모든 객체가 공유 | 가능 |
| private static final | Method(메서드) 영역 (상수 풀 포함) | 클래스 내부에서만 접근 가능 | 모든 객체가 공유 | 변경 불가 (상수) |
🚀 최종 정리
- private: 객체마다 독립적인 값을 가지며, 클래스 내부에서만 접근 가능.
- private static: 클래스가 공유하는 값을 가지며, 객체를 생성하지 않고 사용 가능.
- private static final: 클래스가 공유하는 값이지만 변경 불가능한 상수.
- private static 메서드는 클래스 내부에서만 호출할 수 있는 유틸리티 메서드로 활용 가능.
- private static final은 설정 값 및 상수를 안전하게 관리하는 데 유용.
728x90
'개발 > 자바' 카테고리의 다른 글
| Java UUID란? (0) | 2025.02.08 |
|---|---|
| Java 8 Optional 개요 (0) | 2025.02.01 |
| Java 1.7과 Java 1.8의 주요 변경 사항 비교 정리 (1) | 2025.01.21 |
| 전자정부프레임워크 4.x(spring boot) 외부 톰캣에서 실행하기 (0) | 2025.01.15 |
| 자바 html 태그 제거 메소드 (0) | 2025.01.15 |