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

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

 

📃 학습 내용 요약

  • 학습 내용

    • 추상과 구체

       

      • 좋은 추상화란 해당 도메인의 문맥 안에서 중요한 핵심만 남겨서 표현하는 것이다.

      • 추상화의 핵심은 '이름 짓기'!

      • 잘 쓰여진 코드의 메서드는 오직 하나의 주제만 갖고 있다.

      • 코드를 작성할 때, 동등한 추상화 레벨로 맞추는 것이 좋다.

    • 논리, 사고의 흐름

       

      • 뇌의 메모리에 적은 정보를 올리도록 코드를 작성하자.

      • Early return을 통해 else의 사용을 지양하자.

      • 중첩된 분기문, 중첩된 반복문에서 메서드를 추출해 사고의 depth를 줄여보자.

      • 공백 라인을 통해 상대방이 이해해줬으면 하는 단락이 무엇인지 강조하기

    • 객체 지향 패러다임

    • SOLID

 

 

회고

  • Liked (좋았던 점) : 추상화의 개념, 추상과 구체의 관계를 명확히 이해하게 되었고, 코드를 작성에 대한 자신감이 생겼습니다.

  • Lacked (아쉬웠던 점) :

    다른 분들의 코드를 읽으면서 느낀 건데, Day 4 미션에서 리팩토링을 할 때, 추상화 레벨을 동등하게 맞추지 않은 것이 아쉬움이 남습니다..!

  • Learned (배운 점) :

    추상화의 의미를 다시 한번 깨달았습니다! 추상화는 단순히 코드를 짧게 만드는 것이 아니라, 개발자가 더 효율적으로 코드를 작성하고 유지 보수할 수 있도록 돕는 중요한 역할을 한다는 것을 알게 되었습니다.

 

 

📌 Day 2 미션

추상 : 아이유 콘서트 티켓팅을 한다.

구체 :

  1. 제일 먼저 티켓팅을 하기 전에 콘서트 정보를 확인하고, 가고 싶은 날짜와 좋은 좌석을 미리 정한다.

     

  2. 티켓팅 날, 컴퓨터 또는 스마트폰을 준비해서 원하는 웹 브라우저에 접속해 멜론 티켓 홈페이지에 들어가 로그인을 한다.

  3. 아이유 콘서트 예매 페이지에 들어가 정각이 될 때까지 긴장을 풀며 기다린다.

  4. 정확한 시간에 예매 버튼을 클릭하고, 본인의 예매 대기 순서를 기다린 다음에 날짜를 선택한다.

  5. 좌석을 선택하고, 티켓 가격과 할인 수단 확인 후 마지막으로 결제를 한다.

  6. 마이페이지에 들어가 예매 내역을 확인한다.

  7. 두근거리는 마음으로 콘서트 날까지 기다린다.😄

     

추상 : 아이유 콘서트를 봤다.

구체 :

  1. 신나게 즐기기 위해 체력 단련을 하고, 아이유 노래의 응원법을 외운다.

  2. 콘서트 당일 날 보조배터리와 물, 간식 등을 챙겨서 편한 옷을 입고 집을 나선다.

  3. 목적지인 상암월드컵경기장까지 지하철을 타고 간다.

  4. 여유 있게 콘서트 시작 2~3시간 전에 도착해 티켓 부스에 가서 티켓을 수령하고, 아이유 응원봉인 아이크를 구매한다.

  5. 공연장 주변에서 시간을 보내다가, 콘서트 시작 시간에 맞춰 들어간다.

  6. 아이유 콘서트가 시작되는 순간부터 끝날 때까지 현장의 열기를 느끼며, 행복한 시간을 만끽한다.

  7. 새로운 추억을 간직하며, 다음 콘서트를 기대한다.

 

 

📌 Day 4 미션

public boolean validateOrder (Order order) {
    if (order.getItems().size() == 0) {
        log.info("주문 항목이 없습니다.");
        return false;
    }
    
    if (!order.hasCustomerInfo()) {
        log.info("사용자 정보가 없습니다.");
        return false;
    }

    if (order.getTotalPrice() <= 0) {
        log.info("올바르지 않은 총 가격입니다.");
        return false;
    }
    return true;
}
  • 불필요한 if (order.getTotalPrice() > 0) 조건을 제거했다.
    주문 항목이 없거나 총 주문 가격이 0보다 작은 경우 false를 반환하고 있으므로, 추가적으로 검사할 필요가 없다.

  • else연산을 지양하기 위해서 각 if문에서 false 를 일찍 return 한다.

  • !(order.getTotalPrice() > 0) 에서 부정 연산자(!)를 없애고, order.getTotalPrice() <= 0 으로 변경하여 코드의 가독성을 높였다.

     


  1. 단일 책임의 원칙 SRP (Single Responsibility Principle)

한 클래스는 하나의 책임만 가져야 한다. 한 사람이 여러 가지 일을 동시에 해서 효율성이 떨어지는 것보다 여러 사람이 각자 맡은 일에 최선을 다하는 게 더 좋다. 레스토랑에서 주문 받는 사람, 요리 하는 사람, 계산 하는 사람 따로 있듯이 클래스도 각자의 역할에 집중해야 코드가 복잡해지지 않고 유지 보수 하기 쉽다.

  1. 개방-폐쇄 원칙 OCP (Open-Closed Principle)

확장에는 열려 있지만, 수정에는 닫혀 있어야 한다. 새로운 기능을 추가할 때 기존 코드를 수정하지 않고 새로운 코드를 추가하여 시스템을 확장하는 것이다.

  1. 리스코프 치환 원칙 LSP (Liskov Substitution Principle)

자식 클래스는 언제든지 부모 클래스를 대체할 수 있어야 한다. 자식 클래스는 부모 클래스가 사용되는 모든 곳에서 사용될 수 있어야 한다.

  1. 인터페이스 분리 원칙 ISP (Interface Segregation Principle)

하나의 거대한 인터페이스보다는 여러 개의 작은, 특정한 클라이언트를 위한 인터페이스를 사용해야 한다. 레스토랑 메뉴판에서 너무 많은 메뉴를 한꺼번에 보여주는 것보다 종류별로 메뉴를 분리하여 보여주는 것이 고객들이 원하는 음식을 쉽게 찾을 수 있어 편하다. 인터페이스도 특정 기능에 맞게 분리해야 클라이언트가 필요한 기능만 사용할 수 있다.

  1. 의존성 역전 원칙 DIP (Dependency Inversion Principle)

고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화된 인터페이스에 의존해야 한다. 레스토랑에서 요리를 할 때, 특정 브랜드의 재료만 의존하지 않게 해야 한다. 하나의 브랜드만 사용하지 않고, 다양한 브랜드의 재료를 사용함으로써 맛을 더 업그레이드 시킬 수 있다.

 

댓글을 작성해보세요.

채널톡 아이콘