개발 일기장/TWIL

20.03.02 ~ 20.03.07 TWIL

희랍인 조르바 2020. 3. 7. 17:02

갈 길이 멀다 갈 길이 멀어~~

 

이번주 코드리뷰, 개발을 통해 배운 것들.

1. 가독성!

    private static final BASE_URL_PREFIX = "https://zorba91.tistory.com";

    // Before
    String secondContentUrl = BASE_URL_PREFIX+"/2"

    // After 
    // 문자열을 연결할 때 + 사이에 공백을 주자.
    String secondContentUrl = BASE_URL_PREFIX + "/2"
    // Before
    if(isMatch(args)) {
        // do something...
    }

    // After
    // if문 딱 붙이지말고, 뒤에 공백을 주자.
    if (isMatch(args)) {
        // do something...
    }

 

2. 외부 의존성을 띈 테스트는 줄이자.

통합 테스트 성격을 띈 테스트들은 따로 관리하고 유닛 테스트는 외부 의존성을 줄이자.

- 이건 내 생각 : 스프링 프레임 워크에 의존한 테스트를 줄이면 좋을 것 같다. 예를 들면, Bean의 주입없이 테스트 가능하도록 만들자. Mock을 활용하면 되니까

 

외부 라이브러리를 사용을 한다는 의미는 그것을 이미 신뢰하고 사용한다는 의미이기 때문에 라이브러리의 기능이 정상적으로 동작하는지 확인하는 건 우리가 아니라 라이브러리가 지녀야한다.

- 이는 내가 Redis 값을 가져오는 라이브러리를 통해 개발 Redis에 값을 잘 넣었는지 가져오는지 테스트코드를 작성했다가 받은 피드백이다.

 

3. 불필요한 객체 생성 비용 줄이기

    // Before
    public void findArtists(String jsonRequest) {
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, String> requestParam = objectMapper.readValue(jsonRequest, HashMap.class);
        // do something...
    }

    // After
    // 지역 변수로 선언해두면 매번 객체를 생성하는데, objectMapper의 경우는 동일한 객체를 계속 사용해도 상관없기 때문에 전역변수로 선언.
    // 이로써 불필요한 객체 생성을 줄일 수 있다.
    public class ArtistServiceImpl implements ArtistService {

      private ObjectMapper objectMapper = new ObjectMapper();

      public void findArtists(String jsonRequest) {
          Map<String, String> requestParam = objectMapper.readValue(jsonRequest, HashMap.class);
          // do something...
      }

    }

머리로는 알고 있는데 왜 코드를 짤 때 이런 부분들이 안 떠오르는 걸까.... ㅠ

4. 팩토리 패턴 활용

수퍼타입의 객체를 상속 받은 서브타입 객체가 많고, 유연하게 사용하고 싶은 객체를 바꾸고 싶을 때, 팩토리 패턴을 활용하면 편하다.

- 필요한 객체를 부르기 위한 인자(argument) 하나로 원하는 객체를 가져올 수 있었다.

- 공부한 것들을 실전에 적용해보니 재밌었다. '더존' 재직 시, 빌더패턴의 추억 ㅠ