CleanCode
-
8. 강한 결합 : 복잡하게 얽혀서 풀 수 없는 구조Study/내 코드가 그렇게 이상한가요? 2024. 1. 17. 00:44
결합도란 '모듈 사이의 의존도를 나타내는 지표'라고 할 수 있다. 어떤 클래스가 다른 클래스에 많이 의존하고 있는 구조를 강한결합(tightlycoupling)이라고 부른다. 강한 결합 코드는 이해하기 힘들고, 변경하기도 굉장히 힘들다. 이 장에서는 강한 결합을 결합도가 낮은 구조인 느슨한 결합(loose coupling)으로 개선하여 코드 변경과 이해가 쉬운 구조를 만드는 방법을 알아본다. 1. 결합도와 책무 소프트웨어가 출력, 금액 계산, 데이터베이스 등의 다양한 관심사를 가질 때, 만약 출력에 버그가 있는데 데이터베이스 로직을 수정하는 것은 말이 안 된다. 출력을 제대로 하는 것은 출력하는 로직의 책임이라고 할 수 있다. 즉 소프트웨어의 책임이란 '자신의 관심사와 관련해서, 정상적으로 동작하도록 제..
-
7. 컬렉션 : 중첩을 제거하는 구조화 테크닉Study/내 코드가 그렇게 이상한가요? 2024. 1. 16. 21:48
이 장에서는 배열과 List와 같은 컬렉션에서 발생할 수 있는 다양한 문제 사례들을 알아본다. 1. 이미 존재하는 기능을 다시 구현하지 말기 바퀴의 재발명 이미 널리 사용되고 있는 기술과 해법이 존재하는데도, 이를 전혀 모르거나 의도적으로 무시하고 비슷한 것을 새로 만들어 내는 것 대부분의 언어에서는 표준 컬렉션 라이브러리에 많은 기능이 구현되어 있다. 반복문을 사용해서 컬렉션을 직접 조작하고 있다면, 잠시 멈추고 표준 라이브러리에 같은 기능을 하는 메서드가 있는지 확인해보자. // 반복문을 사용하여 List를 직접 조작하는 예시 boolean hasPrisonKey = false; for (Item each : items) { if (each.name.equals("prisonKey")) { hasPr..
-
6. 조건 분기 : interface 활용하여 복잡한 조건 분기 제거하기Study/내 코드가 그렇게 이상한가요? 2024. 1. 6. 20:59
조건 분기는 조건에 따라 처리 내용을 전환하는 꼭 필요한 구조이지만, 조건이 복잡해지면 코드의 동작을 이해하기 힘들고 유지보수 시 여러 버그를 만들 수 있다. 이 장에서는 조건 분기를 잘 다루어 버그가 없는 설계를 만드는 방법을 설명한다. 1. 중첩되는 조건 분기 제거하기 코드를 보다보면 if 조건문이 여러 개 중첩되어 사용된 경우가 있다. 조건 분기의 중첩은 코드의 가독성을 크게 떨어뜨린다. if (조건) { // ... if (조건) { // ... if (조건) { // ... if (조건) { // ... } else { // ... } } } } 중첩 구조 사이사이에 수많은 코드가 섞여 있으면, 각 조건문의 범위를 찾기도 매우 힘들고, 각 조건에 따라 어떤 로직이 처리되는 지 알기 힘들다. 이런..
-
5. 응집도 : 흩어져 잇는 것들Study/내 코드가 그렇게 이상한가요? 2023. 12. 20. 21:48
응집도(cohension)란 '모듈 내부에 있는 데이터와 로직 사이의 관계가 얼마나 강한지 나타내는 지표'이다. 여기서 모듈은 클래스, 패키지, 레이어 등을 모두 포함할 수 있다. 응집도가 높은 구조는 변경하기 쉬우며 바람직한 구조인 반면, 응집도가 낮은 구조는 변경 시 문제가 발생하기 쉽다. 이러한 응집도를 낮추는 사례들을 알아보자. 5.1 static 메서드 오용 static 메서드를 오용하면 응집도가 낮아질 수 있다. 아래 예시를 살펴보자. // 주문을 관리하는 클래스 class OrderManager { static int add(int moneyAmount1, int moneyAmount2) { return moneyAmount1 + moneyAmount2; } } // static메서드를 사용..