CLASS/JAVA
#17 / remind3
hingu
2024. 5. 24. 11:46
⚡ abstract
/* [응용문제 1] 추상클래스 응용 - ex_ab.java 해당 프로세서를 실행시 현재 날짜와 시간이 출력되는 코드를 작성하시오. 단, 해당 날짜와 시간은 abstract에서 return 받아서 출력되도록 합니다. 결과 : 2024-05-24 09:45:22 */ public class exam20 { public static void main(String[] args) { new ex20_box(); } } class ex20_box extends ex_ab{ public ex20_box() { System.out.println(this.ex20_abs("yyyy-MM-dd hh:mm:ss")); System.out.println(this.ex20_abs("yyyy-MM-dd")); } @Override protected String ex20_abs(String part) { return super.ex20_abs(part); } } /////////////-- 외부 abstract파일 --///////////// public abstract class ex_ab { //*-- 응용1 private Date day = null; protected String ex20_abs(String part) { day = new Date(); //new는 안에 : 딱 submit하는 순간의 시간으로 측정 //그때그때 다른 타입으로 출력 가능 - 사용성 good SimpleDateFormat sim = new SimpleDateFormat(part); return sim.format(day); } }
/* [응용문제 2] - t String a = ["유재석","신동엽","정상훈","아이유","한지민"]; Scanner 이용 - 추상클래스 출력형태 - 유재석 이체금액 : .. 한지민 이체금액 : 금액 다 합한값 출력 */ public class exam21 { public static void main(String[] args) { new exam21_box(); } } class exam21_box extends ex_ab { private String member[] = {"유재석","신동엽","정상훈","아이유","한지민","박세은"}; private int total = 0; public exam21_box() { int w=0; while(w<member.length) { total += super.ex21_abs(member[w]); w++; } super.sc.close(); System.out.println("총 이체 금액 : " + this.total + "원"); } @Override protected int ex21_abs(String user) { return super.ex21_abs(user); } } /*--- 외부 파일 ----*/ public abstract class ex_ab { private int money = 0; Scanner sc = null; protected int ex21_abs(String user) { try { this.sc = new Scanner(System.in); System.out.println(user + "의 이체금액 : "); money = sc.nextInt(); }catch(Exception e) { System.out.println("숫자로입력"); ex21_abs(user); } return money; } }
/* [응용문제 3] - t 상품 추가 프로세서 제작 "추가할 상품명을 입력하세요 : 선풍기" 입력 "추가할 상품명을 입력하세요 : 선풍기 날개" 입력 "추가할 상품명을 입력하세요 : 종료" 입력 결과 : [선풍기 , 선풍기 날개] */ public class exam22 { public static void main(String[] args) { new exam22_box().product(); } } class exam22_box extends ex_ab { public void product() { ArrayList<String> result = new ArrayList<String>(); //그때그때 받고싶은 값 변경 가능 result = ex22_abs("추가할 상품명을 입력하세요 : "); System.out.println(result); } @Override protected ArrayList<String> ex22_abs(String qa) { // TODO Auto-generated method stub return super.ex22_abs(qa); } } /////////////-- 외부 abstract파일 --///////////// public abstract class ex_ab { ArrayList<String> prdlist = null; protected ArrayList<String> ex22_abs(String qa) { prdlist = new ArrayList<String>(); //입력한 내용 받는 배열 this.sc = new Scanner(System.in); while(true){ System.out.println(qa); String product = sc.nextLine(); if(product.equals("종료")) { this.sc.close(); break; }else { prdlist.add(product); } } return prdlist; } }
⚡ interface
package exam; //menu_interface.java와 연계 /* [응용문제 4] 메뉴 주문하는 프로세서 interface로 제작 메뉴를 선택해주세요 : [1.돈까스 , 2.함박스테이크, 3.냉면, 4.콩국수] 해당메뉴 외의 숫자 입력시 "메뉴에 없는 코드입니다" 출력 후 프로세서 강제 종료 system.exit(0); 1 선택 : [결과] 메뉴설명 출력 돈까스 - 9000원, 약간매운맛, 우동 함박스테이크 - 14500, 담백한맛, 야채튀김 냉면 - 10000원, 새콤달콤한맛 콩국수 - 4800원, 달콤한맛, 서리태콩국수 */ import java.util.Scanner; public class exam24 { public static void main(String[] args) { menuinter resultbox = new menuinter(); inter_name in = new inter_name(); inter_int ii = new inter_int(); resultbox.menuinter_box(in,ii); } } //-- 실제 class class menuinter { Scanner sc = null; String menulist[] = {"돈까스","함박스테이크","냉면","콩국수"}; String menuint[] = {"9000원, 약간매운맛, 우동","14500, 담백한맛, 야채튀김","10000원, 새콤달콤한맛","4800원, 달콤한맛, 서리태콩국수"}; public void menuinter_box(menu_interface mi_n,menu_interface mi_i) { String allmenulist = this.menuQa(); //하단 메뉴판 출력 class에서 가져온 메뉴판 this.sc = new Scanner(System.in); System.out.println("메뉴를 선택해 주세요 : " + allmenulist); //메뉴판 출력 int mynum = this.sc.nextInt(); if(mynum <= menulist.length && mynum > 0) { System.out.println(mi_n.getmenu(mynum-1) + "를 고르셧군요 ^___^"); System.out.println(mi_n.getmenu(mynum-1) +" : "+mi_i.getmenu(mynum-1)+"입니다"); sc.close(); }else { System.out.println("메뉴에 없는 코드입니다."); System.exit(0); } } public String menuQa() { //메뉴판 출력 String allmenu = ""; int f; for(f=0; f<menulist.length; f++) { allmenu += (f+1)+ "." + menulist[f] + " "; } return allmenu; } } //-----implements class inter_name implements menu_interface { menuinter i_mi = new menuinter(); @Override public String getmenu(int a) { String choice_name = this.i_mi.menulist[a]; return choice_name; } } class inter_int implements menu_interface { menuinter i_mi = new menuinter(); @Override public String getmenu(int a) { String choice_int = this.i_mi.menuint[a]; return choice_int; } }
//interface 외부파일package exam; //메뉴에 맞는 interface public interface menu_interface { public String getmenu(int a); }
interface 정통 방식 참고 : https://dev-eunse.tistory.com/97
⚡ IO,Network
/* [응용문제] "이동할 URL을 입력하세요 : " 사용자가 도메인 명을 입력합니다 ex) http://www.naver.com 해당 입력된 모든 내용은 url.txt로 저장되도록 합니다. 이동할 URL을 입력하는 부분은 무한loop, 단 "종료" 라고 입력하면 더이상 질문하지 않습니다. 저장 : d:\\url.txt - 로그 기록 */ public class exam25_t { public static void main(String[] args) { new ex25t_box().file_write("D:\\", "url.txt"); } } class ex25t_box extends ex_ab { @Override protected void file_write(String src, String file) { super.file_write(src, file); System.out.println("입력된 내용이 정상적으로 저장 되었습니다."); } }
- abstact 파일//ex25 - url.txt에 입력(파일 쓰기 기능) private Date times = null; OutputStream os = null; String url = ""; //경로 String filename = ""; //파일명 private byte[] allbyte = null; protected void file_write(String src,String file){ this.url = src; this.filename = file; try { this.os = new FileOutputStream(this.url+this.filename , true); this.sc = new Scanner(System.in); while(true) { System.out.println("이동할 url을 입력하세요 : "); String msg = this.sc.nextLine() + "\n"; if(msg.equals("종료")) { break; } this.allbyte = msg.getBytes(); this.os.write(this.allbyte); this.os.flush(); } }catch(Exception e) { System.out.println("해당 파일을 찾을 수 없습니다"); }finally { this.sc.close(); try { this.os.close(); }catch(Exception e) { System.out.println("강제 종료 실패"); } } }
sc에서 nextByte는 키보드 특정 key를 막거나 할때 주로 사용(배열x 글자 하나만 받음 - char랑 비슷)