[클린코드] 가짜 중복이 뭐야

Madeline👩🏻‍💻·2024년 6월 28일
2

개발 지식

목록 보기
12/12
post-thumbnail

입사 후 첫 코드리뷰..
"네트워크 결과 처리하는 부분은 중복이라고 판단해도 될 것 같아요. 한번 묶어서 처리해보시고, "가짜 중복" 키워드로 검색해서 포스팅들 읽어보세요"
라는 소중한 👼🏻 코멘트가 달렸다.

내 코드는 결국 진짜 중복된거였지만,,

다들 클린코드, 클린 아키텍처 공부하는데, 나는 기본이나 잘하자는 마음으로 기본기를 다지고 있었는데,,
이제는 흐린눈할 수 없겠ㄸ다.

가짜 중복에 대해 알아보자.

진짜 중복 vs 가짜 중복

중복 코드는 알겠다.
비슷한 코드가 여러 곳에 있는거!
관리도 어렵고, 수정할 때 여러군데 고쳐야 하니 문제가 될 수 있다는 것까지도 알겠따.

근데 진짜는 뭐고 가짜는 뭐여

진짜 중복

진짜 중복은 한 부분(인스턴스)가 변경되면 다른 모든 복사본도 동일하게 변경해야 하는 경우를 말한다.
예를 들어, 두 곳에서 동일한 데이터 구조를 사용하고 있다면,
하나를 변경할 때 다른 곳에서도 같은 변경을 해야 한다.

⏩ 한 곳을 수정하면 다른 곳도 똑같이 수정해야 하는 경우! 동일한 일을 하고 있는 경우!

🙈 진짜 중복 해결

하나로 합치면 된다. 공통된 부분을 함수로 만들어서 사용한다.

가짜 중복

가짜 중복은 비슷한 기능을 수행하는 코드가 여러 곳에 반복되어 있는 경우를 말한다. 실제로는 동일한 기능을 수행하지만, 코드 구조나 패턴 때문에 발생하는 중복을 의미한다.
아니면 같은 코드였는데, 나중에 변수를 추가하거나 변형할 때, 기능이 변화될 때 각 코드가 달라지는 경우도 이에 해당된다.

⏩ 똑같아 보이지만, 실제로는 다른 목적을 갖고 있어서, 따로 관리해야 하는 코드!

🙉 가짜 중복 해결

합치는게 아니라, 오히려 각자의 역할에 맞게 분리해서 관리해야 한다.

가짜 중복 예시

그래도 와닿진 않는다. 코드를 보자

struct DatabaseUser {
    var name: String
    var age: Int
}

struct UIUser {
    var name: String
    var age: Int
}

누가 봐도 중복된 코드다. 근데!!

시간이 지나니깐, 두 구조체가 각각 다르게 변화할 수 있다.

struct DatabaseUser {
    var name: String
    var age: Int
    var email: String // 추가 필드
}
struct UIUser {
    var name: String
    var age: Int

    func displayName() -> String {
        return name.uppercased() // 이름을 대문자로 표시
    }
}

이처럼 처음에는 비슷해 보였지만, 데이터베이스와 UI에서 사용되는 이유가 다르기 때문에 합치면 안된다.

가짜 중복을 해결해보아요.

  • 각각의 역할에 맞게 분리: 처음에는 비슷해 보이더라도, 시간이 지나면서 다른 목적으로 변화할 가능성이 있는 코드는 따로 관리해야 한다.

  • 클린 코드: 클린 코드는 코드가 명확하고 이해하기 쉽게 작성하는 것을 목표로 한다. 가짜 중복을 방지하기 위해, 각 코드의 목적을 명확하게 하고, 이를 적절하게 분리한다.

  • 클린 아키텍처: 클린 아키텍처는 시스템을 계층으로 나누어 각 계층이 독립적으로 변경될 수 있도록 한다. 데이터베이스와 UI와 같은 서로 다른 계층에서 사용하는 코드는 분리하여 관리한다.

그러니깐 오늘의 결론은,
가짜 중복은 억지로 합치려고 하지말고 잘 분리해두자..!

profile
🍎 Apple Developer Academy@POSTECH 2기, 🍀 SeSAC iOS 4기

2개의 댓글

comment-user-thumbnail
2024년 7월 15일

크흐~ 역시!

1개의 답글