CS 정리

Java 키워드 모음: static, final, synchronized, abstract, transient

문쿼리 2025. 5. 28. 00:16

1. static

  • 개념
    클래스 단위 변수나 메서드를 의미합니다. 객체 생성 없이도 클래스 이름으로 바로 접근할 수 있으며, JVM의 클래스 영역에 저장되어 모든 인스턴스가 공유합니다.
  • 샘플 코드
public class Counter {
    public static int count = 0;

    public static void increment() {
        count++;
    }
}

Counter.increment();
System.out.println(Counter.count);  // 출력: 1
  • 활용 방안
    공통으로 사용해야 하는 값이나 메서드를 관리할 때 유용합니다. 예를 들어, 전체 객체 수 카운트, 유틸리티 메서드 등에 많이 사용합니다.

 

2. final

 

  • 개념
    값 변경이 불가능한 상수를 선언하거나, 메서드 오버라이드를 막거나, 클래스를 상속 불가로 만들 때 사용합니다. 한 번 초기화된 이후에는 재할당할 수 없습니다.
  • 샘플 코드
    public class Constants {
        public static final int MAX_USERS = 100;
    }
    
    final class Utility {
        // 상속 불가 클래스
    }
    
    public class Base {
        public final void show() {
            System.out.println("Base show method");
        }
    }

  • 활용 방안
    변하지 않는 상수 값 관리, 보안이나 안정성을 위해 오버라이드 금지, 설계상 클래스 상속 금지 등 상황에서 효과적입니다.

 

 

3. static final

  • 개념
    클래스 단위 불변 상수를 뜻합니다. 주로 상수 선언에 사용하며 JVM이 상수 풀에 저장해 효율적으로 관리합니다.
  • 샘플 코드
    public class MathConstants {
        public static final double PI = 3.14159;
    }

  • 활용 방안
    수학 상수, 환경 설정값, 공통 참조 데이터 등 변경되어서는 안 되는 값을 관리할 때 사용합니다.

 

4. synchronized

  • 개념
    멀티스레드 환경에서 여러 스레드가 동시에 공유 자원에 접근하는 것을 제어하는 키워드입니다.
    synchronized 키워드를 사용하면 한 번에 하나의 스레드만 해당 코드 블록이나 메서드에 접근할 수 있습니다.
  • 샘플 코드
    public class Counter {
        private int count = 0;
    
        public synchronized void increment() {
            count++;
        }
    
        public int getCount() {
            return count;
        }
    }

  • 활용 방안
    공유 자원의 상태 일관성을 보장하기 위해 동기화가 필요한 경우에 사용합니다. 멀티스레드 환경에서 데이터 경쟁 조건(race condition)을 예방할 때 필수적입니다.

 

5. abstract

  • 개념
    미완성 클래스와 메서드를 설계할 때 사용합니다. abstract 클래스는 직접 인스턴스화할 수 없고, abstract 메서드는 자식 클래스가 반드시 구현해야 합니다. 이를 통해 코드의 확장성과 유연성을 높일 수 있습니다.
  • 샘플 코드
    public abstract class Animal {
        public abstract void sound();
    }
    
    public class Dog extends Animal {
        @Override
        public void sound() {
            System.out.println("멍멍");
        }
    }
     
  • 활용 방안
    공통된 동작은 추상 클래스에서 정의하고, 구체적인 구현은 자식 클래스에 위임할 때 사용합니다. 다형성을 활용한 유연한 설계에 매우 중요합니다.

6. transient

  • 개념
    직렬화(Serialization) 시 해당 필드를 제외시키는 키워드입니다.
  • 샘플 코드
    public class UserSession implements Serializable {
        private String userId;
        private transient String sessionToken;  // 직렬화 대상에서 제외
    }

  • 활용 방안
    보안 정보, 임시 데이터, 직렬화가 불필요하거나 해서는 안 되는 필드에 사용합니다. 예를 들어 비밀번호, 세션 토큰 등 민감 데이터를 직렬화에서 제외할 때 유용합니다.