default
가 기본값이다.public
: 접근 제한이 없다.protected
: 같은 패키지 내에서 접근 제한이 없고, 다른 패키지라도 상속 관계라면 접근이 가능하다. default
: 같은 패키지 내에서만 접근이 가능하다.private
: 같은 클래스 내에서만 접근이 가능하다.extends
키워드를 사용한다. public class 자식클래스 extends 부모클래스 {
}
✔️ 자바에서는 클래스 간의 관게가 복잡해지는 문제 때문에 다중 상속을 허용하지 않는다.
✔️ final 클래스는 상속할 수 없다. final 메서드 역시 오버라이딩 할 수 없다.
@Override
애노테이션을 사용한다.super
: 부모 클래스의 멤버를 참조할 수 있는 키워드super()
: 부모 클래스의 생성자를 호출할 수 있는 키워드, 부모 클래스의 생성자는 가장 첫 줄에서 호출되어야 한다.abstract
키워드로 추상 클래스를 선언한다.이번주 계산기 과제의 일정은 이렇다..! 강의는 감기 이슈로 이제야 3주차까지 들었지만...금요일 전까지는 완강 하는 걸 목표로 잡았다. 또 아직까진 트러블 슈팅이라고 할만한 것이 없어서 Lv.3까지 도전해봐야 뭔가 나오지 않을까 싶다.
오늘은 어제 작성했던 코드에서 중복되는 부분이나 하나의 기능이라고 판단되는 부분을 메서드로 분리시켰다. 다음은 기존의 코드이다. main 메서드 하나에 너무 많은 코드가 들어가 있어 읽기도 힘들고 직관적이지 않다.
public static void main(String[] args) {
Calculator calculator = new Calculator();
while (true) {
System.out.println("0. 계산하기 | 1. 모든 결과 보기 | 2. 오래된 결과 삭제 | 3. 결과 수정 | 4. 나가기(exit 입력)");
String input = sc.nextLine();
if (input.equals("1")) {
System.out.println(calculator.getResult());
} else if (input.equals("2")) {
calculator.removeResult();
System.out.println(calculator.getResult());
} else if (input.equals("3")) {
int index = sc.nextInt();
int num = sc.nextInt();
calculator.setResult(index, num);
System.out.println(calculator.getResult());
} else if (input.equals("exit")) {
break;
} else {
System.out.print("첫 번째 숫자를 입력하세요: ");
int num1 = sc.nextInt();
sc.nextLine();
System.out.print("두 번째 숫자를 입력하세요: ");
int num2 = sc.nextInt();
sc.nextLine();
System.out.print("사칙연산 기호를 입력하세요: ");
char operator = sc.nextLine().charAt(0);
int result = calculator.calculate(num1, num2, operator);
System.out.println("결과: " + result);
}
}
}
다음은 리팩토링한 코드이다. 메서드를 각각 printMenu()
, printAllResult()
, calculate()
, removeOldestResult()
로 나누었다. 또 if문에서 switch문으로 바꿔 가독성을 높였다. 사실 calculate()
, removeOldestResult()
내에서도 안내 문구가 나오는 부분이 분리되는 것이 좋을 것 같다는 생각이 들었다.🤔 튜터님께 여쭤봤더니 이미 잘 읽히고, 잘 분리된 것 같다고 하셔서 일단 이대로 두기로 했다.
public static void main(String[] args) {
Calculator calculator = new Calculator();
while (true) {
printMenu();
String input = sc.nextLine();
switch (input) {
case "0":
calculate(calculator);
break;
case "1":
printAllResult(calculator);
break;
case "2":
calculator.removeResult();
printAllResult(calculator);
break;
case "3":
removeOldestResult(calculator);
printAllResult(calculator);
break;
case "exit":
System.out.println("프로그램을 종료합니다.");
return;
default:
System.out.println("올바른 메뉴를 골라주세요.");
}
}
}
private static void printMenu() {
System.out.println("0. 계산하기 | 1. 모든 결과 보기 | 2. 오래된 결과 삭제 | 3. 결과 수정 | 4. 나가기(exit 입력)");
}
private static void printAllResult(Calculator calculator) {
System.out.println(calculator.getResult());
}
private static void calculate(Calculator calculator) {
System.out.print("첫 번째 숫자를 입력하세요: ");
int num1 = sc.nextInt();
sc.nextLine();
System.out.print("두 번째 숫자를 입력하세요: ");
int num2 = sc.nextInt();
sc.nextLine();
System.out.print("사칙연산 기호를 입력하세요: ");
char operator = sc.nextLine().charAt(0);
int result = calculator.calculate(num1, num2, operator);
System.out.println("계산 결과: " + result);
}
private static void removeOldestResult(Calculator calculator) {
System.out.print("수정할 인덱스를 입력하세요: ");
int index = sc.nextInt();
sc.nextLine();
System.out.print("수정 후 숫자를 입력하세요: ");
int num = sc.nextInt();
sc.nextLine();
calculator.setResult(index, num);
}
약 기운에 비몽사몽한 하루였다. 밥 → 약 → 졸림의 악순환...그래도 해야할 것들은 거의 끝내서 다행이긴 하지만 내일은 좀 더 정신차리고 공부하자!