Backend/JAVA
[JAVA] 특강 20일차 : 코딩 훈련! 문제 풀이 (상속&인터페이스&추상&다형성&파일)
JOKUN
2022. 7. 19. 17:32
Ani
📑문제
강아지/고양이 동물 정보 프로그램 (문제 문서 저장 못함 TT)
🔍풀이
AnimalManager
package com.kh.practice.ani.controller;
import com.kh.practice.ani.model.vo.Animal;
import com.kh.practice.ani.model.vo.Cat;
import com.kh.practice.ani.model.vo.Dog;
public class AnimalManager {
public static void main(String[] args) {
// Animal 타입의 객체배열 크기 5로 생성
Animal[] aniArr = new Animal[5];
// 각 인덱스에 무작위로 Dog객체 또는 Cat객체로 생성
// (이때, 매개변수 생성자를 이용하여 생성)
aniArr[0] = new Dog("망고", "리트리버", 45);
aniArr[1] = new Cat("노랭이", "코숏", "길", "노란색");
aniArr[2] = new Dog("쿤", "포메라니안", 4);
aniArr[3] = new Cat("느림보", "스핑크스", "홈", "그레이");
aniArr[4] = new Dog("살구", "보더콜리", 20);
// 반복문을 통해서 해당 배열의 0번 인덱스부터 마지막 인덱스까지의
// 객체의 speak() 메소드 호출
for(Animal ani : aniArr){
System.out.println(ani instanceof Dog ? ((Dog)ani).speak() : ((Cat)ani).speak());
}
}
}
Dog
package com.kh.practice.ani.model.vo;
public class Dog extends Animal{
private int weight;
public Dog() {
}
public Dog(String name, String kinds, int weight) {
super(name, kinds);
this.weight = weight;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
@Override
public String speak(){
return super.toString() + "몸무게는 " + weight + "kg입니다.";
}
}
Cat
package com.kh.practice.ani.model.vo;
public class Cat extends Animal{
private String location;
private String color;
public Cat() {
}
public Cat(String name, String kinds, String location, String color) {
super(name, kinds);
this.location = location;
this.color = color;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String speak() {
return super.toString() + location + "에 서식하며, 색상은 " + color + "입니다.";
}
}
Animal
package com.kh.practice.ani.model.vo;
public abstract class Animal {
private String name;
private String kinds;
public Animal() {
}
public Animal(String name, String kinds) {
this.name = name;
this.kinds = kinds;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getKinds() {
return kinds;
}
public void setKinds(String kinds) {
this.kinds = kinds;
}
/**
* "저의 이름은” + name + "이고, 종류는 " + kinds + "입니다."의 형식으로 문자열 만들어 리턴 처리
* @return
*/
@Override
public String toString(){
return "저의 이름은 " + name + "이고, 종류는 " + kinds + "입니다.";
}
public abstract String speak();
}
File
📑문제
노트 파일 만들고 열어서 수정하는 프로그램 만들기
🔍풀이
Run
package com.kh.practice.file.run;
import com.kh.practice.file.view.FileMenu;
public class Run {
public static void main(String[] args) {
new FileMenu().mainMenu();
}
}
FileMenu
package com.kh.practice.file.view;
import com.kh.practice.file.controller.FileController;
import java.util.Scanner;
public class FileMenu {
private FileController fc;
private Scanner sc;
public FileMenu(){
fc = new FileController();
sc = new Scanner(System.in);
}
// 필드
public void mainMenu(){
while (true){
System.out.println("***** My Note *****");
System.out.println("1. 노트 새로 만들기");
System.out.println("2. 노트 열기");
System.out.println("3. 노트 열어서 수정하기");
System.out.println("9. 끝내기");
System.out.print("메뉴 번호 : ");
int menuNUm = sc.nextInt();
sc.nextLine();
switch (menuNUm){
case 1:
fileSave(null);
break;
case 2:
fileOpen();
break;
case 3:
fileEdit();
break;
case 9:
System.out.println("프로그램을 종료합니다");
return;
default:
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
return;
}
}
}
public void fileSave(String fileName){
System.out.println("파일에 저장할 내용을 입력하세요.");
System.out.println("ex끝it 이라고 입력하면 종료됩니다.");
System.out.println("내용 : ");
StringBuilder sb = new StringBuilder();
while (true){
String inputText = sc.nextLine();
if(inputText.equals("ex끝it")){
break;
}
sb.append(inputText + "\n");
}
if(fileName != null){
fc.fileEdit(fileName, sb.toString());
return;
}
while (true){
System.out.print("저장할 파일 명을 입력해주세요(ex. myFile.txt) :");
fileName = sc.nextLine();
if(fc.checkName(fileName)){ //해당파일이 있음
System.out.print("이미 존재하는 파일입니다. 덮어쓰시겠습니까?(y/n) : ");
String yn = sc.nextLine();
yn = yn.toLowerCase();
if(yn.equals("y")){
fc.fileSave(fileName, sb.toString());
break;
}
} else { //해당파일 없음
fc.fileSave(fileName, sb.toString());
break;
}
}
}
public void fileOpen(){
System.out.print("열 파일 명 : ");
String fileName = sc.nextLine();
if(fc.checkName(fileName)){
System.out.print(fc.fileOpen(fileName));
} else {
System.out.println("없는 파일입니다.");
}
}
public void fileEdit(){
System.out.print("수정할 파일 명 : ");
String fileName = sc.nextLine();
if(fc.checkName(fileName)){
fileSave(fileName);
} else {
System.out.println("없는 파일입니다.");
}
}
}
FileDAO
package com.kh.practice.file.model.dao;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Scanner;
public class FileDAO {
private static String PATH = "C:\\Users\\user\\OneDrive\\바탕 화면\\KH정보교육원\\특강\\";
public boolean checkName(String file){
// File 객체를 생성하는 매개변수 있는 생성자에 file을 매개변수로 넘겨줌
// 해당 파일이 있는지 없는지에 대한 boolean 값을 반환
return new File(PATH + file).exists();
}
public void fileSave(String file, String data, boolean append){
// 매개변수로 들어온 file을 파일 명으로 이용하여 파일을 만들어주고
// String에 써서 저장
try (FileWriter fw = new FileWriter(new File(PATH + file), append)){
fw.write(data);
}catch (Exception e){
e.printStackTrace();
}
}
/**
*
* @param file
* @return 데이터를 읽지 못한 경우 null 반환, 아니면 String
*/
public String fileOpen(String file){
// 매개변수로 들어온 file로 파일을 찾아 StringBuilder에 값들 저장하여 반환
try (Scanner sc = new Scanner(new File(PATH + file))){
StringBuilder sb = new StringBuilder();
while(sc.hasNextLine()){
sb.append(sc.nextLine());
}
return sb.toString();
}catch (Exception e){
e.printStackTrace();
}
return null;
}
public void fileEdit(String file, String data){
// 매개변수로 들어온 file을 파일 명으로 이용하여 파일을 찾고
// String에 써서 저장하되 이어서 저장될 수 있도록 함
fileSave(file, data, true);
}
}
FileController
package com.kh.practice.file.controller;
import com.kh.practice.file.model.dao.FileDAO;
public class FileController {
private FileDAO fd;
public FileController() {
fd = new FileDAO();
}
// 필드
public boolean checkName(String file){
// FileDAO(fd)의 checkName() 매개변수로 file을 넘겨주고
// 그리고 그 반환 값을 그대로 받아 또 반환해줌
return fd.checkName(file);
}
public void fileSave(String file, String data){
// 매개변수로 넘어온 sb를 String으로 바꿔 fd의 fileSave()메소드 매개변수로
// file과 String을 넘김
fd.fileSave(file, data, false);
}
public String fileOpen(String file){
// fd의 fileOpen() 매개변수로 file을 넘겨주고 그 반환 값을 그대로 받아 또 반환
return fd.fileOpen(file);
}
public void fileEdit(String file, String data){
// 매개변수로 넘어온 sb를 String으로 바꿔 fd의 fileEdit()메소드 매개변수로
// file과 String을 넘김
fd.fileEdit(file, data);
}
}