자바 사칙연산 계산기 클래스 - jaba sachig-yeonsan gyesangi keullaeseu

사칙연산 계산기 파일 구성

자바 사칙연산 계산기 클래스 - jaba sachig-yeonsan gyesangi keullaeseu

[Calculator.java]

public class Calculator {
    public double calculate(int a, int b, char oper) {
        double result = 0.0;
        
        if(oper == '+') {
            result = a + b;
        }else if(oper == '-') {
            result = a - b;
        }else if(oper == '*') {
            result = a * b;
        }else {
            result = (double) a / b;
        }
        return result;
    }
}

모든 객체가 같은 값을 가질 때에만 인스턴스 변수를 초기화합니다.

인스턴스 변수를 선언할 때 인스턴스 변수를 초기화해야 하는가 아니면 그냥 선언만 할 것인가를 결정할 때는 

모든 객체가 같은 값을 가지고 태어나게 하고 싶은 경우에만 값을 명시해주는 것이 좋습니다.

필수 데이터가 있으면 생성자를 고려합니다.

클래스를 선언하고, 인스턴스 변수를 명시해주었다면 

그 다음에 할 일은 이 데이터 중에서 반드시 필요한 데이터가 있을 경우에는 생성자를 고려

[CalculatorUI.java]

import java.util.Scanner;

public class CalculatorUI {
    
    private Calculator calc = new Calculator();
    
    public void getInput() {
        Scanner sc = new Scanner(System.in);
        
        System.out.println("첫 번째 숫자를 입력하세요.");
        int v1 = sc.nextInt();
        
        System.out.println("연산 기호를 입력하세요.");
        char oper = sc.next().charAt(0);
        
        System.out.println("두 번째 숫자를 입력하세요.");
        int v2 = sc.nextInt();
        
        // calculator 객체에게 일을 의뢰한다.
        double result = calc.calculate(v1, v2, oper);
        
        System.out.println(result);
    }
}

화면을 담당하는 객체는 사용자와 의사소통 담당

데이터 위주로 구성된 클래스의 경우는 외부에서 데이터를 보관하게 하거나, 

데이터를 이용한 간단한 연산을 하기 위해서 존재하는 경우가 대부분

어떤 클래스를 구성할 때에는 화면과 관련된 클래스가 아니라면 화면은 분리되어 있다고 가정하는 것이 좋습니다.

화면을 담당하는 객체와 로직을 담당하는 객체를 연동합니다.

호출하는 쪽에서 필요한 객체를 만들어서 일을 의뢰하는 겁니다.

- 여러 메소드에서 동일한 객체가 필요하다면 인스턴스 변수로 필요한 객체 사용

- 특정 메소드에서만 잠시 특정 객체와 연결할 필요가 있다면 지역 변수로 객체 사용

[Main.java]

public class Main {
    public static void main(String[] args) {
        CalculatorUI ui = new CalculatorUI();
        ui.getInput();
    }
}

main 메소드를 이용해서 객체를 생성해보고 테스트합니다.

구성한 클래스를 맨 마지막으로 해야 하는 작업은 main 메소드를 이용해서 

객체를 만들어보고 실제로 정확히 동작하는지를 알아보는 겁니다.

 - 해당 클래스 안에 main 메소드를 만들어서 테스트하는 방법

 - 외부에 main 메소드를 별도의 클래스로 만들어서 테스트하는 방법

자바 사칙연산 계산기 클래스 - jaba sachig-yeonsan gyesangi keullaeseu

객체지향 프로그래밍에서 가장 중요한 부분은 

클래스의 설계를 어떻게 잡느냐와 클래스 간의 연결을 어떻게 효율적으로 해서

보다 재사용이 가능하도록 작성하는가라고 할 수 있습니다.

요약

- 화면을 담당하는 객체를 별도의 클래스 구성

- 비즈니스 로직을 담당하는 객체를 별도의 클래스 구성

- 데이터의 저장 및 변경을 담당하는 객체를 별도의 클래스 구성

자바 사칙연산 계산기 클래스 - jaba sachig-yeonsan gyesangi keullaeseu

drexqq

공부노트/개인공부!

[Java, 자바] 사칙연산 계산기(Calculator)

drexqq 2020. 5. 21. 20:46

입력받은 두 가지 수를 사칙연산할 수 있는 계산기

코드

import java.util.Scanner;
// 추가할 기능
// continue
// only number
class Calculate {
	// class Calculate를 생성한다.
	// -> int n1, int n2의 값을 받아와서 계산하기
	static int add (int n1, int n2) {
		return n1 + n2;
		//	더하기
	}
	static int min (int n1, int n2) {
		return n1 - n2;
		//	빼기
	}
	static int mul (int n1, int n2) {
		return n1 * n2;
		//	곱하기
	}
	static int div (int n1, int n2) {
		return n1 / n2;
		// 나누기
	}
}
public class MyPractice {

	public static void main(String[] args) {
		// 값을 받기 위해서 Scanner를 생성
		Scanner scan = new Scanner(System.in);
		// 클래스 변수 선언
		Calculate calc = new Calculate();
		
		
		// numbers
		int num1, num2;
		// operator
		char oper;
		// continue yes or no
		String yn;
		
		System.out.println("only support +, -, *, /");
		// first number
		num1 = scan.nextInt();
		// operator
		// char 문자를 받을기 위해 .charAt()을 사용
		oper = scan.next().charAt(0);
		// second number
		num2 = scan.nextInt();
		
		// calculate part
		switch (oper) {
			// add
			case '+':
				System.out.println("Answer -> "+num1+" + "+num2+" = "+Calculate.add(num1, num2));
			break;
			
			// minus
			case '-':
				System.out.println("Answer -> "+num1+" - "+num2+" = "+Calculate.min(num1, num2));
			break;
			
			// multiple
			case '*':
				System.out.println("Answer -> "+num1+" * "+num2+" = "+Calculate.mul(num1, num2));
			break;
			
			// devide
			case '/':
				System.out.println("Answer -> "+num1+" / "+num2+" = "+Calculate.div(num1, num2));
			break;
		}
		
	}

}

추후에 계속 업데이트 해봐야겠다..