커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
자바 추상화 클래스 질문
Java 문법 종합반 v0
3주차
북마크
이*진
댓글
1
추천
0
조회수
7
조회수
7
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


코드

package thirdProject;

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


package thirdProject;

// 더하기 클래스
public class AddOperation extends AbstractOperation {

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


package thirdProject;

// 뺴기 클래스
public class SubstractOperation extends AbstractOperation {

    @Override
    public double operate(int firstNumber, int secondNumber) {
        return firstNumber - secondNumber;
    }
}


package thirdProject;

// 곱하기 클래스
public class MultiplyOperation extends AbstractOperation {

    @Override
    public double operate(int firstNumber, int secondNumber) {
        return firstNumber * secondNumber;
    }
}


package thirdProject;

// 나누기 클래스
public class DivideOperation extends AbstractOperation {

    @Override
    public double operate(int firstNumber, int secondNumber) {
        return firstNumber / secondNumber;
    }
}


package thirdProject;

public class Calculator {
    private AbstractOperation operation;

    public Calculator(AbstractOperation operation) {
        this.operation = operation;
    }

    public void setOperation(AbstractOperation operation) {
        this.operation = operation;
    }

    public double calculate(int firstNumber, int secondNumber) {
        double result = 0;

        result = operation.operate(firstNumber, secondNumber);

        return result;
    }
}


package thirdProject;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("첫 번쨰 숫자를 입력하세요>>");
        int firstNumber = sc.nextInt();
        System.out.print("첫 번쨰 숫자를 입력하세요>>");
        int secondNumber = sc.nextInt();

        Calculator calAdd = new Calculator(new AddOperation());
        System.out.println(firstNumber + " + " + secondNumber + " = " + calAdd.calculate(firstNumber, secondNumber));

        Calculator calSub = new Calculator(new SubstractOperation());
        System.out.println(firstNumber + " - " + secondNumber + " = " + calSub.calculate(firstNumber, secondNumber));

        Calculator calMult = new Calculator(new MultiplyOperation());
        System.out.println(firstNumber + " * " + secondNumber + " = " + calMult.calculate(firstNumber, secondNumber));

        Calculator calDiv = new Calculator(new DivideOperation());
        System.out.println(firstNumber + " / " + secondNumber + " = " + calDiv.calculate(firstNumber, secondNumber));
    }
}

==========================================================


질문

Calculator calAdd = new Calculator(new AddOperation());
System.out.println(firstNumber + " + " + secondNumber + " = " + calAdd.calculate(firstNumber, secondNumber));

Main 클래스에서 위와 같이 calAdd.calculate(firstNumber, secondNumber));를 하게 되면

Calculator 클래스에 calculate 메서드로 값이 넘어가는 것 같은데


이때 Calculator 클래스에 calculate 메소드(아래 코드)에 operation.operate(firstNumber, secondNumber);로 계산이 이루어진다고 생각됩니다.


public double calculate(int firstNumber, int secondNumber) {
    double result = 0;

    result = operation.operate(firstNumber, secondNumber);

    return result;
}


이때 operation.operate(firstNumber, secondNumber);가 추상화 클래스인 AbstractOperation로 넘어 가는 방식인지 아니면 각 계산 클래스(AddOperation, SubstractOperation, MultiplyOperation, DivideOperation)에 값이 리턴이 어떻게 되는지 이해가 안됩니다.

취소
 공유
취소
댓글 0
댓글 알림
나의얼굴