인프런 워밍업 클럽 4기 BE - 1주차 발자국
✅ 강의 수강
학습 요약
섹션: 추상
추상과 구체
적절한 추상화란 도메인의 문맥 안에서, 정말 중요한 핵심 개념만 남겨서 표현하는 것이름 짓기
메서드 이름으로 메서드의 주제, 구체적인 내용을 명확히 드러내야 한다. 내부를 더 작은 단위의 메서드로 쪼갤 수도 있다.메서드 선언부
파라미터와 반환타입을 통해 많은 정보를 전달할 수 있다.추상화 수준 일치
하나의 세계에서는 추상화 레벨을 동등하게 맞춘다.매직 넘버/스트링 제거
상수 추출로 이름을 지어 가독성과 유지보수성을 높일 수 있다.
섹션: 논리, 사고의 흐름
뇌 메모리 적게 쓰기
읽는 사람이 외워야 할 내용을 줄이고, 코드 구조를 단순하게 만든다.Early return, 중첩 줄이기
Early return으로 else 사용을 지양하고, 중첩구조를 줄인다.공백 라인, 부정어 활용
흐름 단위마다 공백을 주고, 부정 연산자보다 부정의 의미를 담은 단어, 부정어구를 사용해 메서드명을 구성한다.해피 케이스와 예외 처리
예외 상황도 함께 고려하여 처리하거나 발생 가능성을 낮추어야 한다.Stream API, Optional 사용
NPE방지, Optional이 필요한 상황에 사용한다.
섹션: 객체 지향 패러다임
객체의 책임 분리
하나의 객체는 하나의 관심사만 갖고, 관심사끼리는 느슨하게 연결 (높은 응집도, 낮은 결합도)객체 설계하기
비공개 필드, 비공개 로직을 갖고 공개 메서드 선언부를 통해 외부 세계와 소통한다.getter/setter를 지양하고, 데이터를 꺼내기보다는 객체에 메시지를 보내 역할을 맡긴다.
SOLID
SRP, OCP, LSP, ISP, DIP 원칙을 적용해 유지보수와 확장에 유리한 구조를 만든다.DI / IoC
의존성은 외부에서 주입받고, 객체 생성과 흐름 제어는 프레임워크에 맡긴다.
섹션: 객체 지향 적용하기
상속과 조합
상속보다는 조합을 통해 더 유연한 구조를 만든다.Value Object와 Entity
VO는 불변성, 동등성, 유효성 검증을 보장해야 한다. Entity는 식별자를 가지며 식별자가 같으면 같은 객체로 간주, VO는 식별자 없이 내부의 모든 값이 다 같아야 동등한 객체이다.일급 컬렉션
컬렉션 하나만 필드로 갖는 객체로, 의미와 로직을 부여하고 반환 시 외부 수정 방지를 위해 복사본을 반환한다.Enum
상수의 집합으로, 상태와 관련된 로직을 함께 담아 도메인 개념을 명확히 표현할 수 있다. 값이 자주 바뀐다면 DB로 관리하는 것이 더 적절할 수 있다.OCP를 위한 추상화와 다형성
if문 대신 다형성을 활용해 변경 없이 확장 가능한 구조를 만든다.숨겨져 있는 도메인 개념 도출하기
코드에 숨어 있는 개념들을 찾아 별도로 추출해 모델링한다.
학습 회고
일주일 동안 진도표에 맞춰 모든 강의를 따라가는 것이 생각보다 쉽지 않았다. 특히 코드 리팩토링 실습을 따라가면서, 내가 아직 IDE 활용에 능숙하지 않다는 점을 체감했다. 그럼에도 새로운 기능들을 많이 알게 되었고, 앞으로 더 잘 활용할 수 있을 거라는 생각에 강의를 듣길 정말 잘했다고 느낀다. 스케줄이 밀리기도 했지만, 그럼에도 미션을 수행해 제출할 수 있어 다행이다. 완벽하지는 못해도 꾸준히 따라가려는 태도를 유지하며 이번 기회를 통해 실무에 도움되는 내용을 하나라도 더 배워가고 싶다. 다음 주에는 시간을 조금 더 잘 안배해 예제 코드를 활용한 실습에 더 집중해보고자 한다. 내 페이스로 따라가다 보면 리팩토링과 개발 환경에 대한 감각도 자연스레 익숙해지길 기대한다.
✅ 미션
해결 과정
Day4 미션으로는 로직의 흐름을 한눈에 파악하기 어려운 상태의 validateOrder()
메서드를 강의에서 배운 리팩토링 기준에 따라 개선하였다. 이전까지는 리팩토링을 한다고 하면 도대체 어디서부터 어떻게 시작해야 할지 막막했으나 강의에서 배운 리팩토링 기준을 정리해두고, 그 기준을 하나씩 적용해가며 개선하니 훨씬 수월했다.
SOLID 원칙을 자신의 언어로 정리하라는 미션을 수행하면서는 LSP의 예로 ‘조류 클래스를 상속한 펭귄은 나는 기능을 수행하지 못하여 예외가 발생하는 것’과 같이 쉽고 간단한 예시를 함께 찾아보고 떠올리며 지식을 내면화 하는데 집중해 보았다. 각 원칙이 실제 상황에서 어떻게 적용되는지 이해할 수 있었다.
미션 회고
이번 미션을 통해 강의에서 배운 리팩토링 기준을 실제 코드에 직접 적용해보며, 막연하게만 느껴졌던 리팩토링이 구체적인 기준을 따라 단계적으로 실행할 수 있는 작업이라는 점을 체감했다. 특히 메서드 네이밍만으로도 코드의 책임과 의도를 훨씬 명확하게 할 수 있다는 점이 인상 깊다.
SOLID 원칙 또한 단순히 개념을 암기하는 것이 아닌, 예시와 함께 다시 정리하고 내 언어로 설명할 수 있게 된 점이 큰 수확이었다. 읽기 쉬운 코드로 만드는 것을 훨씬 덜 막막하게 느끼게 된 한 주였다.
댓글을 작성해보세요.