-
보통 중복된 코드를 묶는다고 한다.
-
초기에 보기에는 중복처럼 보이나, 진화 속도나 이후 모양이 달라서 결국엔 다른 형태로 진화하게 되는 구현체를 가짜 중복이라고 부르기로 함
-
진짜 중복: 완전히 동일한 로직이나 기능을 하는 코드가 여러 곳에 존재하는 경우. 이 경우 코드를 하나의 함수나 모듈로 통합하여 유지보수성을 높이는 것이 바람직하다.
-
가짜 중복: 초기에는 동일하게 보일 수 있지만, 시간이 지나면서 다른 방향으로 진화하거나 다른 요구사항에 의해 다른 형태로 발전하는 코드. 즉, 겉보기에는 중복되어 보이지만 실제로는 다른 역할이나 목적을 가지고 있는 코드
- 진화 속도가 다를 것이다.
- 화면 자체가 다르니까, 진화 속도가 다를 것이다.
- 기획 의존적이다. (당연)
- 진화 속도의 차이: 초기에는 비슷한 기능을 하더라도 시간이 지나면서 각기 다른 요구사항에 의해 발전하는 속도가 달라질 수 있다.
- 기획 의존성: 기능의 변화는 주로 기획의 변화에 의해 결정되며, 이는 화면이나 사용자 요구사항의 변화에 따라 달라질 수 있다.
- 변화에 대응: 소프트웨어는 항상 변화하는 요구사항에 대응해야 한다. 이를 위해서는 유연한 설계가 필요하며, 이는 기획의 변화에 적절히 대응할 수 있어야 한다.
- 기획에 물어본다: 기획자와 협의하여 해당 코드가 실제로 동일한 목적을 가지고 있는지, 아니면 다른 방향으로 발전할 가능성이 있는지 판단하는 것이 중요
- 합치고 동적으로 특수 로직을 주입하게 한다: 중복 코드를 통합한 후, 필요에 따라 특정 로직을 동적으로 주입하는 방식도 고려해볼 수 있다. 이를 통해 중복을 줄이면서도 각기 다른 요구사항에 대응할 수 있다.
- 초기 분석 중요성: 코드의 중복 여부를 판단할 때, 단순히 겉모습만 보고 결정하기보다는 기획자와 충분히 협의하고, 해당 기능이 어떤 방향으로 발전할 가능성이 있는지 분석하는 것이 중요
- 유연한 설계: 변화하는 요구사항에 대응하기 위해 유연한 설계 방식을 채택해야 한다. 예를 들어, 전략 패턴이나 템플릿 메서드 패턴 등을 활용하여 코드의 재사용성과 유연성을 높일 수 있다.
- 지속적인 커뮤니케이션: 개발자와 기획자 간의 지속적인 커뮤니케이션을 통해 요구사항의 변화를 빠르게 파악하고, 이에 적절히 대응할 수 있는 설계를 유지하는 것이 중요