본문 바로가기
카테고리 없음

CODE [20.07.27/Day_13] Java SE / Interface 추가 연습 예제

by 파프리카_ 2020. 7. 27.
728x90
반응형

 

파일 디렉터리 구조

 

main class

/TestEx.java

package step6.ex;

import step6.model.*;

public class TestEx {
	public static void main(String[] args) {
		CompanyService service = new CompanyService(100);
		System.out.println("**********사원등록 시작**********");
		service.add(new Manager("17", "씨위드수민", 700, "기획부"));
		service.add(new Engineer("19", "스탑윤", 900, "spring"));
		service.add(new Employee("20", "진드래곤현", 600));
		service.add(new Employee("21", "무빙욱", 650));
		System.out.println("**********사원등록 끝**********");

		System.out.println("\n**********전체사원정보 출력**********");
		service.printAll(); 
		/* 출력값:
		 * **********전체사원정보 출력********** 
		 * Manager [empId=17, name=씨위드수민,salary=700, department=기획부]
		 * Engineer [empId=19, name=스탑윤, salary=900,skill=spring]
		 * Employee [empId=20, name=진드래곤현, salary=600] 
		 * Employee [empId=21, name=무빙욱, salary=650]
		 */
		 
		System.out.println("\n**********사원아이디로 검색**********");
		Employee e = service.findById("20");
		Employee e2 = service.findById2("17");
		System.out.println("방법1 / "+e);
		System.out.println("방법2 / "+e2);
		/* 출력값:
		 * **********사원아이디로 검색********** 
		 * 방법1 / Employee [empId=20, name=진드래곤현,salary=600] 
		 * 방법2 / Manager [empId=17, name=씨위드수민, salary=700, department=기획부]
		 */
		
		
		System.out.println("\n******사원아이디에 해당하는 배열요소 idnex 찾기******");		
		System.out.println("**********사원아이디로 삭제*********");
		service.removeById("20");
		System.out.println("방법 1/ "); service.printAll(); 
		/* 출력값:
		 * ******사원아이디에 해당하는 배열요소 index 찾기****** 
		 * 사원아이디로 삭제********* 
		 * 방법 1/ 
		 * Manager [empId=17, name=씨위드수민, salary=700, department=기획부] 
		 * Engineer [empId=19,name=스탑윤, salary=900, skill=spring] 
		 * Employee [empId=21, name=무빙욱, salary=650]
		 */
		
		service.removeById2("17");
		System.out.println("\n방법 2/ "); service.printAll(); 
		/* 출력값:
		 * 방법 2/ 
		 * Engineer [empId=19, name=스탑윤, salary=900, skill=spring] 
		 * Employee [empId=21, name=무빙욱, salary=650]
		 */
	}
}

 

Service class

/CompanyService.java

package step6.model;

import java.lang.reflect.Array;

public class CompanyService {
	public Employee[] empArray;
	public int index;

	public CompanyService(int length) {
		empArray = new Employee[length];
	}

	public void add(Employee emp) {
		empArray[index++] = emp;
	}

	public void printAll() {
		for (int i = 0; i < index; i++) {
			System.out.println(empArray[i].toString());
		}
	}

	// findById 방법 1)
	/**
	 * 전달된 사원아이디에 일치되는 
	 * 사원객체(엔지니어, 매니저 포함)를 호출한 곳으로 반환하는 메서드. 
	 * 만약 사원아이디에 일치하는 사원객체가
	 * 배열에 존재하지 않는다면 null을 반환
	 * 
	 * @param id
	 * @return
	 */
	public Employee findById(String empId) {
		Employee emp = null;
		// 배열 요소가 존재할 때까지만 반복하면 된다
		for (int i = 0; i < index; i++) {
			// 전달된 사원번호와 배열요소의 사원번호가 일치하면,
			// **equals함수를 이용하여 비교한다
			if (empId.equals(empArray[i].getEmpId())) {
				emp = empArray[i];
				break; // 실행문을 벗어난다
			} // if
		} // for
		return emp;
	}// findById

	// findById 방법 2)
	public Employee findById2(String empId) {
		Employee room;
		for (int i = 0; i < index; i++) {
			room = empArray[i];
			if (room.getEmpId() == empId) {
				return room;
			}
		}
		return null;
	}

	// removeById 방법 1)
	// id로 index를 찾은 후 -> id를 지우는 방법
	/**
	 *  사원아이디에 해당하는 요소의 index 위치를 반환하는 메서드
	 * 만약 일치되는 사원아이디에 해당하는 요소가 배열에 없다면 
	 * -1을 반환
	 * @param empId
	 * @return
	 */
	public int findIndexByIndex(String empId) {
		int position = -1;
		for (int i = 0; i < index; i++) {
			//사원아이디가 배열요소의 사원아이디와 일치하면
			if(empId.equals(empArray[i].getEmpId())) {
				position = i; //배열요소의 위치를 지역변수에 할당한다
				break;
			}
		}
		return position;
	}
	
	/**
	 * 매개변수로 전달된 사원아이디와 배열요소의 
	 * 사원객체의 사원아이디가 일치하면 해당 배열 요소를 삭제하는 메서드
	 * 1. findIndexByEmpId() 메서드를 이용해, 사원아이디에 해당하는 배열요소의
	 *    위치를 반환받는다.
	 *    만약 일치하는 사원이 없으면 -1이 반환된다.
	 * 2. -1이 반환되면 일치하는 사원이 없습니다 라는 메세지를 출력하고 작업종료
	 * 3. -1이 아니면 일치하는 사원이 있으면 해당 사원이 위치한 값을 이용해
	 *    그 지점부터 index(사원수)보다 작을 동안 계속 반복하면서 
	 *    뒤 요소를 아 요소에 할당하는 방식으로 삭제한다.
	 *    3.1 만약 삭제요소가 마지막 요소라면 ( empArray[i] = empArray[i+1] -> 불가능)
	 *        직접 null을 할당한다
	 * @param empId
	 */
	public void removeById(String empId) {
		int position = findIndexByIndex(empId); //삭제 대상 배열 요소 위치 반환
		
		if (position == -1) { //position(삭제 대상)이 없으면
			System.out.println(empId+" 사원아이디에 해당하는 사원이 없으므로 삭제가 불가능합니다.\n");
		} else { //삭제대상이 배열에 있으면 삭제한다
			for (int i = position; i<index; i++) {
				if (i+1 == empArray.length) {//마지막 요소를 삭제할 때는 직접 null을 할당
					empArray[i] = null;
				} else {
					empArray[i] = empArray[i+1];
				}
			} //for
			index--; //삭제했으므로, index를 1 감소시킴
			
		} //else
	}// removeById method

	
	// removeById 방법 2)
	// 위 방법을 하나의 함수에 넣는 방법
	public void removeById2(String empId) {
		
		for (int i = 0; i < index; i++) {
			
			if (empId.equals(empArray[i].getEmpId())) {
				int point = i;
				for (int j = point; j < index; j++) {
					if(j+1 == index) {
						--index;
						//empArray[j+1] = null;
						//return;
					}else {
						empArray[j] = empArray[j+1];
					}
				} // for
			} // if
			
		} // for
		
	}// removeById

}// class

 

 

VO class

/Employee.java

package step6.model;

public class Employee {
	private String empId;
	private String name;
	private int salary;

	public Employee(String empId, String name, int salary) {
		this.empId = empId;
		this.name = name;
		this.salary = salary;
	}

	public String getEmpId() {
		return empId;
	}

	public void setEmpId(String empId) {
		this.empId = empId;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getSalary() {
		return salary;
	}

	public void setSalary(int salary) {
		this.salary = salary;
	}

	@Override
	public String toString() {
		return "Employee [empId=" + empId + ", name=" + name + ", salary=" + salary + "]";
	}
}

 

/Engineer.java

package step6.model;

public class Engineer extends Employee {
	private String skill;

	public Engineer(String empId, String name, int salary, String skill) {
		super(empId, name, salary);
		this.skill = skill;
	}

	public String getSkill() {
		return skill;
	}

	public void setSkill(String skill) {
		this.skill = skill;
	}

	@Override
	public String toString() {
		return "Engineer [empId=" + getEmpId() + ", name=" 
				+ getName() + ", salary=" + getSalary() + ", skill=" + skill + "]" ;
	}
}

 

/Manaeger.java

package step6.model;

public class Manager extends Employee {
	private String department;

	public Manager(String empId, String name, int salary, String department) {
		super(empId, name, salary);
		this.department = department;
	}

	public String getDepartment() {
		return department;
	}

	public void setDepartment(String department) {
		this.department = department;
	}
	
	@Override
	public String toString() {
		return "Manager [empId=" + getEmpId() + ", name=" 
				+ getName() + ", salary=" + getSalary() + ", department=" + department + "]" ;
	}
}
728x90
반응형