
워밍업 클럽 3기 BE 클린코드&테스트 - 1주차 발자국
강의 요약
섹션 2. 추상 (抽象)
우리가 클린 코드를 추구하는 이유
가독성
글이 잘 읽힌다.
이해가 잘 된다.
유지보수 하기가 수월하다.
우리의 시간과 자원이 절약된다.
추상이란?
사물을 정확하게 이해하기 위해서 사물이 지니고 있는 여러 가지 측면 가운데서 특정한 측면만을 가려내어 포착하는 것이다. 어떤 일면만을 추상하는 것은 다른 측면을 버린다는 것과 같다.
추상화를 하는 이유?
적절한 추상화는 복잡한 데이터와 복잡한 로직을 단순화하여 이해하기 쉽도록 돕는다. 즉 읽기가 좋다.
추상화의 가장 대표적인 행위
이름 짓기
메서드와 추상화
메서드 선언부
추상화 레벨
매직 넘버, 매직 스트링
섹션 3. 논리, 사고의 흐름
뇌 메모리 적게 쓰기
Early return
else의 사용을 지양
사고의 depth 줄이기
중첩 분기문, 중첩 반복문
사용할 변수는 가깝게 선언하기
공백 라인을 대하는 자세
공백 라인도 의미를 가진다. (복잡한 로직의 의미 단위를 나누어 보여줌으로써 읽는 사람에게 추가적인 정보를 전달할 수 있다.)
부정어를 대하는 자세
부정어구를 쓰지 않아도 되는 상황인지 체크하기
부정의 의미를 담은 다른 단어가 존재하는지 고민하기 or 부정어구로 메서드명 구성
해피 케이스와 예외 처리
예외가 발생할 가능성 낮추기
어떤 값의 검증이 필요한 부분은 주로 외부 세계와의 접점
의도한 예외와 예상하지 못한 예외를 구분하기
Null을 대하는 자세
항상 NullPointException을 방지하는 방향으로 경각심 가지기
메서드 설계 시 return null을 자제한다
섹션 4 객체 지향 패러다임
단일 책임 원칙 (Single Responsibility Principle)
하나의 클래스는 단 한 가지의 변경 이유만을 가져야 한다.
객체가 가진 공개 메서드, 필드, 상수 등은 해당 객체의 단일 책임에 의해서만 변경 되는가?
관심사의 분리
높은 응집도, 낮은 결합도
개방 폐쇄 원칙 (Open-Closed Principle)
확장에는 열려 있고, 수정에는 닫혀 있어야 한다
추상화와 다형성을 활용해서 OCP를 지킬 수 있다.
리스코프 치환 원칙 (Liskov Substitution Principle)
상속 구조에서, 부모 클래스의 인스턴스를 자식 클래스의 인스턴스로 치환할 수 있어야 한다.
LSP를 위반하면, 상속 클래스를 사용할 때 오동작, 예상 밖의 예외가 발생하거나, 이를 방지하기 위한 불필요한 타입 체크가 동반될 수 있다.
인터페이스 분리 원칙 (Interface Segregation Principle)
클라이언트는 자신이 사용하지 않는 인터페이스에 의존하면 안 된다.
ISP를 위반하면, 불필요한 의존성으로 인해 결합도가 높아지고, 특정 기능의 변경이 여러 클래스에 영향을 미칠 수 있다.
의존 역전 원칙 (Dependency Inversion Principle)
상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 된다. 둘 모두 추상화에 의존해야 한다.
의존성의 순방향 : 고수준 모듈이 저수준 모듈을 참조하는 것
의존성의 역방향 : 고수준, 저수준 모듈이 모두 추상화에 의존하는 것
저수준 모듈이 변경되어도, 고수준 모듈에는 영향이 가지 않는다.
섹션 5 객체 지향 적용하기
상속과 조합
상속보다 조합을 사용하자!
상속은 시멘트처럼 굳어지는 구조다. 수정이 어렵다.
조합과 인터페이스를 활용하는 것이 유연한 구조
Value Object
도메인의 어떤 개념을 추상화하여 표현한 값 객체
값으로 취급하기 위해서, 불변성, 동등성, 유효성 검증 등을 보장해야 한다.
일급 컬렉션
컬렉션을 포장하면서, 컬렉션만을 유일하게 필드로 가지는 객체
컬렉션을 추상화하며 의미를 담을 수 있고, 가공 로직의 보금자리가 생긴다.
만약 getter로 컬렉션을 반환할 일이 생긴다면, 외부 조작을 피하기 위해 꼭 새로운 컬렉션으로 만들어서 반환해주자.
Enum의 특성과 활용
Enum은 상수의 집합이며, 상수와 관련된 로직을 담을 수 있는 공간이다.
특정 도메인 개념에 대해 그 종류와 기능을 명시적으로 표현해줄 수 있다.
만약 변경이 정말 잦은 개념은, Enum 보다 DB로 관리하는 것이 나을 수 있다.
다형성 활용하기
변하는 것과 변하지 않는 것을 분리하여 추상화하고, OCP를 지키는 구조
추상화와 다형성 활용하여 반복되는 if문 제거. OCP 지키기
숨겨져 있는 도메인 개념 도출하기
도메인 지식은 만드는 것이 아니라 발견하는 것
객체 지향은 현실을 100% 반영하는 도구가 아니라, 흉내내는 것이다.
설계할 때는 근시적, 거시적 관점에서 최대한 미래를 예측하고, 시간이 지나 만약 틀렸다는 것을 인지하면 언제든 돌아올 수 있도록 코드를 만들어야 한다.
발작국 1주차 회고
클린 코드와 객체 지향 설계에 대한 학습을 통해 코드의 가독성과 유지 보수성을 높이는 방법에 대해 많은 것을 배웠습니다. 이론으로만 알고 있던 부분들을 실제 코드를 수정해 가면서 배우니 훨씬 더 이해가 잘 되었던 것 같습니다. 빠르게 제 것으로 만들어 현업 프로젝트에 적용해 보고 싶습니다.
댓글을 작성해보세요.