워밍업 클럽 3기 BE 클린코드&테스트 - 1주차 발자국

워밍업 클럽 3기 BE 클린코드&테스트 - 1주차 발자국

📖 강의 요약

 

2⃣ 추상

우리가 클린 코드를 추구하는 이유

"가독성"

혼자만 사용한다면 아마 필요 없는 이야기 일수도 있을 것이다 하지만 개발자는 협업이 중요하다고 들었다.

나만 코드를 읽는 것이 아니라 협업을 하는 사람들끼리 컨벤션도 중요하지만 그 전에 가독성 있는 코드를 짜면 원활한 작업을 할수 있을 것이라고 생각한다. 추후 발생하는 비용들도 줄어들 것이다.

이번 섹션에서 강조하는 것은 제목처럼 추상인 것 같다.

추상을 알아보자

"추상"

중요한 정보는 가려내어 남기고 덜 중요한 정보는 생략하여 버린다.

미션에서 제출한 내가 이해한 추상과 구체를 위와 같이 예시를 들수 있을 것 같다.

[추상]
인프런 워밍업 클럽 3BE 클린코드 & 테스트를 수료 한다. 
[구체]
2 개 강의(Readable Code: 읽기 좋은 코드를 작성하는 사고법&Practical Testing: 실용적인 테스트 가이드 )를 100 % 수강한다.1회(총 4회) 발자국 작성을 한다.
OT를 포함한 총 3회 온라인 라이브를 출석한다
미션 6개 중 5개 이상 기한 내 제출 완료한다.

추상화의 가장 대표적인 행위는 이름 짓기,메서드 선언, 동등한 추상화 레벨, 매직 넘버,매직 스트링 제거 등 이 있다.

위 주제에서 공통적으로 이름을 잘 짓는 것이 기반이 되는 것 같다. ex) 변수이름, 메서드 이름, 상수 이름

 

3⃣ 논리, 사고의 흐름

이번 섹션에서 한마디로 정리하자면 빼고 생각하자 였다. (로직이 복잡하면 그 내가 먼저 생각 할 수 있는 상황부터 먼저 거르고 생각하기)

추가적으로 부정어, 예외처리, null,optional에 대해 한번 더 생각해보고 작성해보기

 

4⃣ 객체 지향 패러다임

이번 섹션은 좀 반성을 좀 하였다. 특히 강의 중 getter 사용 에 대한 이야기 였는데 무조건 getter를 사용하면 객체안에 정보를 가져올수 있잖아라고 생각하는 나에게 생각을 많이하게 되었다.

핵심 : 관심사를 분리, 높은 응집도, 낮은 결합도, getter를 사용하기 전에 객체의 메시지를 보내서 그 값을 사용할수 있는 지 부터 생각하는 능력 기르기

 

SOLID 원칙

SRP : 하나의 클래스는 단 한 가지 변경 이유(= 책임) 만을 가져야 한다.

OCP: 확장에는 열려 있고, 수정에는 닫혀 있어야 한다.

LSP: 자식 클래스는 부모클래스의 책임을 준수하며, 부모 클래스의 행동을 변경하지 않아야 한다.

ISP : 클라이언트는 자신이 사용하지 않는 인터페이스에 의존하면 안된다.

DIP : 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안된다.

 

5⃣ 객체 지향 적용하기

이번 섹션은 내가 잘 이해를 잘못한 것 같아 다시 보아야 할 것 같다. 지금은 일기 정도로 작성 하지만 이해하여 꼭 적어보자

강의를 듣고 옛날에 내가 작성한 코드(전체 코드 x)가 생각 났다.

public enum ReservationStatus {
    PENDING("PENDING") {
        @Override
        public boolean canChangeTo(ReservationStatus status) {
            switch (status) {
                case APPROVED, CANCELED, EXPIRED -> {
                    return true;
                }
            }
            return false;
        }
    }, APPROVED("APPROVED") {
        @Override
        public boolean canChangeTo(ReservationStatus status) {
            return status.equals(APPROVED);
        }
    }, CANCELED("CANCELED") {
        @Override
        public boolean canChangeTo(ReservationStatus status) {
            return status.equals(CANCELED);
        }
    }, EXPIRED("EXPIRED") {
        @Override
        public boolean canChangeTo(ReservationStatus status) {
            return status.equals(EXPIRED);
        }
    };

지금 보니 메서드 명도 바꿀 필요가 있고 switch 사용으로 유지보수 어려움, if-else 사용 등 고쳐야할 부분이 많은 것 같다.

목표 : 강의를 어느 정도 이해하여 코드를 바꿔보기

 

💡 미션

 

코드와 설명을 보고, [섹션 3. 논리 의 사고 흐름]에서 이야기 하는 내용을 중심으로 읽기좋은 코드로 리팩토링 해보기

 

블로그: https://zunmin4030.tistory.com/56

 

먼저 사이즈가 0이면 어떤 행위를 하고 0보다 크면 어떤 행위 0보다 작으면 어떤 행위를 한다라는 접근으로 코드를 이해 하는 것 부터 시작하였다. 거기에 대한 궁금증을 가지고 섹션별 내가 적용할 수 있는 부분을 생각해보았다. 이름짓기 , 부정 연산자 제거, Early return을 생각하여 과제를 해결하다보니 처음 코드를 말로 정리했을 때 생긴 궁금증을 해소 할수 있었다.

 

💬 회고

 

👍 잘한 점

배운 것을 하나씩 적용해 보며 과제를 수행 해 나갔다.

😮‍💨 아쉬웠거나 보완하고 싶은 점

섹션 5에 대한 이해를 하지 못해 한번 더 공부 해야겠다.

 

📎출처

Readable Code: 읽기 좋은 코드를 작성하는 사고법

https://www.inflearn.com/course/readable-code-%EC%9D%BD%EA%B8%B0%EC%A2%8B%EC%9D%80%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1%EC%82%AC%EA%B3%A0%EB%B2%95/dashboard

댓글을 작성해보세요.


채널톡 아이콘