java공부 - 객체와 클래스를 이용하여 계산기 만들기

2022. 2. 23. 23:08JAVA

728x90

 

package calculate;

public class Calculator {

	// 필드
	private int result1;
	private double result2;
	
	// 생성자
	public Calculator() {
		// 객체 초기화역할
		result1 = 0; // 필드 초기화
		result2 = 0.0;
		powerOn(); //메소드 호출
	}
	
	
	
	public int getResult1() {
		return result1;
	}

	public double getResult2() {
		return result2;
	}



	public void powerOn() {
		System.out.println("전원을 켭니다.");
	}
	
	public void powerOff() {
		System.out.println("전원을 끕니다.");
		System.exit(0);
		// 프로그램 강제종료
	}
	
	public void add(int x, int y) {
		this.result1 = x + y; 
	}
	
	public void substract(int x, int y) {
		this.result1 = x - y;
	}
	
	public void multiply(int x, int y) {
		this.result1 = x * y;
	}

	public void divide(double x, double y) {
		this.result2 = x / y;
	}


}

 

class Calculator는 설계도로 비유한다.

설계도를 가지고 아래와같이 cal이라는 객체를 만든다.

 

클래스는 필드, 생성자, 메소드라는 구성 멤버가 있다.

 

구성멤버별로 필드는 객체의 데이터가 저장되는 곳이다.

생성자는 객체 생성시 초기화 역할을 담당한다.

마지막으로 메소드는 객체의 동작에 해당하는 실행 블록이다.

 

필드에 private는 접근 지정자라고 한다.

private 접근 지정자는 비공개를 지시하는 것으로, private 멤버는 클래스 내의 멤버들에게만 접근이 허용된다.

 

생성자는 new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화 역할을 한다.

모든 클래스는 생성자가 반드시 존재한다.

만약 생성자가 없을 시 컴파일러는 기본생성자를 자동으로 만든다. 그러나 생성자를 명시해준다면 만들지 않는다.

생성자는 반환타입이 없고, 클래스이름과 같은 이름을 사용해야한다.

 

필드로 초기값을 주는 방법 vs 생성자로 필드를 초기화 하는 방법

각각의 이점이 있다.

필드의 경우에는 동일한 클래스로부터 생성되는 객체들은 모두 같은 값을 갖게 된다.

생성자로 필드를 초기화 할 경우에는 객체 생성 시점에 외부에서 제공되는 다양한 값들로 초기화가 가능하다.

상황에 맞춰 사용하면 된다.

위 경우에는 필드로 초깃값을 주는 것이 나으나 공부하는 차원에서 이렇게 코드를 짰다.

 

메소드들 중 Getter Setter 메소드는 객체의 필드를 외부에서 직접적으로 접근 하는 것을 막기위해 사용한다.

Getter 메소드로는 필드값을 가공한 후 외부로 값을 전달하고, Setter 메소드로는 매개값을 검증해서 유효한 값만 객체의 필드로 저장할 수 있다.

 

package calculate;

import java.util.Scanner;

public class CalculatorMain {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
    
		System.out.println("계산기를 생성합니다.");
		
		Calculator cal = new Calculator();
        // 클래스 변수 = new 클래스명();
        // 대입연산자를 사용해 클래스 변수한테 주소를 넘겨준다.
        
		while(true) {
			int opp;
			System.out.println("1~5번중에 선택해주세요");
			System.out.println("1: + , 2: -, 3: *, 4: /, 5:계산기 종료");
			opp = scan.nextInt();
			if(opp == 5) {
				cal.powerOff();
			}
			int a;
			int b;
			System.out.println("수를 입력해주세요");
			a = scan.nextInt();
			System.out.println("수를 입력해주세요");
			b = scan.nextInt();
			switch(opp) {
			case 1:
				cal.add(a,b);
				System.out.println("값은" + cal.getResult1());
				break;
			case 2:
				cal.substract(a,b);
				System.out.println("값은" + cal.getResult1());
				break;
			case 3:
				cal.multiply(a,b);
				System.out.println("값은" + cal.getResult1());
				break;
			case 4:
				cal.divide(a,b);
				System.out.println("값은" + cal.getResult2());
				break;
				
				default:
					System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
					continue;
					
		}
		
		}
	}

}

whlie문 switch case문을 활용해 간단한 계산기를 만들어 봤다.

 

감사합니다!

728x90