본문 바로가기

Java/[패스트캠퍼스] 50일 포트폴리오 챌린지

[4일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring)

수강 강의명

객체 지향의 특징과 개념에 대해 알아봤다면, 이를 적용한 실습을 통해 객체 지향에 한발 더 다가가는 시간을 가졌다.

 

사칙연산 계산기

요구사항

• 간단한 사칙 연산을 할 수 있다.
• 양수로만 계산할 수 있다.
• 나눗셈에서 0을 나누는 경우 IllegalArgument 예외를 발생시킨다.
• MVC패턴(Model-View-Controller) 기반으로 구현한다.

 

프로젝트 구성

패스워드 검증기 코드(password)와 사칙 연산 계산기(calcurator)의 코드를 개별 관리하기 위해 새 패키지를 생성한다.

항상 프로덕션 코드의 패키지(main)와 테스트 코드의 패키지(test)의 경로를 일치시켜야 한다.

 

테스트 코드를 작성하다가 새로운 객체를 생성하기 위해 단축키를 입력하면 해당 객체를 저장할 위치를 지정할 수 있다.

이 때, 프로덕션 코드와 테스트 코드의 경로가 일치하지 않으면 테스트 코드(test 폴더)만 목록에 나타나게 된다.

프로젝트 구조
프로젝트 구조

 

Alt + Enter > Create class '객체명' : 코드를 작성하다가 새로운 객체를 생성하는 방법

코드를 작성하다가 객체를 생성하는 방법
코드를 작성하다가 객체를 생성하는 방법
새로운 객체를 저장할 경로
새로운 객체를 저장할 경로

 

Alt + Enter > Create method '메서드명' in '객체명' : 코드를 작성하다가 새로운 메서드를 생성하는 방법

코드를 작성하다가 메서드를 생성하는 방법
코드를 작성하다가 메서드를 생성하는 방법

 

테스트 코드 작성(+, -, *, /)

연산을 수행할 테스트 코드를 작성한다.

연산을 하려면 연산의 대상인 피연산자와 연산자가 필요하다. 예 : 1(피연산자) +(연산자) 2(피연산자)

절차지향 : 연산을 수행하기 위해 메서드안에 직접 피연산자와 연산자를 넣어 연산을 수행한다.

객체지향 : 하나의 객체안에 연산에 필요한 상태(피연산자, 연산자)를 넣고, 이를 통해 수행해야 할 행동들을 넣는다.

● 덧셈 연산을 수행한다.
● 뺄셈 연산을 수행한다.
● 곱셈 연산을 수행한다.
● 나눗셈 연산을 수행한다.

 

① 테스트 코드 : Calculator에게 피연산자, 연산자, 피연산자를 전달하여 연산 작업을 위임한다.

② Calculator : 연산에 대한 결과를 반환하도록 구현한다.

                        연산자(+, -, *, /)만 변경하여 그에 따른 연산을 수행하도록 작성한다.

③ 테스트 코드 : Calculator의 연산 결과와 기대값이 일치하는지 확인한다.

코드 앞 부분 > Alt + Enter > Introduce local variable : 메서드가 수행한 결과를 저장할 변수를 생성하는 방법

메서드가 수행한 결과를 변수에 저장한다.
메서드가 수행한 결과를 변수에 저장한다.
한글이 깨지는 문제
한글이 깨지는 문제

 

한글이 깨지는 문제

테스트는 성공했지만, 한글이 깨져 출력되는 문제점이 발생했다.

Edit Custom VM Options... 에 진입하여 해당 문장을 넣고 IntelliJ를 재실행하면 해결된다.

Help > Edit Custom VM Options...
-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8

Edit Custom VM Options...
Edit Custom VM Options...
Edit Custom VM Options...Edit Custom VM Options...
Edit Custom VM Options...
테스트 코드 실행 결과
테스트 코드 실행 결과

 

테스트 코드 작성(사칙 연산)

● 사칙 연산을 수행한다.
● 덧셈 연산을 수행한다.

● 뺄셈 연산을 수행한다.
● 곱셈 연산을 수행한다.
● 나눗셈 연산을 수행한다.

① 테스트 코드 : 애너테이션 변경(@Test → @ParameterizedTest)

② 테스트 코드 : Stream 메서드를 생성하여 arguments() 피연산자, 연산자, 피연산자를 넣는다.

③ 테스트 코드 : Stream 메서드를 @MethodSource의 대상으로 지정한다.

④ 테스트 코드 : arguments()를 사칙 연산 테스트 메서드의 인자로 받는다.(arguments() 내 문장이 순차적으로 수행된다.)

⑤ 테스트 코드 : Calculator의 연산 결과와 기대값이 일치하는지 확인한다.

@MethodSource : 하나의 테스트 코드로 n가지의 경우를 한꺼번에 처리 가능

 

테스트 코드 리팩토링(Enum)

테스트 코드 → (연산 요청) → Calculator → (연산 요청) → Enum
Enum → (결과 전달) → Calculator → (결과 전달) → 테스트 코드

① Enum : 연산자(+, -, *, /)를 Enum 형태로 리팩토링한다.

                 연산을 수행할 추상 메서드를 정의하고, 정의한 추상 메서드를 연산자마다 구현한다.

Calculator : 테스트 코드에게 연산을 요청 받으면 연산을 수행하는 Enum의 추상 메서드를 호출하여 작업을 위임한다.

③ Enum : Enum의 연산자와 인자의 연산자가 일치하는지 확인한다.

                 일치 : 해당하는 값을 가져온다. > 연산자에 해당하는 추상 메서드를 호출한다.

                 일치하지 않음 : 일치하는 연산자가 없으면 예외를 발생시킨다.

④ 테스트 코드 : Calculator의 반환 결과와 기대값이 일치하는지 확인한다.

 

테스트 코드 리팩토링(Interface)

테스트 코드 → (연산 요청) → Calculator → (연산 요청) → Interface → (연산 요청) → 구현체
구현체 → (결과 전달) → Interface → (결과 전달) → Calculator → (결과 전달) → 테스트 코드

① Interface : 인터페이스를 선언한 다음 이를 구현하는 연산자 객체(+, -, *, /)를 생성한다.

② Calculator : 연산 작업을 Enum에서 인터페이스로 위임한다(Enum → Interface).

                        각각의 구현체들을 상위 인터페이스를 통해 전달 받는다.

                        구현체의 연산자와 인자의 연산자가 일치하는지 확인한 후 해당 구현체에게 연산 작업을 위임한다.

                        일치 : 해당하는 값을 가져온다.

                        일치하지 않음 : 일치하는 구현체가 없으면 예외를 발생시킨다.

③ 테스트 코드 : Calculator의 반환 결과와 기대값이 일치하는지 확인한다.

수강 화면수강 화면
수강 화면

 

오늘 공부한 실습 프로젝트는 자바를 공부할 때 접해 본터라 익숙하지만, 혼자서 구현해 본 적은 없다.

빈 백지 상태에서 실습한 내용을 복습하려고 구현 흐름을 적어놓았다.

● 테스트 코드는 1:1로만 작성해야 되는 줄 알았다.

● @ParameterizedTest, @MethodSource를 사용하면 하나의 테스트 코드로 n가지의 경우를 한꺼번에 처리 가능하다.

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://bit.ly/43z0P6S

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완