TIL - 계산기 Lv2 - 2, 3

Jiyeong Kim·2025년 1월 7일

TIL

목록 보기
4/24

TMI ; TIL이라고 해야하나요 트러블슈팅이라고 해야하나요

조건2

  • Lv 1에서 구현한 App 클래스의 main 메서드에 Calculator 클래스가 활용될 수 있도록 수정
    • 연산 수행 역할은 Calculator 클래스가 담당
    • 연산 결과는 Calculator 클래스의 연산 결과를 저장하는 필드에 저장
    • 소스 코드 수정 후에도 수정 전의 기능들이 반드시 똑같이 동작해야합니다.

예시

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 입력 시 종료)");
            ...
        /* 반복문 종료 */
    }
}
  • lv.1에서 작성한 것을 그대로 사용했지만 char와 String을 혼용하고 있어서 오류가 났다.
  • 양쪽에서 result를 선언하고 출력하는 부분이 너무 헷갈렸다.

    app class

    ```
    public class App {
    public static void main(String[] args) {
        Calculator2 calculator = new Calculator2();
        Scanner sc = new Scanner(System.in);
        boolean keepRunning = true;
        int result;
        .
        .
        .
        .
        .
        .
        .
        result = calculator.calculate(number1, Operation, number2);
            System.out.println("결과: " + result);
            System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
            String reply = sc.next();
            .
            .
            .
            .  
    ```
  • } 누락, 브레이스 범위의 지정이 잘못된 코드들도 있었다. 누락은 내가 찾았지만 범위 지정의 오류는 튜터님이 교정해주셨다..
  • 메소드 호출에 대한 풀이도 튜터님의 도움으로 가능했다...

조건3

  • App 클래스의 main 메서드에서 Calculator 클래스의 연산 결과를 저장하고 있는 컬렉션 필드에 직접 접근하지 못하도록 수정 (캡슐화)
    • 간접 접근을 통해 필드에 접근하여 가져올 수 있도록 구현합니다. (Getter 메서드)
    • 간접 접근을 통해 필드에 접근하여 수정할 수 있도록 구현합니다. (Setter 메서드)
    • 위 요구사항을 모두 구현 했다면 App 클래스의 main 메서드에서 위에서 구현한 메서드를 활용 해봅니다.

Getter

    public List<String> getRecords() {
        return new ArrayList<>(records);
    }

Setter

    public void setRecords(List<String> records) {
        this.records = records; ///?
    }
  • 이게 확실한지.. 모르겠다.
  • 내가 이때까지도 App 클래스로 만들어놓지 않았더라.. 그래서 그냥 Main클래스던걸 App클래스로 만들어주었다.
public class App {
    public static void main(String[] args) {
        Calculator2 calculator = new Calculator2();
        Scanner sc = new Scanner(System.in);
        boolean keepRunning = true;
        int result;





조건4

  • Calculator 클래스에 저장된 연산 결과들 중 가장 먼저 저장된 데이터를 삭제하는 기능을 가진 메서드를 구현한 후 App 클래스의 main 메서드에 삭제 메서드가 활용될 수 있도록 수정
    • 키워드 : 컬렉션
    • 컬렉션에서 ‘값을 넣고 제거하는 방법을 이해한다.’가 중요합니다!

예시

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 입력 시 종료)");
            ...
        /* 반복문 종료 */
    }
}
  • 이게 좀 애매해서 제목에 조건 4까지 적지 못했다.

내가 적은 부분

public void removeRecords(List<String> records) {
        records.remove(records);
        System.out.println("연산 기록 초기화");
    }
  • 기록이 사라지는 지 확인할 수 있는 코드를 추가해야할 것 같다.





+) 인텔리제이 깃허브 연동 시 Master로 브랜치가 생기는 경우

  • 인터넷에서 쉽게 찾을 수 있는 master --> main으로 이름 바꾸는 코드
git branch -m master main
git fetch origin
git branch -u origin/main main

를 써봤지만 되지 않았다.

이것 저것 쳐보다가 왼쪽 깃 아이콘을 눌렀더니 리모트 탭에서 두개의 브랜치가 있는 걸 볼 수 있는데, 여기에서 rebase를 사용했다.

  • 마스터에서 우클릭을 하면 Pull into 'main' Using Rebase 버튼이 있다.
  • Rebase를 하고나서 다시 git pull 또는 git push를 하면
    이런게 뜨는데
  • rebase를 한게 맞으니까
git config pull.rebase true
  • 이제 정상적으로 main을 사용할 수 있다.
profile
해봅시다

0개의 댓글