객체 배열, 객체 배열 실습문제

oYJo·2024년 12월 17일

Java

목록 보기
18/25

객체 배열

객체 배열

객체 참조형 변수를 저장하는 배열로 배열의 자료형을 클래스명(사용자 정의 자료형)으로 지정하여 활용

객체 배열 : 객체 참조형 묶음 배열

Member memberInfo = new Member();
이거는 member 1명
만약 member가 여러 명? 배열 사용 = 객체 배열

Member memberInfo1 = new Member();
Member memberInfo2 = new Member();
Member memberInfo3 = new Member();

객체 배열 선언, 할당

  • 선언
    클래스명[] 배열명;
    클래스명 배열명[ ] ;

  • 할당
    배열명 = new 클래스명[배열크기] ;

  • 선언, 동시에 할당
    클래스명 배열명[ ] = new 클래스명[배열크기];

객체 배열 초기화

  • 인덱스를 이용한 초기화
    배열명[i] = new 클래스명();

  • 선언과 동시에 할당 & 초기화
    클래스명 배열명[]
    = {new 클래스명(), new 클래스명()};

객체 배열 구조

객체 배열 실습 문제 1

1)

2)

3)

4)

5)

6)

0)

class EmployeeService

package edu.kh.oarr.practice.model.service;

import java.util.Scanner;

import edu.kh.oarr.practice.model.vo.Employee;

public class EmployeeService {

   private Employee[] employees = new Employee[3]; // 사원 정보를 저장할 Employee 배열
   private Scanner sc = new Scanner(System.in); 


   public void displayMenu() {

      int sel = 0;
      do {

         System.out.println("=== 직원 관리 프로그램 ===");
         System.out.println("1. 직원 정보 입력(3명)");
         System.out.println("2. 모든 직원 정보 출력");
         System.out.println("3. 특정 직원 정보 출력(이름 검색)");
         System.out.println("4. 특정 직원 급여/연봉 출력(사번 검색)");
         System.out.println("5. 모든 직원 급여 합/연봉 합 출력");
         System.out.println("6. 모든 직원중 급여가 가장 높은 직원의 이름, 부서, 급여 출력");
         System.out.println("0. 종료");
         System.out.print("메뉴 선택 >> ");
         sel = sc.nextInt();
         sc.nextLine();

         switch (sel) {
         case 1:  initEmployee(); break;
         case 2:  System.out.println(allEmployeesInformation()); break;
         case 3:  System.out.println(searchEmployee());break;
         case 4:  System.out.println(salaryCheck());break;
         case 5:  allSalaryCheck(); break;
         case 6:  topSalaryEmployee(); break;
         case 0: System.out.println("프로그램 종료."); break;

         default: System.out.println("잘못 입력하셨습니다.");
         }

      }while(sel != 0);

   }

   // 3명의 직원 정보를 입력받아 배열에 각 요소에 초기화  
   public void initEmployee() {
      // 사번, 이름, 부서, 직급, 급여 순서로 입력받기


      for(int i=0; i<employees.length; i++) {

         System.out.println("\n===" + (i+1) + "번째 사원 정보 입력 ===");
         System.out.print("사번 : ");
         int empNo = sc.nextInt();

         System.out.print("이름 : ");
         String name = sc.next();

         System.out.print("부서 : ");
         String dept = sc.next();

         System.out.print("직급 : ");
         String jobTitle = sc.next();

         System.out.print("급여 : ");
         int salary = sc.nextInt();
         System.out.println();

         employees[i] = new Employee(empNo, name, dept, jobTitle, salary);
      }

   }


   // 모든 직원 정보를 하나의 문자열로 반환
   public String allEmployeesInformation() {

      String str = "";
      for(int i=0; i<employees.length; i++) {
         str += "사번 : " + employees[i].getEmpNo() 
               + ", 이름 : " + employees[i].getName()
               + ", 부서 : " + employees[i].getDept() 
               + ", 직급 : " + employees[i].getJobTitle() 
               + " , 급여 : " + employees[i].getSalary()  + "\n";
      }

      return str;
   }

   // 특정 사원 정보 반환 메소드(이름 검색)
   // 일치하는 이름이 없을 경우 "일치하는 이름의 사원이 없습니다." 반환
   public String searchEmployee() {

      System.out.println("\n========== 특정 사원 정보 출력(이름 검색) ============");

      System.out.print("이름 입력 : ");
      String name = sc.next();


      for(int i=0; i<employees.length; i++) {

         if( employees[i].getName().equals(name)) {
            return  "사번 : " + employees[i].getEmpNo() 
                  + ", 이름 : " + employees[i].getName()
                  + ", 부서 : " + employees[i].getDept() 
                  + ", 직급 : " + employees[i].getJobTitle() 
                  + " , 급여 : " + employees[i].getSalary() + "\n";
         } 
      }

      return "일치하는 이름의 사원이 없습니다.\n";

   }


   // 입력받은 사번과 일치하는 직원의 급여, 연봉 정보 반환(연봉 == 급여 * 12)
   // 일치하지 않는 경우 "사번이 일치하는 직원 없습니다." 반환
   public String salaryCheck() {
      System.out.println("\n=== 급여/연봉 조회 ===");

      System.out.print("사번 입력 : ");
      int empNo = sc.nextInt();

      for(int i=0; i<employees.length; i++) {

         if(empNo == employees[i].getEmpNo()) {
            return  "급여 : " + employees[i].getSalary() + " / 연봉 : " + employees[i].getSalary() * 12 + "\n";
         }
      }

      return "사번이 일치하는 직원 없습니다.\n";

   }


   // 모든 사원 급여 합/연봉 합 출력
   public void allSalaryCheck() {

      System.out.println("\n=== 모든 사원 급여 합/연봉 합 ===");
      int sum = 0;
      int salSum = 0;
      for(int i=0; i<employees.length; i++) {
         sum += employees[i].getSalary();
         salSum += employees[i].getSalary() * 12;
      }

      System.out.println("전 직원 급여 합 : " + sum);
      System.out.println("전 직원 연봉 합 : " + salSum);
      System.out.println();

   }

   // 모든 직원중 급여가 가장 높은 직원 출력
   // (동일한 급여인 경우 사번이 낮은 사람이 출력)
   public void topSalaryEmployee() {

      int max = employees[0].getSalary();
      for(int i=0; i<employees.length; i++) {

         if(max < employees[i].getSalary()) {
            max = employees[i].getSalary();
         } 
      }

      for(int i=0; i<employees.length; i++) {

         if(max == employees[i].getSalary()) {
            System.out.println("이름 : " + employees[i].getName() + 
                  ", 부서 : " + employees[i].getDept() + 
                  ", 급여 : " + employees[i].getSalary() + "\n");
         }
      }
   }

}

class Employee

package edu.kh.oarr.model.vo;

public class Employee {

	// 필드(==멤버 변수)
	private int memberNum;
	private String memberName;
	private String memberDep;
	private String memberLevel;
	private int memberSalary;
	
	// 생성자
	public Employee() {} // 기본 생성자
	
	public Employee(int memberNum, String memberName, 
			String memberDep, String memberLevel, int memberSalary) {
		
		this.memberNum = memberNum;
		this.memberName = memberName;
		this.memberDep = memberDep;
		this.memberLevel = memberLevel;
		this.memberSalary = memberSalary;
	
	}

	// 메소드
	// getter / setter
	public int getMemberNum() {
		return memberNum;
	}

	public void setMemberNum(int memberNum) {
		this.memberNum = memberNum;
	}

	public String getMemberName() {
		return memberName;
	}

	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}

	public String getMemberDep() {
		return memberDep;
	}

	public void setMemberDep(String memberDep) {
		this.memberDep = memberDep;
	}

	public String getMemberLevel() {
		return memberLevel;
	}

	public void setMemberLevel(String memberLevel) {
		this.memberLevel = memberLevel;
	}

	public int getMemberSalary() {
		return memberSalary;
	}

	public void setMemberSalary(int memberSalary) {
		this.memberSalary = memberSalary;
	}
}

class PracticeRun

package edu.kh.oarr.run;

import edu.kh.oarr.model.service.EmployeeService;

public class PracticeRun {
	public static void main(String[] args) {
		EmployeeService service = new EmployeeService();
		service.displayMenu();
	}
}

class Employee

package edu.kh.oarr.model.vo;

public class Employee {

	// 필드(==멤버 변수)
	private int memberNum;
	private String memberName;
	private String memberDep;
	private String memberLevel;
	private int memberSalary;
	
	// 생성자
	public Employee() {} // 기본 생성자
	
	public Employee(int memberNum, String memberName, 
			String memberDep, String memberLevel, int memberSalary) {
		
		this.memberNum = memberNum;
		this.memberName = memberName;
		this.memberDep = memberDep;
		this.memberLevel = memberLevel;
		this.memberSalary = memberSalary;
	
	}

	// 메소드
	// getter / setter
	public int getMemberNum() {
		return memberNum;
	}

	public void setMemberNum(int memberNum) {
		this.memberNum = memberNum;
	}

	public String getMemberName() {
		return memberName;
	}

	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}

	public String getMemberDep() {
		return memberDep;
	}

	public void setMemberDep(String memberDep) {
		this.memberDep = memberDep;
	}

	public String getMemberLevel() {
		return memberLevel;
	}

	public void setMemberLevel(String memberLevel) {
		this.memberLevel = memberLevel;
	}

	public int getMemberSalary() {
		return memberSalary;
	}

	public void setMemberSalary(int memberSalary) {
		this.memberSalary = memberSalary;
	}
}

class PracticeRun

package edu.kh.oarr.run;

import edu.kh.oarr.model.service.EmployeeService;

public class PracticeRun {
	public static void main(String[] args) {
		EmployeeService service = new EmployeeService();
		service.displayMenu();
	}
}

객체 배열 실습문제 2


class Student

package edu.kh.objarray.practice.model.vo;

public class Student {

   private int grade;
   private int classroom;
   private String name;
   private int kor;
   private int eng;
   private int math;

   // 기본 생성자
   public Student() {}

   // 매개변수 생성자
   public Student(int grade, int classroom, String name, int kor, int eng, int math) {
      super();
      this.grade = grade;
      this.classroom = classroom;
      this.name = name;
      this.kor = kor;
      this.eng = eng;
      this.math = math;
   }

   // getter / setter

   public int getGrade() {
      return grade;
   }

   public void setGrade(int grade) {
      this.grade = grade;
   }

   public int getClassroom() {
      return classroom;
   }

   public void setClassroom(int classroom) {
      this.classroom = classroom;
   }

   public String getName() {
      return name;
   }

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

   public int getKor() {
      return kor;
   }

   public void setKor(int kor) {
      this.kor = kor;
   }

   public int getEng() {
      return eng;
   }

   public void setEng(int eng) {
      this.eng = eng;
   }

   public int getMath() {
      return math;
   }

   public void setMath(int math) {
      this.math = math;
   };

   @Override
   public String toString() {
      return grade +"학년 " + classroom + "반 " + name + " >> 국어 : " + kor 
            + ", 영어 : " + eng + ", 수학 : " + math + ", 평균: " + (int)((kor + eng + math)/3);
   }   

}

class PracticeService

package edu.kh.objarray.practice.model.service;

import java.util.Scanner;

import edu.kh.objarray.practice.model.vo.Student;


public class PracticeService {
	// 1) 최대 10명의 학생 정보를 기록할 수 있게 배열을 할당한다.

	private Scanner sc = new Scanner(System.in);

	private Student[] std = new Student[10];

	public void start() {
		int input = 0;
		int count = 0;
		boolean flag = true;
		// 2)while문을 사용하여 학생들의 정보를 계속 입력 받고
		while(true) {
			System.out.print("학년 : ");
			int grade = sc.nextInt();

			System.out.print("반 : ");
			int classroom = sc.nextInt();

			System.out.print("이름 : ");
			String name = sc.next();

			System.out.print("국어점수 : ");
			int kor = sc.nextInt();

			System.out.print("영어점수 : ");
			int eng = sc.nextInt();

			System.out.print("수학점수 : ");
			int math = sc.nextInt();

			std[count] = new Student(grade, classroom, name, kor, eng, math);
			count++;

			while(true) {

				System.out.print("계속 입력 하시겠습니까?(y/n) : ");
				char choose = sc.next().toUpperCase().charAt(0);

				if(count == 10 || input =='N') {
					flag = false;
					break;
				}
				if(input == 'Y') {
					break;
				} else {
					System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
				}
			}
		} // while문 끝

		for(int i=0; i<count; i++) {
			System.out.println(std[i].toString());
		}
	}
}
profile
Hello! My Name is oYJo

0개의 댓글