일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 미래직장
- 향상된 for문
- Import
- ;
- 빈즈
- \
- "
- opener
- scanner
- 페이지 이동
- 파일호출
- 팝업창
- 페이지이동
- static
- session.getAttribute
- BEANS
- 동기부여
- Alert
- 파일 호출
- target
- session.removeAttribute
- iframe
- 버리자
- 동기 부여
- 자바빈즈
- 로그인화면
- 영감
- javaBeans
- session.setAttribute
- 데이터사이언스
- Today
- Total
갈림길 이정표
클래스 포함관계 연습 본문
Q.다음 커피 자판기 프로그램을 클래스의 포함관계(has a관계)를 이용하여 설계하시오.
A.
1. CoinIn class
package cafeProblem;
public class CoinIn {
private int coin;
private int jandon;
public int calc(int coin, int cup) {
int price = 200;
this.coin = coin;
this.jandon = coin - cup*price;
return jandon; //jandon은 private 멤버기 때문에 외부에서 부르기 위해선 return 값이 필요
}
}
새로운 변수 및 최초 메소드 (변수간의 관계) 선언
메소드 선언
여기서 흥미로운 점은 "선언 되지 않은 'cup'이라는 변수가 메소드에 사용되었다는 것
※ 메소드 선언 시 argument(?)로 지역변수 생성 (추후 메소드 호출 시 input 값으로 사용될 것)
※price 를 굳이 변수로 둔 것은 나중에 커피 값이 바뀔 것을 대비 (개인적 고찰)
this.coin 과 this.jandon 에 값을 치환시켜 줌으로써 접근하지 못하는 private 멤버 값을 이용할 수 있음.
※주의: this.변수(전역변수) / argument 변수(지역변수: 그 메소드 내에서만 영향있는 변수)
리턴값이 있다고 선언 함으로써 private 멤버 jandon 에게 calc메소드 호출시 output 부여
2. Machine class
package cafeProblem;
public class Machine {
private int cupCount;
CoinIn coinIn;
public Machine() {
coinIn = new CoinIn();
}
public void showData(int coin, int cup){
int jandon = coinIn.calc(coin, cup);
if(jandon < 0) System.out.println("돈 더 가져와 그지야");
else System.out.println("주문하신 커피 " + cup + "잔과\n거스름돈 " + jandon + "원 나왔습니다.");
}
}
멤버 필드
CoinIn 클래스의 coinIn 변수 선언 → CoinIn 클래스의 메소드 호출 가능
생성자 선언
새로운 객체 선언 (Instance): 멤버필드에 있던 coinIn속성의 변수를 복제했다고 보면 됨
메소드 선언
CoinIn 클래스 메소드에서 return 값을 int jandon으로 받았기 때문에 따로 멤버필드 선언 없이 값을 치환 받을 수 있음
※ 모든 데이터는 휘발성이므로 활용하고 싶다면 변수에 저장해야함. coinIn.calc(coin, cup) 을 통해 return jandon 값을 받겠지만 활용불가능한 상태 (데이터가 소실될 수 있는 상태) ... 따.라.서. int jandon이라는 새로운 지역변수에 저장한 후 if문 사용하여 조건 따라 분리시켜야 함
※ 멤버 필드 선언은 해당 클래스가 다른 클래스에서 사용되는 변수가 있을 때만 선언
coin과 cup 값 (input) 입력 → return jandon → jandon을 기준으로 if 조건문 (계산 가능 / 불가능)
3. MachineUse class
※ <더보기 펼쳐보기>Scanner를 이용하여 값을 키보드로 직접 입력시키는방법 (ex. int a 변수에 입력시)
Scanner a = new Scanner(System.in);
int a = a.nextInt();
package cafeProblem;
import java.util.Scanner;
public class MachineUse {
public static void main(String[] args) {
Machine machine = new Machine();
System.out.println("커피는 한잔에 200원 입니다.\n동전을 투입해 주세요.");
Scanner coinIn = new Scanner(System.in);
int coin = coinIn.nextInt();
System.out.println("몇잔을 원하십니까?");
Scanner cupCount = new Scanner(System.in);
int cup = cupCount.nextInt();
machine.showData(coin, cup);
}
}
import java.util.Scanner;
메인 메소드 선언
가장 먼저 Machine 클래스의 machine 객체 생성 (showData 메소드 호출을 위해)
[End 사용자 기준] 동전 투입 ([Scanner]input: coin) → 주문 잔 수 입력 ([Scanner]입력: cup) → '주문 잔 수' 와 거스름 돈 출력 ([showData 메소드 실행]output: cup 과 jandon)
※ Machine class에서 showData 메소드 입력값에 대한 데이터 타입을 미리 정의해 놨기 때문에 MachineUse class 에선 값만 입력해도 되는 것
'Programming Language > Java 문제풀이(feat. 이것이 자바다)' 카테고리의 다른 글
DTO 연습 (0) | 2020.07.23 |
---|---|
추상 클래스 연습 (2) | 2020.07.21 |