Java
package day3;
/*
* static import문
* - 클래스의 static 변수, static 메소드를 import한다.
* - static import문을 사용하면, 소스코드에서 static 변수나 static 메소드를 사용할 떄
* 클래스이름을 생략하고 사용 할 수 있다.
* - 작성 예
* import static java.lang.Math.*;
* Math 클래스의 모든 static 변수와 static 메소드를 import 한다.
* import static java.lang.Math.PI;
* Math 클래스의 static 변수(상수) PI를 import한다.
* import static java.lang.Math.random;
* Math 클래스의 static 메소드 random()을 import한다.
*/
import static java.lang.Math.*;
public class StaticImportApp {
public static void main(String[] args) {
// double value1 = Math.random();
// double value2 = Math.cos(3.14);
// long value3 = Math.round(12.54);
// double value4 = Math.floor(1.6);
// static import문을 사용해서 클래스이름없이 static 메소드를 사용하는 예
System.out.println("임의의 수 : " + random());
System.out.println();
System.out.println("반올림된 값(3.2) : " + round(3.2));
System.out.println("반올림된 값(3.7) : " + round(3.7));
System.out.println();
System.out.println("바닥값(-3.2) : " + floor(-3.2));
System.out.println("바닥값(-3.7) : " + floor(-3.7));
System.out.println("바닥값(3) : " + floor(3));
System.out.println("바닥값(3.2) : " + floor(3.2));
System.out.println("바닥값(3.7) : " + floor(3.7));
System.out.println();
System.out.println("천장값(-3.2) : " + ceil(-3.2));
System.out.println("천장값(-3.7) : " + ceil(-3.7));
System.out.println("천장값(3) : " + ceil(3));
System.out.println("천장값(3.2) : " + ceil(3.2));
System.out.println("천장값(3.7) : " + ceil(3.7));
}
}
// 추상 메소드
abstract void sample();
추상클래스는 abstract 키워드가 붙은 클래스다.
public abstract class Sample {
}
추상클래스는 추상화된 추상메소드를 가지는 클래스다.
public abstract class Sample {
// 추상 메소드
abstract void test1();
// 추상 메소드
abstract void test2();
// 구현 메소드
void test3() {
수행문;
}
}
추상클래스는 new 키워드를 사용해서 객체 생성할 수 없다.
목적
package day3.template;
public abstract class AbstractBanking {
// 모든 뱅킹작업에서 항상 실행하는 전처리 작업 - 변하지 않는 부분
private void before() {
System.out.println("은행 전산시스템과 연결하기");
System.out.println("사용자 인증작업 수행하기");
}
// 모든 뱅킹작업에서 항상 실행하는 후처리 작업 - 변하지 않는 부분
private void after() {
System.out.println("은행 전산시스템과 연결 해제하기");
}
// 실제로 수행하는 작업에 대한 메소드만 설계 - 변하는 부분
// AbstractBanking을 상속받는 하위 클래스가 구현해야할 부분
public abstract void job();
// 뱅킹작업에 참여하는 모든 메소드를 순서에 맞게 실행해주는 메소드
void process() {
before();
job(); // 하위클래스에서 재정의한 job()이 실행된다.
after();
}
}
package day3.template;
public class ATM {
// AbstractBanking클래스의 구현객체를 참조하는 참조변수
// 이체작업, 입금작업, 출금작업, 대출작업 등을 구현한 다양한 AbstractBanking의 하위객체를
// 참조할 수 있다.
private AbstractBanking banking;
// AbstractBanking 하위객체의 주소값을 전달받는 Setter 메소드
public void setBanking(AbstractBanking banking) {
this.banking = banking;
}
// 뱅킹작업을 실행하는 메소드
// 뱅킹작업과 관련된 일련의 작업들을 순서대로 실행해주는 process() 메소드를 실행한다.
public void runBanking() {
banking.process();
}
}
package day3.template;
import java.util.Scanner;
public class ATMApp {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ATM atm = new ATM();
Deposit deposit = new Deposit();
Transfer transfer = new Transfer();
while (true) {
System.out.println("-----------------------------------");
System.out.println("1. 입금 2.이체 0.종료");
System.out.println("-----------------------------------");
System.out.print("메뉴번호를 선택하세요 : ");
int menuNo = sc.nextInt();
if (menuNo == 1) {
System.out.println("[입금작업]");
atm.setBanking(deposit);
atm.runBanking();
} else if (menuNo == 2) {
System.out.println("[이체작업]");
atm.setBanking(transfer);
atm.runBanking();
} else if (menuNo == 0) {
System.out.println("[종료]");
break;
} else {
System.out.println("잘못 입력하셨습니다 다시 선택해주세요");
continue;
}
}
}
}
package day3.template;
public class Deposit extends AbstractBanking {
@Override
public void job() {
System.out.println("입금액을 입력받는다.");
System.out.println("금액을 확인한다.");
System.out.println("잔액을 증가시킨다");
System.out.println("입금결과를 표시한다.");
}
}
package day3.template;
public class Transfer extends AbstractBanking {
@Override
public void job() {
System.out.println("이체금액을 입력받는다.");
System.out.println("수신자 계좌번호를 입력받는다.");
System.out.println("수신자에게 금액을 이체한다.");
System.out.println("잔액을 변경한다.");
System.out.println("이체결과를 화면에 표시한다.");
}
}