본문 바로가기
가치관 쌓기/개발 돌아보기

한번에 단계를 뛰어넘어 버리는 비약적인 코드를 피하자.

by simplify-len 2021. 10. 29.

SqsNameMapping 를 구현하는 과정에서 비악이 일어나는 코드를 작성하게 되었습니다.

 

비약이란?

비약은 논리나 사고방식이 '중간과정을 건너 뛰었다'는 뜻으로, 상대방의 논지전개에 있어 허구성을 지적하거나, 실현가능성이 희박한 내용을 과장하는것을 지적하는 말 입니다.

 

 

아래 코드는 2단계를 뛰어 넘어서는 비약된 코드이다.

@Component
@ConfigurationProperties(prefix = "aws.xxx")
public class XxxNameMapping implements Mapping {


    private Map<String, String> queue;

    @Override
    public String get(String type) {
        return queue.get(type);
    }
}

왜일까?

 

1단계

XxxNameMapping 은 XxxConfig 에 속한다. 즉, XxxConfig 가 아닌 다른 위치에서 사용한다.

 

2단계

Application.yml 의 Properties 를 가져와 전역적으로 사용하고 있다.

 

Application.yml 과의 맵핑을 바로 했다.

이게 문제다.

맵핑을 하기 위한 정보는 최종적으로 고려해야 한다.

 

그러므로 이를 변경하게 되면 아래와 같다.

import java.util.HashMap;
import java.util.Map;

public class XxxNameMapping implements Mapping {

    private Map<String, String> queue = new HashMap<>();

    @Override
    public String get(String type) {
        return queue.get(type);
    }

    public void add(String key, String value) {
        queue.put(key, value);
    }
}
@Configuration
public class SqsConfig {

    @Value("${xxx.member-joined}")
    String memberJoinedQueueName;

    @Bean
    public Mapping mapping(){
        XxxNameMapping xxxNameMapping = new XxxNameMapping();
        xxxNameMapping.add(MemberJoined.class.getName(), memberJoinedQueueName);
        return xxxNameMapping;
    }

    @Bean
    public QueueMessagingTemplate queueMessagingTemplate(AmazonSQSAsync amazonSQSAsync) {
        return new QueueMessagingTemplate(amazonSQSAsync);
    }
}

새로운 xxx.Foo 와 같이 @Value 가 생겨날 것이다. 이런 부분의 대한 자동화는 추후에 고민해야될 문제이다.

댓글