결론부터 말하면, 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) { ... }형태의 블록을 활용하는 것이 올바른 방법입니다.