Java의 synchronized 키워드와 ReentrantLock의 차이점은 무엇인가요?
힌트 · 락 획득 방식, 공정성, 조건 변수 등을 비교해보세요.
모범답안
면접관님, synchronized 키워드와 ReentrantLock은 Java에서 동기화를 구현하는 대표적인 방법입니다. 둘 다 여러 스레드가 공유 자원에 동시에 접근하는 것을 막아주지만, 몇 가지 중요한 차이점이 있습니다.
가장 큰 차이점은 락 획득 방식입니다. synchronized는 암묵적인 락을 사용하며, 락 획득 및 해제가 자동으로 이루어집니다. 반면 ReentrantLock은 명시적인 락을 사용하며, lock()과 unlock() 메서드를 통해 락을 획득하고 해제해야 합니다.
또한, ReentrantLock은 synchronized보다 더 많은 기능을 제공합니다. 예를 들어, ReentrantLock은 공정성(fairness)을 설정할 수 있어 락을 기다리는 스레드에게 공정한 순서로 락을 할당할 수 있습니다. synchronized는 기본적으로 비공정 락입니다.
조건 변수(Condition Variable)를 사용할 수 있다는 점도 중요한 차이점입니다. ReentrantLock은 Condition 객체를 통해 스레드를 대기시키고 깨우는 기능을 제공하여, 복잡한 동기화 로직을 구현하는 데 유용합니다.
마지막으로, ReentrantLock은 락 획득 시도를 중단할 수 있는 tryLock() 메서드를 제공하여, 데드락 회피에 유용하게 사용될 수 있습니다. synchronized는 락 획득 시도를 중단할 수 없습니다.
요약하자면, synchronized는 간단하고 사용하기 쉽지만, ReentrantLock은 더 많은 기능과 유연성을 제공합니다. 상황에 따라 적절한 동기화 방법을 선택하는 것이 중요합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Java / Spring 면접 질문
- JWT(JSON Web Token)의 구조와 Spring에서의 활용 방법에 대해 설명해주세요.
- Spring에서 싱글톤 빈의 동시성 문제는 어떻게 해결하나요?
- Java의 Garbage Collection 동작 원리와 G1 GC의 특징에 대해 설명해주세요.
- Spring WebFlux와 기존 Spring MVC의 차이점은 무엇인가요?
- Java의 volatile 키워드의 역할과 사용 시 주의사항에 대해 설명해주세요.
- MSA 환경에서 여러 서비스에 걸친 분산 트랜잭션을 구현해야 할 때, Spring 환경에서 어떤 접근 방식(예: 2PC, Saga 패턴)을 고려할 수 있으며, 각 방식의 장단점과 실제 구현 시 고려사항은 무엇인지 설명해 주세요.