Intro
코드 잘 짜고 싶은 마음, 우리 모두 똑같습니다.
근데 왜 우리 코드엔 가끔씩 예쁘장한 지옥문이 열리는 걸까요?
이 글에서는 우리가 무의식 중에 빠지기 쉬운 안티패턴의 살펴봅니다.
다음부턴 같은 함정을 피할 수 있도록,우리의 코드, 더 이상 무한 리팩토링 지옥에서 방황하지 않게!
안티 패턴(Anti-Pattern)
1. 안티 패턴의 정의 및 개념
안티 패턴의 개념
문제 해결을 위해 적용했으나, 비효울적이거나 더 큰 문제를 야기하는 잘못된 접근 방식/설계를 이르는 말.
- 디자인 패턴(Design Pattern) 과 대비되는 개념
- 1995년 앤드루 케이니그가 처음 사용한 용어
디자인패턴과 비교
- 디자인패턴 : 문제 해결을 위한 표준적인 방법
- 안티패턴 : 문제를 해결하지 못하거나 새로운 문제를 발생시킴
안티 패턴이 발생하는 이유
관성: 해결할 문제에 상관치 않고 지금까지 해온 관성대로 개발하는 경우.경험 부족: 문제에 적합한 해결 방법을 모르는 경우.단기적인 해결 추구: 시간 부족 등의 사유로 “좋은 해결”이 아닌 “빠른 해결”만 추구한 경우
대표적인 안티 패턴 유형
1. 코드 구조 및 설계 관련
Big Ball of Mud (엉망진창 방식)
- 모듈화와 설계 원칙 없이 코드가 뒤죽박죽 섞여 있는 상태.
- 영향 : 프로젝트가 커질수록 유지보수가 매우 어려워진다.
- 방지법 :
1) 코드 구조를 설계 단계부터 잘 정의하기
2) 모듈화와 계층 구조를 유지
3) SOLID 원칙과 같은 설계 원칙을 따르기
4) 객체 간의 명확한 경계를 유지
Spaghetti Code (스파게티 코드)
- 코드가 서로 얽혀 복잡하고 비직관적인 상태
- 영향 : 흐름이 복잡하여 기능 추가나 버그 수정 시 문제가 발생하기 쉬움
- 방지법 :
1) 각 기능을 독립된 모듈이나 클래스에서 구현하는 것으로 시작
2) 코드의 가독성과 유지 보수를 높이기 위해 리팩토링을 자주 수행
3) 함수 분리를 통해 책임을 나누기
God Object (신 객체)
- 하나의 객체에 너무 많은 책임이 부여되어 시스템 내 거의 모든 일을 처리하려는 경우
- 방지법: 단일 책임 원칙(Single Responsibility Principle) 적용
Lava Flow (용암 흐름)
- 기존 코드에서 필요 없거나 삭제해야 할 코드가 남아 있는 상태
- 영향 : 시간이 지날수록 쌓여 시스템 성능 저하 + 유지보수를 어렵게 만듦
- 방지법 :
1) 사용하지 않는 코드를 제거하고, 리팩토링을 통해 불필요한 부분을 정리
2) 정기적인 코드 리뷰를 통해 코드의 품질을 유지
2 개발 습관 및 구현 관련
Golden Hammer (황금 망치)
- 모든 문제를 하나의 기술이나 패턴으로 해결하려는 잘못된 접근
- 영향 : 특정 디자인 패턴이나 기술을 과도하게 사용하면 오히려 더 복잡한 상황을 초래
- 방지법 : 상황에 맞는 다양한 도구와 패턴을 이해하고 적용하는 유연성
Copy-Paste Programming (복사-붙여넣기 프로그래밍)
- 기존 코드를 복사하여 여러 곳에 붙여넣는 방식
- 영향 : 코드 중복을 야기하고 유지보수 시 실수가 발생하기 쉬움
- 방지법 : 중복된 부분을 재사용 가능한 모듈이나 함수로 분리하는 것이 좋음 (DRY 원칙)
Magic Numbers (매직 넘버)
- 코드 내에서 의미를 알 수 없는 상수 값이 사용되는 것
- 영향 : 코드의 가독성과 유지보수를 저해
- 방지법 : 숫자 대신 상수나 열거형(Enum)을 사용하여 의미 있는 이름을 부여
안티 패턴 방지 전략
안티 패턴을 인지하고 회피하는 것은 소프트웨어 품질 개선과 유지보수 비용 절감에 필수적이다. 이를 위해 다음과 같은 대응 전략이 권장된다.
| 구분 | 내용 |
|---|---|
| 지속적인 코드 리뷰 | 코드 리뷰를 통해 설계가 적절한지, 안티 패턴이 발생하지 않는지 검토 |
| SOLID 원칙 준수 | 객체 지향 설계 원칙을 잘 지켜 유연하고 재사용 가능한 코드 작성 |
| 리팩토링 | 코드가 복잡해지기 전에 주기적으로 리팩토링을 수행하여 유지 보수성 향상 |
| 문제 분석과 해결 | 문제를 정확히 분석하고 적절한 패턴이나 도구를 적용하는 습관 필요 |
| 종합 조언 | 안티 패턴을 인지하고 예방하는 것이 성공적인 소프트웨어 개발의 핵심 |
Reference
https://ko.wikipedia.org/wiki/안티패턴
https://russellstudio.tistory.com/70
https://blog.naver.com/muchine98/220253889434
Comments