메서드 파라미터 재사용하지 말기

honggom·2023년 1월 27일
0
public void update(Data data) {
  Some s = getSome(data); // 1
  data.setKey(s.getKey()); // 2
  int ret = otherDao.update(data); // 3
  
  if (ret == 1) {
    data.setReg(new Date()); // 4
    anyDao.insert(data); // 5
  }
}

Data 타입의 파라미터를 update가 받고

-> A 객체 메서드에서 Data 사용

-> B 객체 메서드에서 Data 사용

한 파라미터 타입을 공유하는 구조다.

위 코드의 문제점

  • 각 메서드에서 어떤 값을 사용하는지 알 수 없음
    • 데이터 흐름을 추적하기 어려움
    • 머리로 메서드와 필드 간 매핑을 기억해야 됨
    • Data 타입을 다른 곳에서도 사용하면 매핑 기억이 불가

조금 귀찮아도 메서드에 맞는 파라미터 사용

public void update(UpdateReq req) {
  Some s = getSome(req.getSomeId());
  
  OtherUpdate out = OtherUpdate.builder() // 새로운 타입으로 파라미터 생성
                          .id(reg.getOtherId())
                          .key(s.getKey())
                          .build();
  
  int ret = otherDao.update(out);
  
  if (ret == 1) {
    AnyData any = AnyData.builder() // 새로운 타입으로 파라미터 생성
                      .someId(s.getId())
                      .ip(s.getIp())
                      .build(); 
    
    anyDao.insert(any);
  }
}
  • 각 메서드에서 어떤 값을 사용하지는 알기 쉬움
    • 명시적인 데이터 변환으로 흐름 추적 쉬움
    • 머리로 메서드와 필드 간 매핑 기억 불필요

당장 만들 코드는 조금 증가하지만 두고 두고 코드 분석 시간이 상대적으로 감소

결론

파라미터 타입을 만드는데 인색하지 말자!

출처: https://www.youtube.com/watch?v=MIYwej-VodE

profile
while alive: study()

0개의 댓글