-
성능의 최적화가 오히려 코드 가독성에 좋지 않은 영향을 미칠 수 있다Today I Learned 2022. 10. 9. 23:59
테스트 주도 개발 스터디 3회차에 참여하면서 인상깊게 느꼈던 내용을 정리했다.
다중 통화 로직을 구현하면서 각 환율 간의 변화율을 하나의 쌍으로 갖는 객체 Pair를 정의하고, 해당 Pair 객체의 동등성을 비교하는 테스트 코드를 작성하는 과정이 있다.
private class Pair { private String from; private String to; } public boolean equals(Object object) { Pair pair = (Pair) object; return from.equals(pair.from) && to.equals(pair.to); } public int hashCode() { return 0; }
책에서는 hashCode의 값으로 0을 사용할 경우 해시 테이블에서의 탐색이 선형 탐색과 같이 이루어지기 때문에 최악의 성능을 내게 되지만, 일단은 현재 상태로 두고 hashCode 내부 구현의 변경은 통화의 양이 많아질 때 그때 실제 측정 데이터를 이용해 개선할 것이라는 내용이 있었다.
여기에 트레이너님의 추가적인 보충 설명이 있었는데, 프로그램을 작성할 때 성능 상의 최적화를 우선적으로 고려하는 것이 능사가 아니라는 부분을 이야기해주셨다.
이전까지는 프로그램은 가능하면 항상 좋은 성능을 낼 수 있게끔 작성되어야 한다고 생각하고 있었다. 그로 인해 생각하지 못했던 부분은, 최적화를 위한 로직이 소스코드를 지저분하게 만들 수 있고, 그로 인해 해당 소스코드가 집중해야 할 관심사가 무엇인지 알기 어렵게 만들 수 있다는 것이었다.
로직을 작성할 때, 최적화에 몰두한 나머지 진짜로 수행해야 할 역할이 무엇이고 가져야 할 관심사가 무엇인지 놓치는 일이 없도록 해야 할 것이다.
'Today I Learned' 카테고리의 다른 글
강행돌파는 결국 언젠가 한 번은 해야 한다 (0) 2022.10.11 무시무시한 소스코드 중복을 줄이는 메서드화의 힘 (레벨 테스트 6일차 작업 회고) (0) 2022.10.10 @SpyBean, @MockBean (0) 2022.10.08 관심사의 분리를 잘 하면 테스트 코드 작성이 수월해진다 (레벨 테스트 5일차 작업 회고) (0) 2022.10.07 문서와 테스트는 어느 정도로 심도있게 작성하는 게 맞는 걸까...? (레벨 테스트 4일차 작업 회고) (0) 2022.10.06