

Readable Code: 읽기 좋은 코드를 작성하는 사고법
Practical Testing: 실용적인 테스트 가이드
강의와 함께한 인프런 워밍업 클럽 스터디 3기 – 백엔드 클린 코드, 테스트 코드 (Java, Spring Boot)
1주차 회고 입니다.
학습 내용 요약
이번 주 동안 [Readable Code: 읽기 좋은 코드를 작성하는 사고법] 강의를 통해 크게 두 가지 주제를 학습했습니다.
1. 추상과 구체
- 추상(abstract)은 코드나 로직에서 세부 구현을 생략하고 핵심 의미만 전달하는 방식입니다.
- 구체(concrete)는 코드나 로직의 세부적이고 구체적인 구현을 모두 드러내는 표현 방식입니다.
이 개념을 코드에 적용하면 다음과 같은 장점이 있습니다.
- 추상화된 이름 짓기와 메서드 분리를 통해 복잡한 코드를 단순화할 수 있습니다.
- 협업 시 팀원에게 필요한 수준의 정보를 전달할 수 있어 효율적입니다.
- 코드 유지보수가 용이해지고 가독성이 높아집니다.
2. 논리와 사고의 흐름, SOLID 원칙
📌 논리, 사고의 흐름
- Early Return: 불필요한 else를 제거하고 조건이 맞지 않을 때 즉시 return해 코드 흐름을 명료하게 유지하는 방법입니다.
- 사고의 Depth 줄이기: 중첩 분기문과 반복문의 깊이를 줄이고, 변수를 필요한 곳 가까이에 선언해 인지적 부담을 낮춥니다.
- 부정어 최소화: 긍정적이고 직관적인 표현으로 메서드 이름을 짓고, 부정 연산자(
!
) 사용을 줄입니다.
📌 SOLID 원칙
- SRP(단일 책임 원칙): 클래스가 하나의 명확한 책임만 가지도록 설계해야 합니다.
- OCP(개방-폐쇄 원칙): 기존 코드를 수정하지 않고 확장할 수 있도록 설계합니다.
- LSP(리스코프 치환 원칙): 자식 클래스가 부모 클래스를 대체해도 프로그램이 정상 작동하도록 설계합니다.
- ISP(인터페이스 분리 원칙): 사용하지 않는 메서드를 구현하도록 강요받지 않도록 인터페이스를 작게 분리합니다.
- DIP(의존성 역전 원칙): 고수준 모듈과 저수준 모듈 모두 추상화된 인터페이스에 의존하여 유연성을 높입니다.
미션 해결 과정 & 회고
Day 2 미션: 추상과 구체 예시
미션
- 추상과 구체 강의를 듣고, 생각나는 추상과 구체의 예시 작성
해결 과정
- 일상적인 예시를 통해 추상과 구체 개념을 명확히 이해하려고 했습니다.
- 회사 출근이나 배달 음식 주문 등 일상 사례를 통해, 간략히 표현된 추상과 세부적인 표현을 비교하여 정리했습니다.
관점 및 이유
- 개념을 일상적이고 친숙한 예시로 접근함으로써 이해를 높이고자 했습니다.
- 추상과 구체의 차이를 분명히 보여줄 수 있는 사례를 선택했습니다.
회고
일상적 예시 덕분에 개념 이해가 훨씬 쉬워졌고, 추상화의 필요성과 구체적 표현의 중요성을 체감할 수 있었습니다. 앞으로 코드 작성 시 이 관점을 계속 유지할 생각입니다.
Day 4 미션 1: 코드 리팩토링
미션
- 중첩 if-else 구조의 주문 검증 메서드 리팩토링
접근 관점
- 코드의 인지적 복잡성을 줄이기 위해 Early Return 방식을 사용했습니다.
- 각 조건이 독립적이며, 직관적으로 위에서 아래로 읽히도록 조건 검사를 순서대로 배치했습니다.
- 추가로 주문(Order) 객체가 자기 책임을 다하는 방식으로 책임을 위임하는 방법도 고려했습니다.
해결 방법
public boolean validateOrder(Order order) {
// 주문 항목 유무
if (order.getItems() == null || order.getItems().isEmpty()) {
log.info("주문 항목이 없습니다.");
return false;
}
// 총 가격 검증
if (order.getTotalPrice() <= 0) {
log.info("올바르지 않은 총 가격입니다.");
return false;
}
// 고객 정보 검증
if (!order.hasCustomerInfo()) {
log.info("사용자 정보가 없습니다.");
return false;
}
// 여기까지 왔다면 유효한 주문
return true;
}
Java회고
Early Return을 적용한 결과, 가독성이 확연히 높아졌고 코드를 읽는 과정이 더 명확해졌습니다. 앞으로도 복잡한 조건 로직을 만날 때 적극적으로 이 방법을 적용할 생각입니다.
Day 4 미션 2: SOLID 원칙 정리
미션
- SOLID 원칙을 자신만의 언어로 정리
해결 과정
- 각 원칙을 “왜 이런 원칙이 필요한지” 스스로에게 질문하며 이해했습니다.
- 실제 코드 예시를 작성하여, SOLID 원칙을 위반한 코드와 준수한 코드를 비교하면서 학습했습니다.
회고
원칙을 “내 언어”로 설명하면서, 이전에 막연히 알고 있던 개념들이 훨씬 더 명확하게 다가왔습니다. 단순히 원칙을 외우는 것과 달리, 직접 코드를 작성하고 리팩토링 과정을 거치며 더 깊이 이해할 수 있었습니다.
회고
이번 주 스터디를 통해 코드를 작성할 때 “추상과 구체의 적정선을 찾는 것이 중요하다”는 점을 깊이 깨달았습니다. 특히 코드가 너무 구체적이면 가독성이 떨어지고, 너무 추상적이면 구체적인 동작이 모호해진다는 점을 직접 실습과 미션을 통해 경험할 수 있었습니다. 또한 Early Return이나 중첩 최소화 등 작은 코드 개선만으로도 가독성이 크게 높아지는 것을 체감할 수 있어 유익했습니다.
스스로 칭찬하고 싶은 점
- 미션을 통해 배운 내용을 바로 적용하여 리팩토링하면서 개념을 내 것으로 만들려고 노력한 점이 뿌듯했습니다.
- SOLID 원칙을 단순히 암기하는 것이 아니라, 스스로 이해하고 예시 코드까지 작성하면서 명확히 내 언어로 표현한 것이 좋았습니다.
아쉬웠던 점 & 보완할 점
- 가끔 너무 추상화에 집중하다 보니 코드가 실제 구현에서 너무 멀어지는 경우가 있어, 구체성과 추상성을 더 균형 있게 다루는 연습이 필요하다고 느꼈습니다.
- SOLID 원칙을 실제 프로젝트 코드에 적용해 보지 못한 점은 조금 아쉬웠습니다. 앞으로 개인 프로젝트에 적용하여 체득할 계획입니다.
다음 주 학습 목표
다음 주는 강의의 다음 섹션인 “리팩토링” 부분을 학습할 예정입니다. 특히 리팩토링 실습을 통해 SOLID 원칙을 실제 코드에 적용하고, 객체 지향적 사고방식을 내 것으로 만드는 것을 목표로 삼고 있습니다.
소감
이번 주 강의를 통해 코드 가독성이라는 주제가 얼마나 중요하고 광범위한지 실감했습니다. 앞으로도 이번 학습 내용을 프로젝트에 적극 적용하며, 읽기 좋고 유지보수하기 좋은 코드를 꾸준히 작성하는 습관을 들이겠습니다.
감사합니다!