코딩/Java

kh15일차 (Generics,List,studentMgr4,pointMgr5...)

danmuji 2022. 7. 8. 17:40

Generics

-func

-Animal

package kh.java.func;

public class Animal {
	private int hp;

	public Animal() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Animal(int hp) {
		super();
		this.hp = hp;
	}

	public int getHp() {
		return hp;
	}

	public void setHp(int hp) {
		this.hp = hp;
	}

}

AnimalMgr1

package kh.java.func;

public class AnimalMgr1 {
	private Animal data;

	public AnimalMgr1() {
		super();
		// TODO Auto-generated constructor stub
	}

	public AnimalMgr1(Animal data) {
		super();
		this.data = data;
	}

	public Animal getData() {
		return data;
	}

	public void setData(Animal data) {
		this.data = data;
	}

}

AnimalMgr2

package kh.java.func;

public class AnimalMgr2<T> {
	private T data;

	public AnimalMgr2() {
		super();
		// TODO Auto-generated constructor stub
	}

	public AnimalMgr2(T data) {
		super();
		this.data = data;
	}

	public T getData() {
		return data;
	}

	public void setData(T data) {
		this.data = data;
	}
	
}

GenericeEx

package kh.java.func;

public class GenericeEx<T>{
	private T data;
//	private E data2;
	
	public GenericeEx() {
		super();
		// TODO Auto-generated constructor stub
	}

	public GenericeEx(T data) {
		super();
		this.data = data;
	}

	public T getData() {
		return data;
	}

	public void setData(T data) {
		this.data = data;
	}

}

Rabbit

package kh.java.func;

public class Rabbit extends Animal{

	public Rabbit() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Rabbit(int hp) {
		super(hp);
		// TODO Auto-generated constructor stub
	}

	public void rabbitFuntion() {
		System.out.println("토끼 기능");
	}
}

Tiger

package kh.java.func;

public class Tiger extends Animal{

	public Tiger() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Tiger(int hp) {
		super(hp);
		// TODO Auto-generated constructor stub
	}
	public void tigerFunction() {
		System.out.println("호랑이 기능");
	}
}

Start

package kh.java.run;

import kh.java.func.Animal;
import kh.java.func.AnimalMgr1;
import kh.java.func.AnimalMgr2;
import kh.java.func.Rabbit;
import kh.java.func.Tiger;

public class Start {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		GenericeEx<String> ge = new GenericeEx<String>();
//		GenericeEx<Integer> ge1 = new GenericeEx<Integer>();
//		String str = ge.getData();
//		int num = ge1.getData();
		Rabbit r1 = new Rabbit(200);
		Tiger t1 = new Tiger(300);
		AnimalMgr2<Rabbit>am1 = new AnimalMgr2<Rabbit>(r1);
		AnimalMgr2<Tiger>am2 = new AnimalMgr2<Tiger>(t1);
		Rabbit a1 = am1.getData();
		Tiger a2 = am2.getData();
		System.out.println("a1 Hp : "+a1.getHp());
		System.out.println("a2 Hp : "+a2.getHp());
		a1.rabbitFuntion();
		a2.tigerFunction();//다운캐스팅 없이 사용가능
		
		
		/*
		AnimalMgr1 am1 = new AnimalMgr1(r1);
		AnimalMgr1 am2 = new AnimalMgr1(t1);
		Animal a1 = am1.getData();//r1
		Animal a2 = am2.getData();//t1
		System.out.println("a1 Hp : "+a1.getHp());
		System.out.println("a2 Hp : "+a2.getHp());
		((Rabbit)a1).rabbitFuntion();
		((Tiger)a2).tigerFunction();
		*/
	}

}

클래스명 뒤에 <T>를 사용함으로써 int,String 형태 다 받기 쉽게 해주는것

=========================================================

collection  (ListTest

-kh.java.func

ListTest

package kh.java.func;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class ListTest {

	public void listTest1() {
		//길이가 3인 문자열 배열 선언
		String[] arr= new String[3];
		arr[0]= "hi";
		arr[1]= "hello";
		arr[2]= "bye";
		//배열은 길이제한을 넘을수없다
		for(int i = 0; i<arr.length;i++) {
			System.out.println(i+". "+arr[i]);
		}
		System.out.println("==============================");
		//ArrayList처리
		//ArrayList는 객체 생성시 배열로 관리할 자료형은 제네릭으로 받는다
		//길이 제한없이 추가된 만큼 출력이 된다.
		ArrayList<String> list = new ArrayList<String>();
		System.out.println("리스트 길이 : "+list.size());
		list.add("hi");//리스트 가장뒤에 데이터 추가
		System.out.println("리스트 길이 : "+list.size());
		list.add("hello");
		System.out.println("리스트 길이 : "+list.size());
		list.add("bye");
		System.out.println("리스트 길이 : "+list.size());
		for(int i=0; i<list.size();i++) {
			System.out.println(i+". "+list.get(i));
		}
//		System.out.println(list.get(0));//0번리스트 출력
//		System.out.println(list.get(1));
//		System.out.println(list.get(2));
	}
	
	public void listTest2() {
		Scanner sc = new Scanner(System.in);
		//정수를 저장
		ArrayList<Integer>list = new ArrayList<Integer>();
		while(true) {
			System.out.println("리스트에 추가할 숫자 입력 : ");
			int num = sc.nextInt();
			list.add(num);
			System.out.println("한번더 입력하시겠습니까?[y/n]");
			String sel = sc.next();
			if(sel.toLowerCase().equals("n")) {
				break;
			}
			
		}
		/*
		for(int i = 0; i<list.size();i++) {
			int num = list.get(i);
			System.out.println(num);
		}
		//foreach 위랑 아래랑 코드가 같음
		 */
		for(int num : list) {// num에 list내용물을 처음부터 끝까지 집어넣는다.
			System.out.println(num);
		}
	}
	public void listTest3() {
		ArrayList<Integer>list = new ArrayList<Integer>();
		list.add(10);
		list.add(5);
		list.add(100);
		list.add(55);
		list.add(80);
		System.out.println(list);
		//get(index):해당인덱스에 위치한 객체를 가져오는 메소드
		System.out.println(list.get(2));
		//add(param1) : 매개변수로 전달된 값을 리스트에 가장 뒤에 추가
		list.add(15);
		System.out.println(list);
		//add(param1,param2):첫번쨰 매개변수 위치에 두번째 매개변수 값 추가
		//추가한 데이터 이후의 인덱스 번호는 1개씩 밀림
		list.add(3,200);
		System.out.println(list);
		
		//set(param1,param2) : 첫번째 매개변수 위치에,두번째 매개변수 값으로 수정
		list.set(3,1000);
		
		System.out.println(list);
		//remove: 매개변수 위치에 있는 객체 삭제
		list.remove(3);
		System.out.println(list);
		
		//contains(param1) :매개변수로 전달한 값이 리스트에 존재하는지 확인하여 결과리턴
		System.out.println(list.contains(1000));
		System.out.println(list.contains(55));
		System.out.println(list.isEmpty());
		Collections.sort(list);
		System.out.println(list);
		//clear() :list내부 모든 객체 삭제
		list.clear();
		System.out.println(list.isEmpty());
		System.out.println(list);
		System.out.println(list.size());
	}
}

studentMgr4

kr.or.iei.student.vo

Student

package kr.or.iei.student.vo;

public class Student {
	private String name;
	private int age;
	private String addr;
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Student(String name, int age, String addr) {
		super();
		this.name = name;
		this.age = age;
		this.addr = addr;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}

}

kr.or.student.controller

-StudentController

package kr.or.student.controller;

import java.util.ArrayList;

import kr.or.iei.student.vo.Student;
import kr.or.student.view.StudentView;

public class StudentController {
	private Student[] student1;
	private int index;

	private ArrayList<Student> students;
	private StudentView view;

	public StudentController() {
		super();
		student1 = new Student[10];
		students = new ArrayList<Student>();
		view = new StudentView();

	}

	public void main() {
		while (true) {
			int sel = view.showMenu();
			switch (sel) {
			case 1:
				insertStudent();
				break;
			case 2:
				printAllStudent();
				break;
			case 3:
				printOneStudent();
				break;
			case 4:
				updateStudent();
				break;
			case 5:
				deleteStudent();
				break;
			case 0:

				return;
			}
		} // while종료
	}// 메인종료

	public void deleteStudent() {
		// TODO Auto-generated method stub
		String name = view.getName("삭제");
		int searchIndex = searchStudent(name);
		if(searchIndex == -1) {
			view.neSearchStudent();
		}else {
			/*
			for(int i = searchIndex; i<index-1;i++) {
				student1[i]=student1[i+1];
			}
			index--;
			*/
			students.remove(searchIndex);
		}
	}

	public void updateStudent() {
		// TODO Auto-generated method stub
		String name = view.getName("수정");
		int searchIndex = searchStudent(name);
		if (searchIndex == -1) {
			view.neSearchStudent();
		} else {
			Student s = view.updateStudent();
			/*
			//1)setter이용한방법
			//Student stu = student1[searchIndex];
			Student stu = student1[searchIndex];
			//stu.setName(s.getName()); 아래 2줄짜리랑 같음
			String updateName = s.getName();
			stu.setName(updateName);
			
			int updateAge = s.getAge();
			stu.setAge(updateAge);
			
			stu.setAddr(s.getAddr());//위에것들이랑 같음
			*/
			//2)객체를 교체하는 방법
			students.set(searchIndex, s);//set을 이용해 중간값교체
			
		}
	}

	public void printOneStudent() {
		// TODO Auto-generated method stub
		String name = view.getName("조회");
		int searchIndex = searchStudent(name);
		if (searchIndex == -1) {
			view.neSearchStudent();
		} else {
			// Student s = student1[searchIndex];
			Student s = students.get(searchIndex);
			view.printOneStudent(s);
		}
	}

	public int searchStudent(String name) {
		/*
		 * for (int i = 0; i < index; i++) { Student s = student1[i]; if
		 * (name.equals(s.getName())) { return i; } }
		 */
		for (int i = 0; i < students.size(); i++) {
			Student s = students.get(i);
			if (name.equals(s.getName())) {
				return i;
			}
		}
		return -1;
	}

	public void printAllStudent() {
		// TODO Auto-generated method stub
		// view.printAllStudent(student1,index);
		view.printAllStudent(students);
	}

	public void insertStudent() {
		// TODO Auto-generated method stub
		Student s = view.insertStudent();
//		student1[index] = s;
//		index++;
		students.add(s);// 리스트 가장 뒤에 추가

	}
}// 클래스 종료

kr.or.student.view

-StudentView

package kr.or.student.view;

import java.util.ArrayList;
import java.util.Scanner;

import kr.or.iei.student.vo.Student;

public class StudentView {
	private Scanner sc;

	public StudentView() {
		super();
		sc = new Scanner(System.in);
	}

	public int showMenu() {
		System.out.println("=====학생관리 프로그램 V4=====");
		System.out.println("1.학생 정보 등록");
		System.out.println("2.학생 전체 출력");
		System.out.println("3.학생 1명 출력");
		System.out.println("4.학생 정보 수정");
		System.out.println("5.학생 정보 삭제");
		System.out.println("0.프로그램 종료");

		int sel = sc.nextInt();
		return sel;
	}

	public Student insertStudent() {
		System.out.println("=====학생 정보 입력=====");
		System.out.print("이름 입력 : ");
		String name = sc.next();
		System.out.print("나이 입력 : ");
		int age = sc.nextInt();
		System.out.print("주소 입력 : ");
		sc.nextLine();
		String addr = sc.nextLine();
		Student s = new Student(name, age, addr);
		return s;
	}

	public void printAllStudent(ArrayList<Student> students) {
		// TODO Auto-generated method stub
		System.out.println("=====학생 전체 출력=====");
		System.out.println("이름\t나이\t주소");
		/*
		for(int i=0;i<index;i+++) {
			Student s = student1[i];
			System.out.println(s.getName()+"\t"+s.getAge()+"\t"+s.getAddr());
		}
		*/
		/*
		for(int i=0;i<students.size();i++) {
			Student s = students.get(i);
			System.out.println(s.getName()+"\t"+s.getAge()+"\t"+s.getAddr());

		}
		*/
		for(Student s : students) {
			System.out.println(s.getName()+"\t"+s.getAge()+"\t"+s.getAddr());

		}
	}

	public String getName(String str) {
		// TODO Auto-generated method stub
		System.out.println("=====학생 정보 "+str+"=====");
		System.out.println(str+"할 학생 이름 입력 : ");
		String name = sc.next();
		return name;
	}

	public void neSearchStudent() {
		System.out.println("학생 정보를 조회할 수 없습니다.");
	}

	public void printOneStudent(Student s) {
		// TODO Auto-generated method stub
		System.out.println("이름 : "+s.getName());
		System.out.println("나이 : "+s.getAge());
		System.out.println("주소 : "+s.getAddr());
	}

	public Student updateStudent() {
		// TODO Auto-generated method stub
		Student s = new Student();
		
		System.out.print("수정 이름 입력 : ");
		String name = sc.next();
		s.setName(name);
		
		System.out.print("수정 나이 입력 : ");
		int age = sc.nextInt();
		s.setAge(age);
		
		System.out.print("수정 주소 입력 : ");
		sc.nextLine();
		s.setAddr(sc.nextLine());
		
		return s;
	}

}