public class Calculator {
/* 연산 결과를 저장하는 컬렉션 타입 필드 선언 및 생성 */
public 반환타입 calculate(...매개변수) {
/* 위 요구사항에 맞게 구현 */
/* return 연산 결과 */
}
}public class App {
public static void main(String[] args) {
/* Calculator 인스턴스 생성 */
Scanner sc = new Scanner(System.in);
/* 반복문 시작 */
System.out.print("첫 번째 숫자를 입력하세요:");
int num1 = sc.nextInt();
System.out.print("두 번째 숫자를 입력하세요:");
int num2 = sc.nextInt();
System.out.print("사칙연산 기호를 입력하세요: ");
char operator = sc.next().charAt(0);
/* 위 요구사항에 맞게 소스 코드 수정 */
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
...
/* 반복문 종료 */
}
}public class Calculator {
/* 연산 결과를 저장하는 컬렉션 타입 필드를 외부에서 직접 접근 하지 못하도록 수정*/
public 반환타입 calculate(...매개변수) {
...
}
/* Getter 메서드 구현 */
/* Setter 메서드 구현 */
}
public class App {
public static void main(String[] args) {
/* Calculator 인스턴스 생성 */
Scanner sc = new Scanner(System.in);
/* 반복문 시작 */
System.out.print("첫 번째 숫자를 입력하세요:");
int num1 = sc.nextInt();
System.out.print("두 번째 숫자를 입력하세요:");
int num2 = sc.nextInt();
System.out.print("사칙연산 기호를 입력하세요: ");
char operator = sc.next().charAt(0);
/* 위 요구사항에 맞게 소스 코드 수정 */
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
...
/* 반복문 종료 */
}
}컬렉션public class Calculator {
/* 연산 결과를 저장하는 컬렉션 타입 필드를 외부에서 직접 접근 하지 못하도록 수정*/
public 반환타입 calculate(...매개변수) {
...
}
...
public void removeResult() {
/* 구현 */
}
}
public class App {
public static void main(String[] args) {
/* Calculator 인스턴스 생성 */
Scanner sc = new Scanner(System.in);
/* 반복문 시작 */
System.out.print("첫 번째 숫자를 입력하세요:");
int num1 = sc.nextInt();
System.out.print("두 번째 숫자를 입력하세요:");
int num2 = sc.nextInt();
System.out.print("사칙연산 기호를 입력하세요: ");
char operator = sc.next().charAt(0);
/* 위 요구사항에 맞게 소스 코드 수정 */
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
...
/* 반복문 종료 */
}
}우선 Calculator 클래스를 생성해준다
그 후에 가장 먼저 저장된 데이터를 삭제할 수 있는 컬렉션 타입 필드를 생성해주어야하므로
순서가 있는 List를 생성해준다
public class Calculator {
List<Integer> resultList = new ArrayList<>();
}
변수 이름은 결과값을 넣어줄 리스트이므로 resultList라고 지었다
그 다음 사칙연산을 수행하고 결과값을 반환하는 메서드를 만들어 준다
private int result;
public int calculate(int num1, int num2, char operate) {
if (operate == '+') {
result = num1 + num2;
} else if (operate == '-') {
result = num1 - num2;
} else if (operate == '*') {
result = num1 * num2;
} else if (operate == '/') {
result = num1 / num2;
}
return result;
}
반환된 결과값을 받을 수 있는 변수 result도 만들어주었다
외부에서 result의 값을 함부로 변경할 수 없게 접근제어자를 사용해 막아주었다.
계산 코드는 Lv1 메인코드에 있는걸 가져왔다
public class Calculator {
private List<Integer> resultList = new ArrayList<>();
private int result;
public int calculate(int num1, int num2, char operate) {
if (operate == '+') {
result = num1 + num2;
} else if (operate == '-') {
result = num1 - num2;
} else if (operate == '*') {
result = num1 * num2;
} else if (operate == '/') {
result = num1 / num2;
}
return result;
}
}
다음으로 App클래스의 메인 메서드에서 Calcualator 클래스의 리스트에 접근하지 못하도록 private 접근제어자를 통해 막아주었다
public void getResult() {
System.out.println("계산 결과: " + resultList.get(resultList.size() - 1));
}
public void setResult(int num) {
resultList.add(num);
}
public List<Integer> getResultList() {
return resultList;
}
public void removeResult() {
resultList.remove(0);
}
Calculatore 클래스에 저장된 연산 결과들 중 가장 먼저 저장된 데이터를 삭제하는 기능을 가진 메서드를 구현해줬다
/**연산 후 결과 반환**/
int result = calculator.calculate(num1, num2, operator);
calculator.setResult(result);
calculator.getResult();
sc.nextLine();
/**리스트의 크기가 5보다 커지면 가장 먼저 저장된 데이터 삭제**/
if (calculator.getResultList().size() > 5) {
calculator.removeResult();
}
그리고 데이터를 삭제하는 기능을 메인에 넣어주기 위해 리스트의 크기가 5보다 커지면
맨 앞의 데이터를 삭제해주는 기능을 만들었다
public boolean isNum(int num) {
if (num < 0) {
System.out.println("잘못된 숫자입니다.");
return false;
}
return true;
}
마지막으로 양의 정수가 아니라면 숫자를 다시 입력받을 수 있도록
검증 로직을 만들어 메인에 하나 추가해주었다
System.out.print("첫 번째 숫자를 입력하세요: ");
int num1 = sc.nextInt();
if (!calculator.isNum(num1)) {
continue;
}
완성본
https://github.com/chaewon9999/Calculator/tree/master/src/level2
주어진 조건을 전부 활용해 코드를 짜는건 너무 어려웠다. 정말 많이 고민한게 get set remove를 메인에서 어떻게 사용하게 해주지? 였다. 원래 calculate의 반환타입을 List로해서 직접 add해주려고 했는데 그렇게하면 main에서 get과 set을 넣어주기가 애매한거같아 int형으로 값만 반환하게 되었다. remove는 .. 어떻게 써야될지를 진짜 모르겠어서 없는 조건을 하나 만들어주었다.
그동안 남이 적어놓은 코드만 보다가 내가 직접 무언갈 생각해서 코드를 짜다보니 확실히 실력이 엄청 늘어난 것 같다. 여러 기능을 추가해 코드를 만들었지만 메인 코드가 더 깔끔해졌나를 생각해보면 그건 아닌거 같아서 조금 아쉽다.