티스토리 뷰

4주차 미션은 이메일 형식의 요구사항을 받아 미션을 해결하는 과제로

실제 업무를 하는 느낌을 주려 만든 문제 같았다.

 

요구사항도 굉장히 복잡하고 난이도도 꽤 있는 문제라 고민도 많이 하고 고치기도 많이 한 과제였다.

 

 

 

자세한 미션의 내용과 필자의 소스를 보고싶다면 하단의 링크를 참조하면 된다.

 

https://github.com/0bliviat3/java-christmas-6-0bliviat3

 

GitHub - 0bliviat3/java-christmas-6-0bliviat3: 크리스마스 미션을 진행하는 저장소

크리스마스 미션을 진행하는 저장소. Contribute to 0bliviat3/java-christmas-6-0bliviat3 development by creating an account on GitHub.

github.com

 

 


 

 

 

작성한 소스의 디렉토리 구조는 다음과 같다.

 

SRC
├─main
│  └─java
│      └─christmas
│          │  Application.java
│          │  
│          ├─config
│          │      AppConfig.java
│          │      AppLauncher.java
│          │      Config.java
│          │      
│          ├─controller
│          │      EventController.java
│          │      
│          ├─domain
│          │  │  AmountDTO.java
│          │  │  Badge.java
│          │  │  BillBuilder.java
│          │  │  Day.java
│          │  │  DiscountCalculator.java
│          │  │  OrderMenu.java
│          │  │  
│          │  └─constants
│          │          BadgeConstants.java
│          │          CalculatorConstants.java
│          │          DayConstants.java
│          │          DiscountConstants.java
│          │          FoodConstants.java
│          │          
│          ├─exception
│          │      ExceptionConstants.java
│          │      InputException.java
│          │      
│          ├─service
│          │      AmountService.java
│          │      
│          └─view
│              │  InputView.java
│              │  OutputView.java
│              │  
│              └─constants
│                      InputConstants.java
│                      OutputConstants.java
│                      
└─test
    └─java
        └─christmas
            │  ApplicationTest.java
            │  
            ├─constants
            │      FoodConstantsTest.java
            │      
            ├─domain
            │      BadgeTest.java
            │      CalculatorTest.java
            │      DayTest.java
            │      OrderMenuTest.java
            │      
            ├─exception
            │      InputExceptionTest.java
            │      
            └─service
                    AmountServiceTest.java

 

 


 

 

이번 미션은 지난 코수타에서 나왔던 코치님이 언급한 내용을 접목시켜서 개발하기로 마음먹었다.

 

 

핵심기능을 ReadMe 상단에 정리 작성후 핵심기능부터 만들것

 

그래서 요구사항을 분석해본결과 핵심기능은 날짜에 따른 혜택 반영기능이 핵심기능이라 판단이 들어

이 부분부터 개발을 시작했다.

 

그간의 미션은 입력부부터 순차적으로 개발해왔던지라 갑자기 바꾸는게 사실 쉽지 않았지만

좋은 습관들이는것은 바로바로 적용시켜야한단 생각이라 바로 시도해봤다.

 

이번 미션에서 조금 심도있게 공부해서 해결했던 부분은 비슷한 구조를 하나의 메소드로 만들어

메소드의 파라미터로 메소드를 넘기는 방법과

enum을 좀 더 활용해 검증하는 함수를 만들어 내는 부분이였다.

 

 

  • enum 검증함수
  • 함수형 인터페이스의 활용

 

 

1. enum 검증함수

 

이전의 미션에서 상수를 관리하기 위해 사용해오던 enum을

이번 미션에서는 임의의 데이터가 현재 관리중인 상수중에서

존재하는가를 검증하는 예외처리 함수가 필요했다

 

현재 메뉴를 상수로 관리하되 메뉴의 이름, 메뉴의 종류, 메뉴의 가격을 묶어서 관리하기 위해

enum으로 관리하고 입력받는 데이터가 상수로 관리하는 메뉴중에 있는가를 확인할 검증함수가 필요했는데

이를 함수로 정의해 사용하는 부분이다.

 

public static FoodConstants from(String food) {
        for (FoodConstants foodConstants : FoodConstants.values()) {
            if (foodConstants.contains(food)) {
                return foodConstants;
            }
        }
        throw InputException.createException(ORDER);
}

 

 

존재한다면 해당하는 상수를 리턴해주고 존재하지 않는다면 예외를 발생시켜 검증하도록 했다.

 

상수의 관리뿐만아니라 검증에 대한 책임도 enum에서 갖도록 하는 방식이라 재사용성이 매우 높아

기억에 남았던 부분인듯하다.

 

 

2. 함수형 인터페이스의 활용

 

지난 과제 코드리뷰에서 피드백을 받았던 부분중하나인 반복되는 구조를 줄여보는건 어떤가에 대한

내 나름대로의 답은 함수형 인터페이스의 활용이였다.

 

한가지 예시를 들어 함수형 인터페이스의 필요성을 어필해보도록 하겠다.

 

public String aaa(boolean flag) {
	if(flag) {
    		return bbb();
        }
    	return ccc();
}

public String aaa2(boolean flag) {
	if(flag) {
    		return ddd();
        }
    	return ccc();
}

public String aaa3(boolean flag) {
	if(flag) {
    		return eee();
        }
    	return ccc();
}

 

 

다음과 같이 같은 구조를 갖지만 내부에서 실행하는 메소드가 달라 다른 메소드로 정의해야하는 상황이 

오는 경우 파라미터로 내부에서 호출할 메소드를 넘겨준다면 이를 하나의 메소드로 줄여서 표현이 가능하다.

 

이 때 사용하는것이 바로 함수형 인터페이스인것이다.

 

그래서 이부분에 대한 학습을 통해 비슷한 구조를 갖는 모든 메소드를 하나로 묶어서 사용할수 있게 되었다.

좀 더 자세한 내용은 회고록이 아닌 다른 글에서 다루도록 하겠다.

 


 

 

이번 주 미션을 마지막으로 한달간의 프리코스 과정이 막을 내렸다.

결과는 기다려봐야 알겠지만 사실 한달간 미션을 수행하며 스스로 학습하며 얻게된것들이 많아

충분히 보람찬 시간이였다. 

 

조금은 익숙해진 git 사용법, 그리고 각종 디자인패턴에 대한 지식들,

다른 개발자들간의 코드리뷰를 통한 소통, JAVA에 대해 미쳐 알지못했던 기술적인 지식들까지

모두 스스로 학습하며 얻게된것들이고 앞으로 공부할 방향성도 어느정도 정할 수 있던 값진 시간이였다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함