Biz Assist에 외부 공고 수집처를 추가하면서
BidCandidateCollector 인터페이스를 만들었다.
public interface BidCandidateCollector {
List<BidQualificationDto> collect(
LocalDate startDate,
LocalDate endDate
);
}
인터페이스는
클래스가 어떤 기능을 가져야 하는지 정하는 약속이다.
위 코드에서는
collect(startDate, endDate)
라는 메서드를 구현해야 한다.
즉 수집처가 어디든
기간을 받아서 공고 후보 목록을 반환해야 한다.
인터페이스를 실제 클래스에서 구현할 때는
implements를 사용한다.
class KoreaExpresswayBidCollector
implements BidCandidateCollector {
}
그리고 인터페이스에 정의된 메서드를 실제로 구현한다.
@Override
public List<BidQualificationDto> collect(
LocalDate startDate,
LocalDate endDate
) {
// 수집 로직
}
나라장터와 한국도로공사는
공고를 가져오는 방식이 다르다.
그래도 Biz Assist 입장에서는 둘 다
공고 후보를 가져오는 수집기
다.
그래서 실제 구현은 각 클래스에서 다르게 하고
밖에서는 같은 BidCandidateCollector 타입으로 다룰 수 있게 했다.
나라장터 수집기
한국도로공사 수집기
다른 수집처
↓ 모두
BidCandidateCollector
interface
→ 해야 할 기능의 형태 정의
implements
→ 인터페이스를 실제 클래스에서 구현
@Override
→ 정의된 메서드를 실제 동작으로 작성
이번에 직접 써보니까 interface는
구현 방식은 다르지만 같은 역할을 하는 클래스들을 묶는 기준
이라고 생각하면 이해하기 쉬웠다.