class를 이용한 계산기 / class 배열



  • class를 이용한 캡슐화
  • private 멤버변수 접근법
  • do~while 활용
  • 배열을 활용한 클래스


1. Class 1


1.1 class 설계


접근성 설정 위해 class 멤버변수는 private로 설정 private로 설정된 멤버변수에 접근하기 위한 settter 메서드 계산기의 각 기능을 하는 메서드들

public class CalculatorTest {


	private int num1;
	private int num2;
	private int result;

	// num1,2 result는 멤버변수 따라서 아래 메서드들에서 따로 받아오는값 입력해주지 않아도 됨 (e_method Ex02_인자와반환4 참고)

	public int getAddition() {
		result = num1 + num2;
		return result;
	}

	public int getSubtraction() {
		result = num1 - num2;
		return result;
	}

	public int getMultiplication() {
		result = num1 * num2;
		return result;
	}

	public double getDivision() {
		result = num1/num2;  //casting
		return result;
	}


	//=================================================================================================================
	// setter
	public void setNum1(int num1) {
		this.num1 = num1;
	}

	public void setNum2(int num2) {
		this.num2 = num2;
	}

	//=================================================================================================================
	// getter

	public int getNum1() {
		return num1;
	}

	public int getNum2() {
		return num2;
	}
}


1.2 main code

do~while문 활용


import java.util.*;
public class CalculatorTest_Main {

	public static void main(String[] args) {


		CalculatorTest cal = new CalculatorTest();   // cal이라는 변수명을 가진 CalculatorTest클래 객체 선언
		char contin;
		do {
		Scanner input = new Scanner(System.in);

		System.out.println("숫자 입력 :");
		int input_1 = input.nextInt();
		cal.setNum1(input_1);     //

		System.out.println("숫자 입력 :");
		int input_2 = input.nextInt();
		cal.setNum2(input_2);   // class의 private변수에 접근하기 위한 setter메서드 호출

    // class내부에 선언되어진 계산기능 메서드 호출
		System.out.println("덧셈 : "+cal.getAddition());  
		System.out.println("뻴셈 : "+cal.getSubtraction());
		System.out.println("곱셈 : "+cal.getMultiplication());
		System.out.println("나눗셈 : "+cal.getDivision());

		System.out.println("계속 하시겠습니까? : Y/N");
		System.out.println();

		Scanner input_contin = new Scanner(System.in);
		contin = input_contin.nextLine().charAt(0);
		}while ( contin == 'Y' | contin =='y');
	}
}


2. 배열을 활용한 class


배열선언과 클래스 객체 선언을 각각 해줘야함에 주의 만약, 반복문에 의해 만들어진 s[0],[s1],[s2]의 값을 계속 저장하고 싶다면? ```java public class Main {

public static void main(String[] args) {

	// 배열 선언 + 객체 생성코드 각각 만들어줘야

	Scanner input = new Scanner(System.in);

	System.out.println("입력할 학생 수: ");
	int insert = input.nextInt();

	Student s[] = new Student[insert]; // 이 코드는 배열을 만든 코드일 뿐 class 객체를 만든것이 아니다. 따라서 객체생성 코드 만들어줘야함.

	for (int i = 0; i < insert; i++) {
		s[i] = new Student(); // 객체 생성 코드
													// s라는 클래스객체에 new Student 생성자에 의해 s[0],s[1],s[2]...의 값들이 하나씩 class method에 의해 정의됨

		System.out.println(i+1 + "번 째 학생의 정보 입력 :(이름/kor/eng/math)");
		String str = input.next(); //여기서 nextLine 해버리면 첫번째 실행시 마지막 엔터값이 다음 실행의 첫번째로 넘어오기 때문에 next
		StringTokenizer st = new StringTokenizer(str,"/");


		while(st.hasMoreTokens()) {
			s[i].setName(st.nextToken());
			int a1 = Integer.parseInt(st.nextToken());
			s[i].setKor(a1);
			int a2 = Integer.parseInt(st.nextToken());
			s[i].setEng(a2);
			int a3 = Integer.parseInt(st.nextToken());
			s[i].setMath(a3);
		}

		s[i].calTotal();
		s[i].calAverage();

	}

	for (int i=0; i<insert; i++) {
		System.out.println(s[i].toString());
	}
} ```