[인프런 워밍업 클럽 BE 3기] 백엔드 프로젝트 - 1주차 발자국

[인프런 워밍업 클럽 BE 3기] 백엔드 프로젝트 - 1주차 발자국

image

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로 관리하는 것이 나을 수 있다.


    회고

    메소드 들을 관심사에 따라 분리하여 이름을 짓고 객체로 만들어 관리하는 방법을 배웠다.


    내가 영어를 잘하지 못하여서 메서드를 지을 때 마다 이름들이 제각기 일 때가 있었는데 좋은 컨벤션을 본것 같다.


    그리고 메서드 이름을 더 잘 짓기위해서 영어공부를 해야할 것 같다.

댓글을 작성해보세요.


채널톡 아이콘