오늘 진행한 학습 요약
1. [CH 2 프로그래밍 기초 개인 과제] Java로 계산기 만들기
- Lv1 클래스를 활용하지 않는 계산기 주요 트러블 슈팅 내용
- Lv2 클래스를 활용하는 계산기 정리 주요 트러블 슈팅 내용
- (미완) Lv3 Enum, 제네릭, 람다 & 스트림을 이해한 계산기
Java 계산기 Git-hub 링크 : https://github.com/chews26/Java-calculator
2. Enum 공부 (작성 생략)
- Enum의 개념
- Enum 실습
생활코딩 상수와 enum : https://opentutorials.org/module/516/6091
3. 알고리즘 코드카다 Day1 (작성 생략)
CodingTest Git-hub 링크 : https://github.com/chews26/CodingTest
학습 정리
1. [CH 2 프로그래밍 기초 개인 과제] Java로 계산기 만들기
Lv1 클래스를 활용하지 않는 계산기
Lv1. 클래스 업이 기본적인 연산을 수행할 수 있는 계산기 만들기
1. 양의 정수(0)포함 2개를 입력받기
2. 사칙연산 기호를 입력받기
3. 사칙연산 기호에 알맞는 연산을 진행하기.
4. 연산 오류가 발생할 경우 해당 오류에 대한 내용을 정제하여 출력하기
5. "exit" 문자열을 입력하기 전까지 무한으로 계산을 진행하기
주요 트러블 슈팅 내용
- 0포함 양의 정수를 입력받아야 하기 때문에 사칙연산 if문 위에 (firstNum0 >= 0 && secondNum0 >= 0)조건을 추가하였다.
else인 경우 양의 정수를 입력하라는 메세지가 뜨게 수정하였다. - if문, while을 사용한 if문, while을 사용한 case문 연습을 위하여 Case문으로 분기가 가능하게 수정하였다.
- Case문 추가로 인해 각 Case별로 입출력을 구현하였는데 중복된 코드가 많아 개선방법을 고민하였다.
Java라는 언어는 객체지향적인 언어이기때문에 Lv2에서 클래스를 적용해 각 메서드를 활용하면
중복코드를 개선할 수 있을 것이라 생각했다. - while문 사용 시 while(true)를 를 사용하여 조건이 참인 경우 루프가 반복되게 하고, exit를 입력받을 경우 break가 되게 하는 과정에서 어떠한 함수를 사용해야 할지 잘 몰랐었다. .equals를 통해 입력값이 exit와 같은 경우 break가 실행되게 if문을 작성하였다.
Lv2 클래스를 활용하는 계산기 작성 과정
Lv2. 클래스를 적용해 기본적인 연산을 수행할 수 있는 계산기 만들기
1. 사칙연산을 수행 후 결과값을 반환하는 메서드 구현
2. 연산결과를 저장하는 컬렉션 타입 필드를 가진 Calculator 클래스 생성
3. Lv1에서 구현한 App 클래스의 Main 메서드에 Calculator 클래스가 활용될 수 있도록 수정
4. App클래스의 main메서드에서 Calculator 클래스의 연산결과를 저장하고 있는 컬렉션 필드에 직접 접근하지 못하도록 수정
5. Calculator클래스에 저장된 연산결과 중 가장먼저 저장된 데이터를 삭제하는 기능을 가진 메서드 구현
6. App클래스의 main메서드에 삭제 메서드가 활용될 수 있도록 수정
주요 트러블 슈팅 내용
- Lv1에서 작성한 내용 중 계산을 구현한 부분을 Calculator클래스로 이동하여 작성하였다. 파일을 나누고 App클래스의 입력값을 Calculator 인수값으로 받아오기 위해 수정을 진행하였다.
- App클래스는 Calculator의 메서드를 사용하기 위해서 Calculator calculator = new Calculator();를 통해 인스턴스(객체)를 생성하였다.
클래스와 인스턴스의 개념이 헷갈려 추가로 공부를 하니 클래스는 단지 설계도일 뿐이고 객체를 생성해야 메모리상에 존재하는 실체가 된다고 한다. 따라서 원하는 클래스를 사용하기 위해서 new 키워드를 통해 객체를 할당해줘야 한다. - 연산결과를 저장하고 있는 컬렉션 필드에 직접접근하지 못하도록 수정하기 전에 제대로 컬렉션이 저장되고 출력되는지를 확인하기 위해 resultlist.add(result); return result; 작성 후 App클래스에서 calculator.resultlist 값을 줘 출력하였다.
출력이 잘 되는 것을 확인 후 private를 입력하고 getter와 setter를 작성하였는데 getter와 setter를 잘못 입력하면 실행 자체가 되지 않아 테스트에 어려움을 겪었다.
따라서 새코드가 실행이 안되면 주석처리 후 기존 코드와의 차이가 무엇인지 비교하며 작성하였다. - 결과리스트를 반환하는 getResultList()를 작성하고 return값으로는 ArrayList에 저장된 resultlist를 출력하면 되는데 이 과정이 헷갈려서 몇번을 헤매였다. 작성하고나니 이해가 되었다. App클래스에 있는 기존 값들은 calculator.getResultList()로 수정하였다.
Lv3 Enum, 제네릭, 람다 & 스트림을 이해한 계산기
Lv3 Enum, 제네릭, 람다 & 스트림을 이해한 계산기
1. Enum 타입을 활용하여 연산자 타입에 대한 정보를 관리하고 이를 사칙연산 계산기 ArithmeticCalculator 클래스에 활용
2. 실수, 즉 double 타입의 값을 전달 받아도 연산이 수행가능하도록 제너릭 사용
3. 저장된 연산 결과들 중 Scanner로 입력받은 값보다 큰 결과값 들을 출력할 수 있도록
- 도전 기능 가이드로 강의를 완주한 후 다시 작성해 볼 예정이다.
- Enum을 사용한 내용까지는 작성하였으나 Enum으로 정의한 내용이 사칙연산자라 Case문에서 사칙연산자를 바로 입력하여 사용하는 것보다 효율이 더 떨어지는 것을 느꼈다.
- Enum을 어떻게 사용해야 더 가독성있고 효율적인 코드작성이 될지 고민중이다.