최범균님의 유튜브 강의를 보고 작성한 글입니다.
https://www.youtube.com/watch?v=NaeXpswLvxk&ab_channel=%EC%B5%9C%EB%B2%94%EA%B7%A0
코드를 나누지 않는다면
- 코드 순서대로 구현을 이해하는 것이 가능하다.
- 코드가 커질수록 코드가 복잡해져서 점점 이해하기가 어려워진다.
- 코드가 커질수록 기능 변경이 어려워진다.
코드를 나눈다면
- 구조의 복잡도가 증가하지만 상위 수준에서 실행 흐름을 이해하기가 좋아진다.
- 코드를 변경하는게 더 쉬워진다.
- 변경하려는 기능에 사용되는 클래스 or 함수만 수정하면 되기 때문이다.
코드를 너무 잘게 나눈다면
- 복잡도가 너무 커져서 오히려 코드를 이해하기 어려워진다.
- 코드를 변경할 때 변경해야할 대상이 너무 많아진다.
결론
적절한 수준으로 코드를 나누는 것이 중요하다.
그렇다면 적절한 수준으로 코드를 나누기 위해서는 어떤것들을 고려해봐야 할까?
- 하나의 기능을 여러개의 작은 기능으로 나누어 각 함수 또는 클래스에 해당 기능에 대한 책임을 맡기자
- ex) 물건 구매 -> 사용자 정보 확인, 재고가 있는지 확인, 주문정보 업데이트, 결제 API 호출, 로깅 ...
- 나누려는 클래스들의 추상화 수준이 적절한지 생각해보자
- ex) Controller, Service, DAO 로 계층을 나누었을 때 Controller 에서 갑자기 jdbc 연결을 통한 insert 를 하는 코드가 들어간다면 계층간의 수준이 맞지 않는다.
- ex) 외부 API 호출만 담당하는 클래스 (단순히 API 요청에 대한 응답을 받아오는 역할) 가 있을 때 그 클래스에 서비스 로직이 들어간다면 계층간의 수준이 맞지 않게 된다.