[인프런 워밍업 클럽 스터디 2기 백엔드] 1주차 발자국

[인프런 워밍업 클럽 스터디 2기 백엔드] 1주차 발자국

개요

인프런 워밍업 스터디 클럽 2기 백엔드(읽기 좋은 코드, 테스트 코드) 9/27 금요일 시작되었다.

스터디 주제는 박우빈님의 강의인

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

Practical Testing: 실용적인 테스트 가이드

이다.

1 ~ 2주차에는 읽기 좋은 코드 강의를 수강하고, 3 ~ 4주차에는 테스트 강의를 수강 하게 되는데,

이번 글은 1주차, 읽기 좋은 코드 강의를 수강하고 배운 것들을 정리해 보려고 한다.

 

1주차 공부한 내용

image

발자국 작성을 위해 표로 정리했다. 생각보다 번거로운 작업이었다. 강의 하나 듣고 로그 기록하고...

권장 진도표에 따르면, 섹션 5까지 1주차에 수강 하도록 되어 있는데,

이번 주는 섹션 4까지가 한계였다. 생각보다 내용이 많았고, 한 번에 이해되지 않는 내용들은 복습해야 했다.

 

해결한 것 - 인텔리제이 한글 깨짐 이슈

처음부터 난관을 겪었다.

인텔리제이 한글 깨짐 이슈...

강의에서는 지뢰찾기 게임을 콘솔 프로그램으로 구현이 되어 있고,

콘솔에 출력되는 내용이 한글, 지뢰 모양, 네모박스 모양, 깃발 모양 등이 있는데,

전부 깨져서 출력되었다.

구글링을 통해 해볼 수 있는 것들은 다 해봤던 것 같다.

그래도 안 되서 포기하려던 찰나, 유튜브에는 관련 내용이 없는지 살펴보았다.

결국, 해결! (유튜브 만세!)

imageProject Structure 에서 SDK Language level17 버전으로 동일하게 맞춰주니 한글 깨짐 이슈가 해결되었다.

기존에는 SDK21 버전이 적용되어 있었다.

버전이 제대로 맞지 않으면 한글 깨짐 이슈가 일어나는구나를 깨달았다.

 

 

이미 알고 있던 것들

1. 이름 짓기

 

이름을 잘 지어야 한 다는 것은 알고 있었다. 어려워서 그렇지...

image2. 메서드 추출

 

이거는 코드짤 때 열심히 활용하고 있다.

Ctrl + Alt + M

추가적으로 메서드로 추출할 때 주의사항을 설명해주셨는데 도움이 많이 되었다.

메서드를 추출할 때마다 항상 주의사항 4가지를 점검해야겠다.

 

메서드 추출시 주의사항 4가지

  1. 메서드명은 적절한가?

  2. 혹시 메서드가 두 가지 일을 하고 있지는 않은가?

  3. 파라미터는 적절한가?

  4. 반환타입은 적절한가?

왜 이 4가지를 주의 해야 하는지는 강의를 통해 확인하시라.

 

배운 것들

1. 추상화 레벨

 

"하나의 세계 안에서는 추상화 레벨이 동등해야 한다." - 박우빈

추상화 레벨을 동등하게 맞춰야 한다는 개념은 처음 알게 되었다.

이해를 돕기 위해 들어주신 서점 비유가 와 닿았다.

image추상화 레벨을 맞추지 않는 것은 서점 주인이 책들 사이에 표지, 제목도 없는 종이 모음을 책 이랍시고 내놓는 것과 같다.

서점에 들어갔는데 종이 모음을 보게 되면 많이 당황스러울 것 같긴 하다. ㅋㅋㅋ

나는 이런 서점 주인이 되어서는 안되겠다고 다짐했다.

 

2. Early return

Early return 이라는 용어는 처음 접했다.

이거를 무의식적으로, 이런 용어가 있다는 것도 모른채 사용해왔던 것 같다.

Early return을 사용하면 뇌 메모리의 부하를 줄일 수 있겠구나를 깨달았다.

 

3. orElse, orElseGet, orElseThrow의 차이

자바 8 문법을 배울 때 한 번씩 사용해본 메서드들인데 이번에 제대로 정리할 수 있었다.

 

4. getter 사용 자제

setter를 사용하지 말라는 것은 들어봤지만, getter도 사용 하지 않는 것이 좋다는 것은 처음 들었다.

어쩔 수 없을 때는 getter를 써야 겠지만, 클래스를 설계할 때 무지성으로 getter를 선언하는 행동은 지양해야겠다.

 

미션

인프런 워밍업 클럽 스터디는 강의 수강 뿐만 아니라 미션 수행도 해야 한다.

이번 1주차에는 Day 2, Day 4 미션이 있었다.

 

Day 2 미션 - 추상과 구체 예시

일상 생활에서 추상과 구체에 대한 예시를 찾는 미션이었다.

요즘 관심 있는 주제에서 예시를 찾으려고 했다.

요즘 관심 있는 주제는 주식, 운동, 스타크래프트인데,

운동 분야가 가장 설명하기 쉬워 보였고, 모든 사람이 알만한 스쿼트에 대해서 구체적으로 설명했다.

 

Day 2 미션 답변 - 스쿼트를 구체 레벨에서 표현한다면?

  1. 발을 어깨너비로 벌리고 무게중심을 발뒤꿈치에 두면서 무릎을 굽힌다.

  2. 숨을 참고 복압을 유지한 상태로 엉덩이를 뒤로 밀며 허벅지가 지면과 평행해질 때까지 내려간다.

  3. 하체 근육을 사용해 다시 상체를 들어 올린다.

  4. 동작이 끝난 후 숨을 내쉰다.

 

Day 4 미션 - 메서드 리팩토링 실습, SOLID 개념을 자신 만의 언어로

1. 메서드 리팩터링 실습

 
 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;
}

위의 메서드를 읽기 좋은 코드로 리팩토링 해보는 미션이었다.

Early return, 추상화 레벨을 맞춰주기, 공백 라인, 부정어, 이름 짓기에 주의하며 리팩터링을 수행했다.

아래 코드가 리팩터링을 거친 코드

public boolean validateOrder(Order order) {
        if (order.getItems().isEmpty()) {
		log.info("주문 항목이 없습니다.");
		return false;
	}
		
	if (order.isTotalPriceInvalid()) {
		log.info("올바르지 않은 총 가격입니다.");
		return false;
	}
		
	if (order.hasNoCustomerInfo()) {
		log.info("사용자 정보가 없습니다.");
		return false;
	}
				
	return true;
}

2. SOLID 개념을 자신만의 언어로

견고한 객체지향 프로그램을 위해 제시된 개념인 SOLID를 자신만의 언어로 설명하는 미션이었다.

글이 너무 길어지니까 이거는 생략하겠다.

 

아쉬웠던 점

읽기 좋은 코드로 리팩터링하기 위해서는 테스트 코드가 꼭 필요하다.

원래라면 테스트 코드를 짰을 테지만, 시간이 없었다는 핑계로 테스트 코드는 건너 뛰었다.

하지만, 테스트 코드 없는 리팩터링이 오히려 시간을 더 잡아먹을 수 있고, 훨씬 개발자를 불안하게 만드는 것 같다.

3주차부터는 테스트 코드를 본격적으로 배우게 될텐데 기대된다.

 

마무리

100점 짜리는 아니었지만, 내 상황에서 최선을 다한 한 주였다.

미션을 제 때 낼 수 있어서 기쁘다.

2주차도 잘해보자.

 

댓글을 작성해보세요.

채널톡 아이콘