Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 생성자에 synchronized 키워드를 사용할 수 있을까?

결론부터 말하면, Java에서 생성자는 동기화(synchronized)할 수 없습니다. JVM은 특정 시점에 하나의 스레드만 생성자를 호출할 수 있도록 보장하기 때문에, 생성자에 synchronized 키워드를 선언할 필요가 없으며, 이는 Java 문법상 허용되지 않는 잘못된 사용입니다.

다만 예외적으로, 생성자 내부에는 synchronized 블록을 사용할 수 있습니다. 이를 통해 객체 초기화 과정 중 공유 자원에 대한 접근을 제어할 수 있습니다.

생성자에 synchronized를 붙이면 어떻게 될까?

생성자 앞에 synchronized 키워드를 붙이려고 하면 컴파일러는 다음과 같은 오류 메시지를 출력합니다.

error: modifier synchronized not allowed here

예제 코드

public class SynchronizedConstructorTest {

    // synchronized 생성자 선언 시도
    public synchronized SynchronizedConstructorTest() {
        System.out.println("Synchronized Constructor");
    }

    public static void main(String args[]) {
        SynchronizedConstructorTest test = new SynchronizedConstructorTest();
    }
}

컴파일 결과

SynchronizedConstructorTest.java:3: error: modifier synchronized not allowed here
public synchronized SynchronizedConstructorTest() {
^
1 error

핵심 정리

  • 생성자에는 synchronized 키워드를 사용할 수 없습니다.
  • JVM이 생성자 호출의 스레드 안전성을 이미 보장하므로 불필요합니다.
  • 동기화가 필요하다면 생성자 내부에 synchronized(this) { ... } 형태의 블록을 활용하는 것이 올바른 방법입니다.