Java 키워드 정리
이번 주제는 Java에서 public
, private
, static
, final
, 그리고
클래스/변수/메서드/인터페이스에서 이 키워드들이 어떻게 작동하고 어떤 조합이 가능한지를
접근 범위, 메모리 구조, 사용 목적을 중심으로 설명
✅ Java 키워드 조합 완전 정리
📚 설명 순서
- 접근 제어자: public, private, protected, default
- static 키워드 – 무엇이고 언제 필요한가?
- final 키워드 – 값 고정 vs 오버라이딩 금지
- 변수/메서드/클래스/인터페이스에서의 사용법 정리
- 실무 조합 예시 총정리
✅ 1. 접근 제어자 (Access Modifier)
📌 핵심 정리
키워드 | 접근 범위 | 사용 위치 | 사용 목적 |
---|---|---|---|
public |
어디서든 접근 가능 | 클래스, 필드, 메서드, 인터페이스 | 외부 공개 (API, 라이브러리) |
protected |
같은 패키지 + 자식 클래스 | 필드, 메서드 | 상속 기반 확장 허용 |
(default) | 같은 패키지 내 | 클래스, 필드, 메서드 | 패키지 단위 모듈화 |
private |
해당 클래스 내부 | 필드, 메서드 | 캡슐화, 정보 은닉 |
📌 클래스의 멤버(필드, 메서드)에는 모두 사용 가능
📌 클래스 자체에는 public
, default
만 사용 가능 (top-level 클래스)
✅ 예시
java
복사편집
public class Car {
private String engineNumber; // 외부에서 직접 접근 불가
protected String model; // 같은 패키지 or 자식 클래스만 접근 가능
public int speed; // 외부 클래스도 접근 가능
private void checkEngine() { // 내부 메서드
System.out.println("Engine OK");
}
public void drive() {
checkEngine(); // 내부 호출은 가능
System.out.println("Driving...");
}
}
📌 접근 제어자는 캡슐화와 보안, 코드 유지보수를 위한 핵심 도구입니다.
✅ 2. static – 정적 변수와 메서드
항목 | 의미 | 사용목적 |
---|---|---|
static 변수 | 인스턴스가 아닌 클래스 단위로 메모리에 1개만 존재 | 공통 데이터 저장 |
static 메서드 | 객체 없이 클래스명으로 직접 호출 가능 | 유틸, 헬퍼 메서드 |
클래스 (내부만) | 인스턴스 없이 사용 가능 | 외부와 독립적 사용 가능 |
static 블록 | 클래스 로딩 시 1회 실행됨 (주로 초기화용) | 정적 초기화 용도 |
✅ 예시
public class MathUtils {
public static int counter = 0;
public static int square(int x) {
return x * x;
}
static {
System.out.println("클래스 로딩 시 1회 실행 (static block)");
}
}
MathUtils.counter++; // 객체 생성 없이 접근
int result = MathUtils.square(5); // 객체 없이 메서드 호출
📌 static
은 공통된 값 관리, 전역 설정, 유틸 기능 제공에 핵심적입니다.
✅ 언제 static을 써야 하나?
상황 | static 추천 이유 |
---|---|
공통적으로 공유해야 할 값 (상수 등) | 모든 인스턴스가 같은 값을 가짐 |
인스턴스 생성 없이 사용하고 싶을 때 | 유틸 메서드 (예: Math.max() ) |
객체마다 새로 생성되면 메모리 낭비일 때 | Logger, DB Pool 등 |
✅ 3. final – 수정 불가, 고정 값 or 상속 금지
대상 | 의미 | 예시 | 설명 |
---|---|---|---|
변수 | 재할당 불가 | final int x = 10; |
상수화, 불변 객체 구성 |
메서드 | 오버라이딩 금지 | final void process() |
핵심 로직 보호 |
클래스 | 상속 불가 | final class SecurityUtils |
보안, 무결성 |
매개변수 | 메서드 내 재할당 금지 | void setName(final String name) |
참조 고정, 안정성 |
✅ 예시
public class Constants {
public static final double PI = 3.14159;
PI = 10.1; // ❌ 컴파일 오류
}
final class BankAccount {
private final String accountNumber;
public BankAccount(String accountNumber) {
this.accountNumber = accountNumber; // 생성자에서만 초기화
}
}
📌 final
은 불변성, 상수, 보안성 유지에 매우 중요한 키워드입니다.
📘 4. 키워드 조합별 사용 가능 요소 정리
키워드 | 클래스 | 내부 클래스 | 변수 | 메서드 | 인터페이스 |
---|---|---|---|---|---|
public | ✅ (top-level) | ✅ | ✅ | ✅ | ✅ |
private | ❌ (top-level) | ✅ | ✅ | ✅ | ❌ |
protected | ❌ (top-level) | ✅ | ✅ | ✅ | ❌ |
static | ❌ (top-level) | ✅ | ✅ (클래스 변수) | ✅ (클래스 메서드) | ✅ (Java 8+ 메서드만) |
final | ✅ (상속 방지) | ✅ | ✅ (값 고정) | ✅ (오버라이딩 방지) | ✅ (모든 필드 암묵적 final) |
✅ 5. 실무에서 많이 쓰이는 조합 예시
✅ 클래스 레벨
public class Utils {
public static final double PI = 3.14;
public static int add(int a, int b) {
return a + b;
}
}
- 유틸성 클래스 → 인스턴스 필요 없음
- 상수/정적 메서드만 포함
✅ 내부 클래스에서 static 사용
public class Outer {
static class StaticInner {
static void hello() {
System.out.println("Hello from static inner");
}
}
}
📌 static
내부 클래스는 외부 클래스의 인스턴스 없이도 사용 가능
✅ 인터페이스에서 static, final
public interface Shape {
double PI = 3.14; // 암묵적으로 public static final
double getArea(); // public abstract
static void printInfo() {
System.out.println("Interface with static method");
}
}
인터페이스의 필드는 자동으로 public static final,
메서드는 public abstract로 간주됨
🎯 실무 체크포인트
사용 케이스 | 예시 | 이유 |
---|---|---|
상수 정의 | public static final int MAX = 100; |
모든 곳에서 공유, 변경 불가 |
유틸 메서드 | Math.max() , Collections.sort() |
객체 생성 없이 호출 |
전역 설정값 | Config.PORT |
static + final |
상속 방지 | final class |
보안 또는 무결성 유지 |
불변 필드 | private final String name; |
생성자 이후 값 고정 |
✅ 결론 정리
키워드 | 의미 | 주 용도 |
---|---|---|
public |
어디서나 접근 가능 | API, 라이브러리 공개 |
private |
클래스 내부에서만 접근 | 캡슐화, 내부 로직 은닉 |
static |
인스턴스 없이 사용 | 공통값, 유틸 메서드 |
final |
수정 불가 | 상수, 상속 방지, 불변성 |
static final |
클래스 공유 상수 | 값 고정 + 메모리 효율 |
이어서 :
2025.04.08 - [Java] - [Java] Java 키워드 조합 의미
'Java' 카테고리의 다른 글
[Java] Java의 키워드들과 JVM 메모리 영역의 관계 정리 (0) | 2025.04.08 |
---|---|
[Java] Java 키워드 조합 의미 (0) | 2025.04.08 |
[Java] static 키워드의 메모리 구조, 사용 시기, 고전적 관점 vs 현대적 관점 (0) | 2025.04.08 |
[Java] 자바 클래스 자기참조 개념 정리 (0) | 2025.04.06 |
[Java] 자바에서 main() 메서드 안에서 다른 메서드 호출 (0) | 2025.04.06 |
댓글