본문 바로가기
Java

[Java] Java 키워드 정리

by clolee 2025. 4. 8.

Java 키워드 정리

이번 주제는 Java에서 public, private, static, final, 그리고

클래스/변수/메서드/인터페이스에서 이 키워드들이 어떻게 작동하고 어떤 조합이 가능한지

접근 범위, 메모리 구조, 사용 목적을 중심으로 설명


✅ Java 키워드 조합 완전 정리

📚 설명 순서

  1. 접근 제어자: public, private, protected, default
  2. static 키워드 – 무엇이고 언제 필요한가?
  3. final 키워드 – 값 고정 vs 오버라이딩 금지
  4. 변수/메서드/클래스/인터페이스에서의 사용법 정리
  5. 실무 조합 예시 총정리

✅ 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 키워드 조합 의미

2025.04.08 - [Java] - [Java] Java의 키워드들(`static`, `final`, 변수, 메서드 등)와 JVM 메모리 영역(Stack/Heap/Method Area)과의 관계

 

댓글