Deploy-gate-5

이지예·2026년 8월 7일

개발

목록 보기
16/58

ApprovalPolicy와 다형성 이해하기

오늘은 Deploy-gate의 정책 구조를 분석하면서 객체지향의 상속과 다형성을 살펴봤다.

ApprovalPolicy

기본 정책 클래스는 추상 클래스로 정의되어 있다.

public abstract class ApprovalPolicy {

    public abstract ApprovalLevel getSupportedLevel();

    public abstract ApprovalResult evaluate(
        Deployer deployer,
        StackPolicy stackPolicy
    );
}

그리고 실제 정책은 이를 상속한다.

ApprovalPolicy
├── NoApprovalPolicy
├── SingleApproverPolicy
└── DualApproverPolicy

정책별 동작

NoApprovalPolicy

승인이 필요하지 않은 정책이다.

Claim 존재
→ ALLOWED

Claim 없음
→ DENIED

SingleApproverPolicy

승인자가 한 명 필요한 정책이다.

Claim 없음
→ DENIED

Claim 있음
→ PENDING
→ 승인자 1명 필요

DualApproverPolicy

두 명의 승인이 필요한 정책이다.

Claim 없음
→ DENIED

Claim 있음
→ PENDING
→ 승인자 2명 필요

왜 이렇게 분리했을까?

만약 모든 정책을 Service에 넣었다면 다음과 같은 코드가 계속 커졌을 것이다.

if NONE
else if SINGLE
else if DUAL
else if ...

현재 구조에서는 새로운 정책이 추가되더라도 ApprovalPolicy를 구현하는 새로운 클래스를 추가하면 된다.

오늘 배운 점

이번 코드를 통해 정책마다 달라지는 로직을 별도의 객체로 분리하면 기존 코드의 수정 범위를 줄이고 기능 확장이 쉬워진다는 것을 이해했다.

단순히 "상속을 사용했다"가 아니라, 변경되는 부분을 별도의 정책 객체로 분리했다는 관점에서 이해하는 것이 중요하다고 느꼈다.

profile
github: @dlwldP

0개의 댓글