Java,Kotlin

[5] Java/Kotlin - java 1차 개인과제

너개발 2024. 9. 11. 08:54
728x90

 

※ 계산기 만들기

ㄴ 레벨 1,2,3으로 구성

 

★ 다양한 추가 기능에 대한 생각 및 레벨별로 기존 코드 유지를 위하여 레벨 1, 1_1 로 클래스를 새로 만들어서 진행한 점 양해부탁 드립니다. 레벨 2,3은  App클래스와 연동되도록 잘 진행하였습니다!

 

[ Lv.1 클래스 없이 계산기 만들기 ]

요구사항)

1. 양의 정수 2개를 입력 받기

2. 연산기호 1개를 입력 받기

3. 입력받은 숫자와 연산기호로 연산계산하고 결과 출력하기

4. 기본적으로 무한반복문을 실행하고 문자열  "exit" 입력했을때만 계산이 끝나도록

 

※ 주의사항ㄴ Scanner를 활용해서 양의정수와 기호를 입력 받기

ㄴ 변수를 요구사항에 맞는 타입으로 잘 선언하기 

 

ㄴ 레벨1 위 요구사항까지의 코드

 

※ 어려웠던 부분 및 고민한 부분

ㄴ 다행히 Lv.1에서는 발생되지 않았음.

 

※ 추가사항

ㄴ "exit"입력하는 계산을 끝내겠습니까? 문구 나올때 계산을 계속 이어나갈 경우 추가 기능

ㄴ 첫번째 계산에서 나온 결과값을 가지고 두번째 계산부터 결과값을 기준으로 추가 연산 진행

ㄴ 위 기능을 위한 result, cnt등의 변수 생성

ㄴ cnt 변수를 증감시켜서 위 기능의 조건에 충족되도록 설정

ㄴ 추후에 계산 횟수같은 것을 구할때 cnt변수를 출력하면 횟수 추출 가능

ㄴ 불필요한 코드 줄이기 (전체 구문을 if문으로 진행했으나, 삼항연산자와 일부문구만 if문 진행하여 코드 줄이기)

정수 2개 입력시 예외처리

ㄴ 정수 예외처리와 "exit"입력시 break;로 처리하여 반복문 탈출하도록

 

ㄴ 추가사항 반영된 코드

 

[ Lv.2 클래스 사용하여 계산기 만들기 ]

요구사항)

1. 사칙연산 수행 후 결과값을 저장하는 메서드를 Calculator 클래스에서 생성

2. 위 메서드의 결과를 저장하는 컬렉션 타입필드를 생성

3. 레벨 1에서 활용한 App클래스에서 Calculator 클래스를 활용할 수 있도록 수정

4. App클래스에서 Calculator클래스에서 생성한 컬렉션필드를 직접적으로 접근하지 못하도록 설정

ㄴ getter, setter메서드를 활용해서 간접적으로 접근하도록 설정

 

 

ㄴ Calculator 클래스

ㄴ 요구사항 1,2과정 완료

 

App 클래스

ㄴ 요구사항 3,4과정 완료

 

 

 

 

 

※ 어려웠던 부분 및 고민한 부분

ㄴ getter, setter 메서드 사용할때 실수가 있었어서 조금 헤맸었다.

ㄴ 트러블 슈팅에도 내용이 있지만, 메서드의 결과값을 따로 출력하지 않고, 값이 출력이 안되어서 혼자 헤매고있었다... (getList 메서드에서 지금 캡쳐본엔 출력문이 있지만, 기존엔 출력문이 없고, return도 하지않았고 App클래스에서 메서드를 출력하고 있지 않았는데 왜 출력이 안되는지 혼자 고민하고 있었다...)

ㄴ 정신차릴 필요성이 있다고 느꼈다.

 

[ Lv.3 Enum, Generic, 람다식 활용한 계산기 만들기 ]

요구사항)

1. Enum 타입으로 연산자 기호를 관리하고 계산기에 적용

2. 제네릭형태로 변경하고 기존의 int타입 말고 여러타입으로 받을수 있도록 수정

ㄴ 계산기 메서드도 위 2가지 요구사항에 걸맞게 함께 수정

3. 람다 & 스트림을 활용하여 Scanner로 입력받은 값보다 큰 값을 출력

 

ㄴ 미완성

 

※ 어려웠던 부분 및 고민한 부분

ㄴ Enum을 활용하는법

ㄴ 제네릭과 Enum을 활용한 계산기 메서드 생성

ㄴ 람다식 & 스트림을 활용한 전체 코드 간소화 및 메서드 수정

 

 

ㄴ 완성본

ㄴ 검색을 통해서 enum과 람다식을 활용한 계산기 기능을 구현했다.

ㄴ enum에서 각 연산기호에 대해서 이름과 연산기호 람다식을 활용한 계산까지 한번에 진행

ㄴ BiFunction 함수형 인터페이스를 사용한다.

ㄴ 아래에서 function.apply를 활용해서 숫자만 입력받고 기호 없이 계산을 진행한다.

ㄴ 객체와 함수를 호출해서 apply를 바로 활용한다.

 

 

 

 

 

728x90