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; // 직렬화 대상에서 제외 }
- 활용 방안
보안 정보, 임시 데이터, 직렬화가 불필요하거나 해서는 안 되는 필드에 사용합니다. 예를 들어 비밀번호, 세션 토큰 등 민감 데이터를 직렬화에서 제외할 때 유용합니다.