본문 바로가기
IT팁

Bouncer Pattern

by e-pd 2020. 8. 19.

Bouncer Pattern (경비원 패턴)

Photo by King's Church International on Unsplash

 

https://www.groovy-lang.org/design-patterns.html#_bouncer_pattern

 

The Apache Groovy programming language - Design patterns in Groovy

Using design patterns with Java is a well-established topic. Design patterns also apply to Groovy: some patterns carry over directly (and can make use of normal Groovy syntax improvements for greater readability) some patterns are no longer required becaus

www.groovy-lang.org

 

 

예외 케이스에 대한 처리를 먼저 진행해서 if의 depth를 최대한 줄이는 패턴.

 

예를 들어 회원 가입 절차를 진행하는 코드를 아래와 같은 방식으로 만들었다고 가정하면.

 

1
2
3
4
5
6
7
8
public void doStuff(Member member) {
 
        if (member != null) {
            if (member.getName() && memberRepository.findById(member.getId()) == null) {
                ...
            }
        }
    }
cs

 

비지니스 로직을 구현하다보면 if depth가 점점 깊어져 개발하다보면 실수가 발생할 여지가 생긴다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
 public void doStuff(Member member) {
 
        if (member == null || member.getEmail() == null) {
            throw new IllegalArgumentException();
        }
        
        if (memberRepository.findById(member.getId()) {
            throw new MemberExistedException();
        }
        
        ...
        
    }
cs

 

 

해당 패턴에서 말하고자하는바는 예외상황이 발생하는 케이스를 먼저 체크하고

비지니스 로직을 구현한다는 것이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 public void doStuff(Member member) {
        validateMember(member);
        ...
    }
    
    public void validateMember(Member member) {
        if (member == null || member.getEmail() == null) {
            throw new IllegalArgumentException();
        }
 
        if (memberRepository.findById(member.getId()) {
            throw new MemberExistedException();
        }
    }
cs

 

 

 

물론 처음부터 모든 예외케이스를 체크하기는 상황에 따라 힘들 수 있다.

하지만 순수로직과 예외케이스등의 유효성 검증을 분리한다는점에서 괜찮은 방법이라 생각한다.

평소에 이렇게 코딩을 했는데 BouncerPattern이라는 명칭이 있는지 처음 알게되었다.

 

 

 

 

 

 

'IT팁' 카테고리의 다른 글

FQCN (Fully Qualified Class Name)  (0) 2021.01.03
Server Side Rendering  (0) 2020.11.04
Builder Pattern  (0) 2020.07.18
ATDD - 1  (0) 2020.07.03
Intellij 모듈 삭제가 안될때  (1) 2020.06.29