App.java
package ex08.polling;
public class App {
public static void main(String[] args) {
LotteMart lotteMart = new LotteMart();
Customer1 customer1 = new Customer1();
// 1. 마트는 입고 준비
new Thread(() -> {
lotteMart.received(); // 5초
}).start();
// 2. 입고 확인
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
if (lotteMart.getValue() != null) { // request (폴링)
customer1.update(lotteMart.getValue() + "이 들어왔습니다.");
break;
} else System.out.println("상품이 아직 들어오지 않았어요.");
}
}
}
Customer1.java
package ex08.polling;
public class Customer1 {
public void update(String msg) {
System.out.println("손님1이 받은 알림 : " + msg);
}
}
LotteMart.java
package ex08.polling;
public class LotteMart {
private String value = null;
public String getValue() {
return value;
}
public void received() {
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
value = "상품";
}
}

LotteMart.received()
가 5초 뒤에value
를"상품"
으로 설정
- 메인 쓰레드에서는 0.1초마다
lotteMart.getValue()
가null
인지 체크함
- null이면
"상품이 아직 들어오지 않았어요."
출력 (폴링)
- 값이 들어오면
"손님1이 받은 알림 : 상품이 들어왔습니다."
출력
🔁 폴링 구조 특징
항목 | 설명 |
기술 방식 | 일정 주기로 상태를 직접 확인함 ( Thread.sleep + if ) |
장점 | 구현 간단, 동기 흐름 유지 가능 |
단점 | 자원을 계속 사용함 (CPU 낭비), 응답 지연 발생 가능 |
비동기 아님 | 이벤트나 콜백이 아니라 내가 직접 감시해야 함 |
🔄 비교: 폴링 vs 푸시 vs 옵저버
방식 | 설명 | 자원 효율성 | 응답 속도 | 구조/관계 | 예시 표현 |
폴링 | 직접 주기적으로 확인 | ❌ 낮음 | ⏱ 지연 가능 | 단방향 | "계속 새로고침” |
푸시 | 서버가 알아서 알려줌 | ✅ 좋음 | ✅ 빠름 | 주로 1:1 | "DM 오면 진동 울리기” |
옵저버 패턴 | 상태 변화 감지 후 옵저버에게 알림 | ✅ 좋음 | ✅ 빠름 | 1:N 구조 | "내가 상태 바꾸면 구독자들 전부에게 알림” |
콜백 메서드
콜백은 어떤 메서드 안에서, 외부로부터 전달받은 다른 메서드를 간접적으로 실행하는 구조로, 호출 흐름이 뒤로 위임되는 비동기적/동적 실행 방식이다.
Share article