코딩, 그거 그냥 돌아가게만 만들면 되는 거 아니냐구요? 🤔 물론 처음엔 그렇죠! 하지만 우리가 쓴 코드는 앞으로 계속 고치고, 다른 사람들과 함께 보게 될 소중한 자산이에요. 마치 건물을 짓는 것처럼, 처음에는 뼈대를 세우고(Make It Work), 안전 기준을 통과시키고(Make It Right), 마지막으로 멋지게 인테리어(Clean It Up)하는 과정이 필요하답니다. 오늘은 이 3단계 과정을 통해 어떻게 하면 더 좋고, 효율적인 코드를 작성할 수 있는지 알아볼게요! 😉
등장 배경
요즘도 기능 구현에만 급급해서 코드를 작성하는 경우가 많아요. "일단 돌아가게만 만들자!"는 생각이었죠. 🚀 하지만 이런 방식은 당장은 빠를지 몰라도, 나중에 코드를 수정하거나 기능을 추가할 때 큰 어려움을 겪게 만들었어요. 코드가 복잡하게 얽혀있어서 어디를 고쳐야 할지 알기 어렵고, 수정하다 보면 예상치 못한 곳에서 버그가 튀어나오기 일쑤죠. 💣
이런 문제를 해결하고, 장기적으로 유지보수하기 쉽고 다른 개발자들과 협업하기 좋은 코드를 만들기 위해 '클린 코드'의 중요성이 대두되었고, "Make It Work -> Make It Right -> Clean It Up" 이라는 체계적인 접근 방식이 제안합니다.
클린 코드 3단계가 해결하는 문제:
- 문제점 1: 코드가 아예 동작하지 않아요! 😭
- 해결 (Make It Work): 일단 코드가 기본적인 기능을 수행하도록 만드는 데 집중해요. 완벽하지 않아도 괜찮아요!
- 문제점 2: 코드가 돌아는 가는데... 뭔가 불안해요 🤔 (숨겨진 버그, 예외 처리 미흡)
- 해결 (Make It Right): 테스트 코드를 작성해서 다양한 경우(정상적인 경우, 예외적인 경우)에 코드가 정확히 동작하는지 검증해요. 숨어있는 버그를 찾아내고 코드의 신뢰도를 높이죠.
- 문제점 3: 코드가 너무 복잡해서 이해하기 어렵고 수정하기 힘들어요 🤯
- 해결 (Clean It Up): 동작하고 검증된 코드를 더 읽기 쉽고, 관리하기 편하도록 리팩토링해요. 중복을 제거하고, 변수나 함수의 이름을 명확하게 바꾸는 등의 작업을 하죠.
핵심 원리
이 3단계 과정을 시각적으로 표현하면 다음과 같은 흐름으로 볼 수 있어요:
Bash
+-------------------+ +-----------------+ +-----------------+
| Step 1: |----->| Step 2: |----->| Step 3: |
| Make It Work | | Make It Right | | Clean It Up |
| (기능 구현 초점) | | (테스트로 검증) | | (리팩토링) |
+-------------------+ +-----------------+ +-----------------+
| ^ | ^
| | | |
+----(개선점 기록)------+ +----(테스트 통과?)-----+
각 단계를 좀 더 자세히 살펴볼까요?
1단계: Make It Work (일단 돌아가게 만들자!) 🏃♀️
- 핵심 목표: 코드의 주요 기능을 빠르게 구현하는 것.
- 기능에 집중하세요: 처음부터 완벽하거나 가장 효율적인 방법을 찾으려고 너무 애쓰지 마세요. 일단 목표한 기능이 동작하게 만드는 것이 최우선!
- 섣부른 최적화는 금물: "이 부분은 나중에 더 빠르게 만들 수 있을 텐데..." 하는 생각이 들어도 일단 넘어가세요. 아직 동작하지도 않는 코드를 최적화하는 건 의미가 없어요.
- To-Do 리스트 활용: 코드를 작성하다가 '나중에 개선해야 할 부분' (예: 특정 코드를 도우미 함수로 빼기, 하드코딩된 문자열을 상수로 바꾸기 등)이 보이면 주석이나 별도 목록에 적어두세요.
- 딴 길로 새지 마세요: 기능을 구현하는 도중에 갑자기 리팩토링에 빠져들지 않도록 주의하세요. 지금은 기능 구현에만 집중!
- 비유: 집을 지을 때, 일단 기둥 세우고 지붕 올리는 것부터 하는 것과 같아요. 내부 인테리어는 나중에 걱정해도 돼요. 🏡
2단계: Make It Right (제대로 만들자!) ✅
- 핵심 목표: 코드가 정확하게 동작하는지 테스트를 통해 검증하는 것.
- 테스트 코드를 작성하세요: 단순히 '잘 되겠지'라고 생각하는 대신, 코드가 의도한 대로 정확히 작동하는지 확인하는 테스트를 만드세요. 성공 케이스뿐만 아니라 실패 케이스, 경계값(edge case) 등 다양한 시나리오를 커버해야 해요.
- (심화) 뮤테이션 테스팅 활용: 테스트 코드의 품질을 높이는 방법 중 하나예요. 일부러 코드에 작은 변형(mutation, 예를 들어 조건문 바꾸기)을 가한 뒤, 기존 테스트 코드가 이 변화를 감지하고 실패하는지 확인하는 거죠. 만약 테스트가 통과한다면, 해당 코드 변경을 잡아낼 테스트 케이스가 부족하다는 의미이니 보강해야 해요.
- 엣지 케이스 처리: 예상치 못한 입력값이나 비정상적인 조건에서도 코드가 오류를 내뿜거나 죽지 않고, 우아하게(?) 상황을 처리할 수 있도록 대비해야 해요.
- 비유: 다 지은 건물이 건축 법규나 안전 기준을 모두 충족하는지 꼼꼼하게 검사하는 단계와 같아요. 🧐
3단계: Clean It Up (깔끔하게 정리하자!) ✨
- 핵심 목표: 이미 동작하고 검증된 코드를 더 읽기 쉽고, 유지보수하기 좋게 개선하는 것.
- 자유롭게 리팩토링하세요: 이제 우리에겐 든든한 테스트 코드라는 안전망이 있어요! 기능이 깨질 걱정 없이 안심하고 코드 구조를 개선하고 가독성을 높이는 리팩토링을 진행하세요.
- To-Do 리스트 해결: 1단계에서 적어두었던 개선점들을 하나씩 처리하세요. (예: 중복된 코드 블록을 함수로 추출하기, 변수 이름을 더 명확하게 바꾸기, 관련 로직을 유틸리티 파일로 옮기기 등)
- 테스트를 자주 실행하세요: 리팩토링하는 중간중간 테스트를 계속 실행해서 혹시 모를 문제를 빠르게 발견하고 수정해야 해요.
- 비유: 안전 검사까지 마친 집에 예쁜 벽지를 바르고, 가구를 배치해서 살기 좋고 보기 좋게 만드는 인테리어 과정과 같아요. 🛋️
예시로 이해하기: 로그인 기능 구현
웹사이트에 새로운 로그인 기능을 추가해야 한다고 가정해 봅시다.
- Make It Work: 사용자가 아이디와 비밀번호를 입력하고 '로그인' 버튼을 누르면, 서버에서 정보를 확인하고 로그인 처리가 되는 기본적인 코드를 작성해요. 일단 로그인이 성공하는 흐름만 구현해요.
- Make It Right: 테스트 코드를 작성해요.
- 정상적인 아이디/비밀번호로 로그인 성공하는 케이스
- 틀린 비밀번호로 로그인 실패하는 케이스
- 존재하지 않는 아이디로 로그인 실패하는 케이스
- 아이디나 비밀번호를 입력하지 않은 경우 (엣지 케이스)
- Clean It Up: 테스트를 통과한 로그인 코드를 살펴봐요.
- 데이터베이스 조회 로직이 중복되나요? -> 별도 함수로 추출해요.
pw
같은 변수 이름 대신userPassword
처럼 더 명확하게 바꿔요.- 코드 들여쓰기나 스타일이 일관적인지 확인하고 정리해요.
주의사항 및 팁 💡
⚠️ 이것만은 주의하세요!
- Make It Work 단계에서 완벽주의에 빠지지 마세요.
- 처음부터 너무 완벽하고 효율적인 코드만 생각하다 보면 진도가 나가지 않을 수 있어요. 일단 동작하게 만드는 것이 중요해요!
- 완벽주의 대신, 개선할 점은 To-Do 리스트에 적어두는 습관을 들이세요.
- Make It Right 단계에서 테스트를 소홀히 하지 마세요.
- "내 코드는 버그 없을 거야"라는 생각은 위험해요! 😅 테스트는 미래의 나를 구원해 줄 안전장치입니다.
- 다양한 시나리오, 특히 엣지 케이스를 커버하는 테스트를 작성하는 것이 중요해요.
- Clean It Up 단계를 건너뛰지 마세요.
- "돌아가는데 굳이 왜 고쳐?"라고 생각할 수 있지만, 정리되지 않은 코드는 기술 부채가 되어 나중에 더 큰 비용(시간, 노력)을 발생시켜요.
- 읽기 좋은 코드가 디버깅도 쉽고, 기능 추가도 용이해요.
💡 꿀팁
- 자동화 도구 활용: 코드 스타일을 검사해 주는 Linter나 코드 포맷터(Formatter)를 사용하면 Clean It Up 단계에서 일관된 코드 스타일을 유지하는 데 도움이 돼요.
- 짝 프로그래밍 (Pair Programming): 동료와 함께 코드를 작성하거나 리뷰하면 Make It Right, Clean It Up 단계에서 놓칠 수 있는 부분을 발견하고 코드 품질을 높이는 데 효과적이에요. 🧑💻👩💻
- 점진적 리팩토링: Clean It Up 단계에서 너무 한 번에 많은 것을 바꾸려 하기보다는, 작은 단위로 나누어 점진적으로 개선하고 테스트하는 것이 더 안전해요.
마치며
지금까지 코드를 더 효과적이고 깔끔하게 작성하는 3단계 접근법, "Make It Work, Make It Right, Clean It Up"에 대해 알아보았습니다. 처음에는 이 과정이 조금 번거롭게 느껴질 수도 있지만, 꾸준히 실천하다 보면 장기적으로 훨씬 더 견고하고 유지보수하기 좋은 코드를 만들 수 있을 거예요! 여러분의 코딩 여정에 이 글이 작은 도움이 되었기를 바랍니다! 😊
혹시 여러분만의 클린 코드 작성 노하우가 있다면 댓글로 공유해주세요! 🙋♀️
참고 자료 🔖
- 로버트 C. 마틴 저, "클린 코드(Clean Code)": 클린 코드 작성에 대한 더 깊이 있는 내용을 다루는 필독서입니다.
#클린코드 #소프트웨어개발 #코딩습관 #리팩토링 #테스트주도개발
'800===Dev Docs and License > 이론 문서' 카테고리의 다른 글
객체지향의 핵심 개념 정복하기 🎯 (0) | 2024.11.03 |
---|---|
What is the Internet (0) | 2024.06.07 |
Network Subnet Introduced (0) | 2024.05.29 |
소프트웨어 크랙 (해적본)은 어떻게 만들고 개발자들은 왜 못막는 걸까? (0) | 2024.05.25 |
The Compilation Process (0) | 2024.05.25 |