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