사칙연산 계산기 파일 구성
[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 메소드를 별도의 클래스로 만들어서 테스트하는 방법
객체지향 프로그래밍에서 가장 중요한 부분은
클래스의 설계를 어떻게 잡느냐와 클래스 간의 연결을 어떻게 효율적으로 해서
보다 재사용이 가능하도록 작성하는가라고 할 수 있습니다.
요약
- 화면을 담당하는 객체를 별도의 클래스 구성
- 비즈니스 로직을 담당하는 객체를 별도의 클래스 구성
- 데이터의 저장 및 변경을 담당하는 객체를 별도의 클래스 구성
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] static 키워드 (0) | 2021.03.02 |
---|---|
[Java] Map 인터페이스를 구현한 HashMap (0) | 2021.03.02 |
[Java] 가비지 컬렉션(Garbage Collection) (0) | 2021.03.02 |
[Java] 오버로딩(Overloading) (0) | 2021.02.23 |
[Java] 우선순위 큐(Priority Queue) 예제 (0) | 2021.02.23 |
댓글