본문 바로가기

개발 일지/TIL

[ #11 ] TIL

✏️ 0429      


3주차 타임라인 발제

Java 문법 종합반 강의_3주차 과제

개인 과제


 

3주차 타임라인 발제

 

벌써 시작한지 3주차라니 시간 잘 간다..

내일부터 Java 보충반 / 심화반 시작된다고 한다

수업은 서로 다른 날짜에 해서 모두 들을 수 있지만 OT는 동시에 시작한다고 하는데 난 어느 쪽이지..? 

 

개인 과제는 수요일 2시까지 제출❗

과제를 제출하지 않아도 패널티는 없지만

덜 했더라도 제출해서 담당 튜터님에게 피드백 받는 것이 훨씬 좋다고 하신다

// 주석 처리해서 넘어려워흑흑 해야겠다

 

 

 

...개인 과제 제출 링크 확인하러 들어갔다가 발견했다

끼약 시간에 쫓기는 것 같아요 🫠🫠

 

 

3주차 강의 과제

 

어려울 것 같아서 매우 긴장했는데

생각보다 그렇게 막 어렵진 않았던 것 같다!!

정답코드 안 보고 제시 사항만 보고 내가 직접 코드를 짜보고 막히면 다시 정리된 내용 찾아보는 식으로 해서

사실 제대로 된 코드는 아닐 수도 있다ㅎ

 

 

Step 1, 2

 

 

  • 더하기, 빼기, 나누기, 곱하기 연산을 수행할 수 있는 Calculator 클래스 만들기
    • 반환 타입이 doubled 인 calculate 메서드 존재
    • String 타입의 operator 매개변수를 통해 연산자
    • int 타입의 firstNumber, secondNumber 매개변수를 통해 피연산자
    • 나머지 연산자(%) 연산자 내용도 추가
// 더하기, 빼기, 나누기, 곱하기 연산을 수행하는 Calculator
public class Calculator {
    // 필드
    String operator;  // 연산자
    int firstNumber;
    int secondNumber;

	// 기본 생성자 (생략)

    // 메서드
    public double calculate (String operator, int firstNumber, int secondNumber) {
        double result = 0;
        switch (operator) {
            case "+" :
                result = firstNumber + secondNumber;
                break;
            case "-" :
                result = firstNumber - secondNumber;
                break;
            case  "*" :
                result = firstNumber * secondNumber;
                break;
            case "/" :
                result = firstNumber / secondNumber;
                break;
            case "%" :
                result = firstNumber % secondNumber;
                break;
            default:
                System.out.println("지정된 연산자가 아닙니다");
                break;
        }
        return result;
    }
}

 

정답 코드에선 if 문을 사용했는데 그것보단 swich 문이 가독성이 더 좋을 것 같아서 사용했다

 

 

Step 3

 

 

  • 연산 클래스를 만든 후 Calculator 클래스와 관계 맺기
  • Calculator 클래스 내부 코드 변경 / 나머지 연산자(%) 제외

AddOperation, SubstractOperation, MultiplyOperation, DivieOperation.java

public class AddOperation {
    public double operate(int firstNumber, int secondNumber) {
        return firstNumber + secondNumber;
    };
}

 

각 연산자 클래스 안에서 계산하도록 코드 변경

 

Calcultor.java

// 더하기, 빼기, 나누기, 곱하기 연산을 수행하는 Calculator
public class Calculator {
    AddOperation addOperation = new AddOperation();
    SubstractOperation substractOperation = new SubstractOperation();
    MultiplyOperation multiplyOperation = new MultiplyOperation();
    DivideOperation divideOperation = new DivideOperation();

    public double calculate (String operator, int firstNumber, int secondNumber) {
        double result = 0;
        switch (operator) {
            case "+" :
                result = addOperation.operate(firstNumber, secondNumber);
                break;
            case "-" :
                result = substractOperation.operate(firstNumber, secondNumber);
                break;
            case  "*" :
                result = multiplyOperation.operate(firstNumber, secondNumber);
                break;
            case "/" :
                result = divideOperation.operate(firstNumber, secondNumber);
                break;
            case "%" :
                result = firstNumber % secondNumber;
                break;
            default:
                System.out.println("지정된 연산자가 아닙니다");
                break;
        }
        return result;
    }
}

 

각 클래스의 객체를 생성해서 메서드 호출했다

Calcultor 클래스에서 모든 걸 처리했다면 이제 계산을 각 클래스에서 하게 되어 책임이 줄게 되었다

혼자 노동하던 계산기 클래스가 직원을 고용해서 업무를 분담하게 되었다

 

 

Step 4

  • 연산 클래스들의 AbstractOperation (추상 클래스) 사용
  • Calculator 클래스의 내부 코드 변경
  • Calculator 의 calculate 메서드의 매개변수 변경

AbstractOperation.java

public abstract class AbstractOperation {
    abstract double operate(int firstNumber, int secondNumber);
}

 

추상 클래스 선언

추상 메서드는 { ] 블럭 없이 !!

 

 

AddOperation, SubstractOperation, MultiplyOperation, DivieOperation.java

public class AddOperation extends AbstractOperation {
    @Override
    public double operate(int firstNumber, int secondNumber) {
        return firstNumber + secondNumber;
    };
}

 

각 연산자 클래스에는 추상 클래스를 상속하게 extends 키워드를 추가해주고

메서드를 사용할 수 있게 Override 해주기

 

Calculator.java

public class Calculator {
    AbstractOperation operation;
    
    // 생성자
    public Calculator(AbstractOperation operation) {
        this.operation = operation;
    }
    
    public double calculate (int firstNumber, int secondNumber) {
        double result = 0;
        result = operation.operate(firstNumber, secondNumber);
        return result;
    }
}

 

추상 클래스를 이용해 연산자 기능을 불러와야 하기 때문에 생성자 적어주기

더이상 연산자를 받아올 필요가 없으니 calculate 메서드에서 String operate 매개변수 삭제

메서드 내용 수정 !

 

Main.java

public class Main {
    public static void main(String[] args) {
        Calculator calculator = new Calculator(new AddOperation());  // 더하기 연산
        System.out.println(calculator.calculate(10,20));  // 30.0
        System.out.println(calculator.calculate(60,20));  // 80.0

        calculator = new Calculator(new SubstractOperation());  // 빼기 연산
        System.out.println(calculator.calculate(10,20));  // -10.0
        System.out.println(calculator.calculate(60,20));  // 40.0
    }
}

 

이렇게 까지가 내가 정답 코드를 보지 않고 직접 풀어본 코드다!

 

개인과제 하기 전에 인텔리제이에 깃 연동해서 history 남는 거 까지 확인했다

commit 을 꼭 해달라는 이유가 hitstory 에 기록이 아주 잘 남기 때문이엇나보다

 

하면서 계속 생성자...추상 클래스..메서드...접근제어자... 활용하려고 보니 정리가 되지 않아 다시 복습을 해야했다

 

어? 이때 무슨 코드 사용하면 되지 않나? 

라면서 머리속에서 튀어나오는 정도가 아닌 모양이다

좀 더 열심히 해야겠다

 

다 풀고 정답 코드를 보니 setCalculator 메서드를 추가해서 연산자가 바뀔 때

내 코드처럼 다시 객체 생성해서 불러오는 게 아니라 그냥 변경만 해줘도 바꿀 수 있었다

 

사실 처음에는 저 그림을 보고

그래서 이게 무슨 그림이야? 뭘 뜻하는 그림인거지? 라는 생각도 들었다

나만 그런걸까나! 인식하는데 시간이 걸렸다

 

그래도 step 1,2 까진 수월하게 만들 수 있어서 잘 배웠구나 싶었다

step 3 은 하면서 조금 멈칫하기도 했다

step 4 추상 클래스 부분을 제일 걱정했는데 생각보다 막힘없이 했던 것 같다

물론 코드는 잘 실행됐는데 어라 잘되네? 였다 솔직히 빨간글을 많이 볼 줄 알았다 ㅋㅋ

 

 

개인 과제

 

- 과제를 시작하기 전 확인할 것

⭐요구사항을 완료할 때마다 git commit 꼭 남기기!

⭐ 학습을 위해 소스 코드를 설명하는 주석 달아두기!

 

계산기 Level 1 : 학습 목표

  • 변수 & 타입 이해하기
  • 연산자 이해하기
  • 제어문 & 반복문 이해하기
  • 배열 & 컬렉션 이해하기

으윽.. 3줄 이상 긴 글을 읽으면 바닥에 있는 레고를 밟게 되는 지병이..!

 

스윽 훌터보면서 해보고 있는데

이게 맞는 건가 싶고.. 글을 잘 이해하고 코드를 작성하고 있는 건지 모르겠다!

'개발 일지 > TIL' 카테고리의 다른 글

[ #13 ] TIL (개인과제 Level 2)  (1) 2024.05.01
[ #12 ] TIL (개인과제 Level 1)  (1) 2024.04.30
[ #10 ] TIL  (0) 2024.04.27
[ #9 ] TIL  (3) 2024.04.25
[ #8 ] TIL  (0) 2024.04.24