inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

발자국 1주차 [인프런 워밍업 클럽 2기 백엔드(클린코드/테스트)]

sodychoe
0

1주차 강의

 

섹션2-추상

추상은 컴퓨터과학을 발전시킨 핵심적인 개념이다 내가 알아야 하는 것과 몰라도 되는 것을 구분하자

 

섹션3-논리, 사고의 흐름

 

섹션4-객체 지향 패러다임

 

섹션5-객체 지향 적용하기

Value Object 까지 수강함

 

회고

 

image

강사님께서 레거시 코드를 리펙터링하는 식으로 수업이 진행되었다

수업 코드가 있는 레포지토리를 fork 해서 진행하는 만큼 강의 진도를 커밋해서 구분해두면

나중에 복습하기 좋을 것 같아 강의별로 한 내용을 커밋 메시지로 요약하고 푸쉬해두었다

각 수업마다 무엇을 했는지 알아보기도 쉽고 잔디도 쌓여서 뿌듯하다

그런데 약간 계획표 진도에 못 미치는 부분이 있으니 더욱 시간을 투자하려고 한다

 


 

1주차 미션

 

Day2 미션

"추상과 구체" 강의를 듣고, 생각나는 추상과 구체의 예시가 있다면 한번 3~5문장 정도로 적어봅시다. 일상 생활, 자연 현상, 혹은 알고 있는 개발 지식 등 어느 것이든 상관 없습니다. 추상에서 구체로, 또는 구체에서 추상으로 방향은 상관 없으나, 어떤 것이 추상이고 어떤 것이 구체 레벨인지 잘 드러나게 작성해 보아요 :)

 

나의 답변 : 운영 체제의 주요 기능 중 하나는 컴퓨터의 CPU , 메모리 입출력장치등의 하드웨어 기능을 추상화하여 사용자가 편하게 사용할 수 있도록 하는 것이다 예를 들어 하드 디스크에 데이터를 읽고 쓰는 데 필요한 기계적인 지식을 알 필요 없이 파일 시스템이라는 체계적이고 직관적인 개념을 통해 읽고 쓰는 개념을 추상화하여 하드웨어의 종류에 관계 없이 동일한 작업을 수행할 수 있다

 


추상이라는 것이 자바에서 인터페이스에만 사용하는 줄 알았는데 컴퓨터과학 전반에서 매우 중요한 개념이라는 걸 배웠다

그래서 컴퓨터과학에서 대표적인 추상을 이용한 사례로 운영체제에 대한 내용이 있길레 작성해보았다

추상에 대해 깊이 생각해볼 수 있어서 좋았다

 

 

Day4 미션

 

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


public boolean validateOrder(Order order) {
    if (order.getItems().size() == 0) {
        log.info("주문 항목이 없습니다.");
        return false;
    } else {
        if (order.getTotalPrice() > 0) {
            if (!order.hasCustomerInfo()) {
                log.info("사용자 정보가 없습니다.");
                return false;
            } else {
                return true;
            }
        } else if (!(order.getTotalPrice() > 0)) {
            log.info("올바르지 않은 총 가격입니다.");
            return false;
        }
    }
    return true;
}

나의 답변 :

// 리펙터링 해본 코드 
public boolean validateOrder(Order order){
  if(isEmpty(order){
    log.info("주문 항목이 없습니다.");
    return false;
  }

  if(isInvalidTotalPrice(order){
    log.info("올바르지 않은 총 가격입니다.");
  return false;
}  

  if(isInvalidUser(order)){
    log.info("사용자 정보가 없습니다.");
}

  return true;
}

private boolean isEmpty(Order order){
  return order.getItems().size() ==0;
} 

private boolean isInvalidTotalPrice(Order order){
  return order.getTotalPrice() < 0;
}

private boolean isInvalidUser(Order order){
  return !order.getCusterInfo();
}

강의해서 메서드의 관심사를 분리하고 early-return 을 사용해 가독성을 높이고 정보량을 줄이는 방법 그리고

부정어를 대체하는 방법을 배웠다

코드가 딱 그런 내용을 리펙터링하는 것이라 생각해서 그에 맞게 고쳐보았다

다른분들 코드와 비슷한 것 같다

 

 

  1. SOLID에 대하여 자기만의 언어로 정리해 봅시다.

나의 답변:

답변 0