![[인프런 워밍업 클럽 BE 3기] 백엔드 프로젝트 - 1주차 발자국](https://cdn.inflearn.com/public/files/blogs/a68f37d4-edc9-4434-b592-9026ec288086/백엔드 워밍업.png)
[인프런 워밍업 클럽 BE 3기] 백엔드 프로젝트 - 1주차 발자국
1주차 발자취
참여 계기
사이드 프로젝트나 회사 프로젝트를 진행하다 보면, 몇 달 전에 작성한 내 코드를 보면서 ’이게 무슨 의미지?’라고 생각하는 일이 점점 많아졌다.
더 이상 이렇게는 안 되겠다는 생각에 클린코드와 리팩토링에 관한 책을 읽고 나름대로 적용해 보았다. 하지만 내가 제대로 적용한 건지, 아니면 공부한 방식이 잘못된 건지에 대한 의문이 들던 중 워밍업 클럽을 알게 되었다.
워밍업 클럽에 참여하면 강사님의 개선되는 코드뿐 아니라 과제와 다른 사람들의 코드도 볼 수 있어, 읽기 좋은 코드를 작성하는 데 많은 도움이 될 것 같아 참여하게 되었다.
학습내용
추상
클린코드를 하는 이유?
가독성을 높인다.
가독성 상승 -> 코드가 잘 읽힌다 -> 이해하기가 쉽다 -> 유지보수하기 쉽다 -> 시간과 자원이 절약된다.
추상
사물을 정확하게 이해하기위해서 중요한 정보는 가려내어 남기고, 덜 주요한 정보는 생략하여 버리는 것
추상화
복잡한 데이터와 복잡한 로직을 단순화하여 이해하기 쉽도록 돕는다
적절한 추성화: 도메인의 문맥 안에서 핵심 개념만 남겨서 표현하는 것
추상화의 가장 대표적인 행위 = 이름 짓기
논리 사고의 흐름
인지적 경제성
최소한의 인지만 가져가 최대의 효율을 내보자
사고의 depth 줄이기
사용할 변수는 가깝게 선언하기
부정어를 대하는 자세
부정어구를 쓰지 않아도 되는 상황인지 체크
부정의의미를 담은 다른 단어가 존재하는지 고민 or 부정어구로 메서드명 구성
해피 케이스와 예외 처리
예외가 발생할 가능성 낮추기
어떤 값의 검증이 필요한 부분은 주로 외부 세계와의 접점
의도한 예외와 예상하지 못한 예외를 구분하기
객체지향
객체지향이란?
관심사를 분리해여 객체로 만들어 높은 응집도와 낮은 결합도의 프로그램을 만드는 것
객체지향 SOLID
SRP(Single Responsibility Principle): 단일 책임 원칙
하나의 클래스는 하나의 책임을 가져야한다.
주문이라는 클래스가 존재할 때 주문 클래스는 주문만 처리해야하고, 결제, 포인트와 같은 다른 책임을 시행하지 않아야한다.
OCP(Open Closed Priciple): 개방 폐쇄 원칙
확장에는 열려있고, 수정에서는 닫혀있다.
수정이 많이 필요한 구현체를 의존하지 않고, 변하지 않는 추상에 의존해야한다.
LSP(Listov Substitution Priciple): 리스코프 치환 원칙
하위 타입 객체는 상위 타입 객체에서 가능한 행위를 수행한다.
상위 타입의 객체에 구현된 기능이 상속받은 하위 타입의 객체에서 의도하지 않은 동작을 하지 말아야한다.
ISP(Interface Segregation Principle): 인터페이스 분리 원칙
자신이 사용하는 메소드에만 의존
interface를 잘게 분리하여, 구현체에서 인터페이스 메서드를 사용하지 않도록 한다.
DIP(Dependency Inversion Principle): 의존 역전 원칙
변하기 쉬운 것 (구체적인 것) 보다는 변하기 어려운 것 (추상적인 것)에 의존
상위 클래스는 하위 구현체에 의존하지 않고, 인터페이스에 의존하여 구현체를 쉽게 변경할 수 있게 해야한다.
객체지향 적용하기
상속과 조합
상속보다 조합을 사용하자
부모와 자식의 결합도가 높다
조합과 인터페이스를 활용하는 것이 유연한 구조
Value Object
도메인의 어떤 개념을 추상화혀여 표현한 값 객체
값으로 취급하기 위해서, 불변성, 동등성, 유효성 검증 등을 보장해야 한다.
VO / Entity
Entity는 식별자가 존재한다. 식별자가 아닌 필드의 값이 달라도, 식별자가 같으면 동등한 객체로 취급한다.
VO는 식별자 없이, 내부의 모든 값이 다 같아야 동등한 객체로 취급한다.
일급 컬렉션
일급시민
다른 요소에게 사용 가능한 모든 연산을 지원하는 요소
일급 컬렉션
컬렉션을 포장하면서, 컬렉션만을 유일하게 필드로 기지는 객체
컬렉션을 추상화하며 의미를 담을 수 있고, 가공 로직의 보금자리가 생긴다
getter로 컬렉션을 반환할 일이 생긴다면, 외부 조작을 피하기 위해, 새로운 컬렉션으로 만들어서 반환해주자.
Enum
Enum은 상수의 집합이며, 상수와 관련된 로직을 담을 수 있는 공간이다.
특정 도메인 개념에 대해서 그 종류와 기능을 명시적으로 표현해줄 수 있다.
만약 변경이 정말 잦은 개념은 Enum보다 DB로 관리하는 것이 나을 수 있다.
회고
메소드 들을 관심사에 따라 분리하여 이름을 짓고 객체로 만들어 관리하는 방법을 배웠다.
내가 영어를 잘하지 못하여서 메서드를 지을 때 마다 이름들이 제각기 일 때가 있었는데 좋은 컨벤션을 본것 같다.
그리고 메서드 이름을 더 잘 짓기위해서 영어공부를 해야할 것 같다.
댓글을 작성해보세요.