13-1. 사원관리(~자바 클래스 생성자까지)_문제

박은서's avatar
Dec 10, 2025
13-1. 사원관리(~자바 클래스 생성자까지)_문제

종합 실습 과제

사원 관리 & 월급 정산 프로그램 만들기

0. 과제 목표

지금까지 배운 내용을 한 번에 써먹어 보는 종합 미니 프로젝트입니다.
  • 기본 자료형, 연산자
  • if / for 문
  • 클래스, 객체, 생성자, 생성자 오버로딩
  • static / heap / stack 개념
  • 배열(Employee[])
위 내용을 모두 사용해서 사원 관리 프로그램을 만드세요.

 

패키지 example01 만들어서 하기

1. Employee 클래스 만들기

1-1. 필드 정의

Employee 클래스에 다음과 같은 필드를 만드세요.
String name; // 이름 String phone; // 전화번호 String dept; // 부서 int empNo; // 사원번호 int salary; // 월급 (정수, 단위: 원) String account; // 계좌번호 String position; // 직급 (예: "사원", "대리", "과장", "부장")
모든 변수는 private을 붙이고, 메서드를 통해 변경합니다.

1-2. 생성자 오버로딩 (핵심)

다음 3개의 생성자를 만드세요.
“상황을 가정하고 왜 필요한지” 생각하면서 작성해 봅니다.
  1. 생성자 1 – 회사에 갓 입사한 상태 (이름 + 전화번호만 아는 상태)
Employee(String name, String phone)
  • 넘겨받은 값: name, phone
  • 나머지 필드의 기본값은 다음과 같이 넣으세요.
    • dept : "미정"
    • empNo : 0 (아직 안 나온 번호라는 뜻)
    • salary : 0 (월급 미정)
    • account : "" (빈 문자열)
    • position : "사원" (기본 직급)

  1. 생성자 2 – 부서까지 정해진 상태
Employee(String name, String phone, String dept)
  • 넘겨받은 값: name, phone, dept
  • 나머지 필드 기본값:
    • empNo : 0
    • salary : 0
    • account : ""
    • position : "사원"

  1. 생성자 3 – 모든 정보가 다 정해진 상태
Employee(String name, String phone, String dept, int empNo, int salary, String account, String position)
  • 넘겨받은 값으로 모든 필드를 초기화합니다.

1-3. 메서드 정의

(1) 사원 정보 출력 메서드

void printInfo()
  • 사원의 모든 정보를 한 줄 또는 여러 줄로 보기 좋게 출력하세요.
    • 예시)
      • 홍길동 / 010-1111-2222 / 개발팀 / 사원번호: 1001 / 직급: 대리 / 월급: 3,000,000 / 계좌: 123-456-7890

(2) 사원 정보 수정용 메서드 (Setter 역할)

아직 setter를 정식으로 배우지 않았어도, 아래 메서드를 직접 만들어 보세요.
반드시 필요한 메서드 (예시):
void setDept(String dept) void setEmpNo(int empNo) void setSalary(int salary) void setAccount(String account) void setPosition(String position)
나중에 생성자로 못 넣었던 값(부서, 사원번호, 월급, 계좌, 직급)을
**“입사 후에 수정한다”**는 느낌으로 사용해 봅니다.

(3) 연봉 계산 메서드 (기본)

int calcYearSalary()
  • 리턴값: salary * 12
  • 월급이 3,000,000 이라면 → 연봉은 36,000,000

(4) 연봉 + 직급별 보너스를 포함한 연봉 (심화)

if(position.equals("사원")){ }
int calcYearSalaryWithBonus()
  • 직급에 따라 보너스를 다르게 줍니다. (예시 규칙)
    • "사원" : 기본 연봉의 10% 보너스
    • "대리" : 기본 연봉의 20% 보너스
    • "과장" : 기본 연봉의 30% 보너스
    • "부장" : 기본 연봉의 40% 보너스
  • if문 또는 switch문을 사용해서 구현하세요.
  • 계산 예시
    • 과장, 월급 3,000,000원
      • 기본 연봉: 3,000,000 * 12 = 36,000,000
      • 보너스: 36,000,000 * 0.3 = 10,800,000
      • 총 연봉: 46,800,000

(5) 승진 메서드 (심화)

void promote()
  • 직급 순서: "사원" → "대리" → "과장" → "부장"
  • promote()를 한 번 호출할 때마다 다음 직급으로 올라가게 만드세요.
  • 이미 "부장"이면 더 이상 올라가지 않고, 그대로 유지되도록 만드세요.
  • 승진할 때 월급을 함께 올려줍니다. (예: 10% 인상)

2. 메인 클래스 설계

EmpApp.java 에 만들기

2-1. 기본 조건

  • 클래스 이름 예시: EmployeeMain
  • main 메서드 안에서 다음을 준비합니다.
Employee[] employees = new Employee[10]; // 최대 10명

2-2. 필수 기능

기능 1. 사원 등록하기

  1. 사용자에게 메뉴 또는 질문으로 다음을 입력받습니다.
      • 이름
      • 전화번호
      • 부서(모르면 Enter 치게 해서 "미정"으로 처리해도 됨)
      • 월급(모르면 0 입력)
      • 계좌번호(모르면 빈 문자열)
      • 직급(모르면 "사원")
  1. 입력된 정보의 상황에 맞게 생성자를 선택해서 사용합니다.
      • 이름 + 전화번호만 알고 있다 → 생성자 1 사용
      • 이름 + 전화번호 + 부서를 알고 있다 → 생성자 2 사용
      • 모든 정보가 다 있다 → 생성자 3 사용
  1. 생성한 Employee 객체를 employees[count] 에 저장하고, count++ 합니다.
⚠ 배열이 꽉 찼을 때(= 10명 등록됐을 때) 더 이상 추가 등록이 안 되도록 체크하는 if문도 넣어보세요.

기능 2. 전체 사원 목록 출력하기

  1. for문을 이용해서 employees 배열을 0부터 count-1 까지 순회합니다.
  1. 각 사원에 대해 printInfo() 메서드를 호출해서 정보를 출력합니다.

기능 3. 월급 / 연봉 정산하기

  1. 이번 달 전체 월급 합계 구하기
 
  1. 전체 연봉 합계 구하기
    1.  
  1. 보너스를 포함한 전체 연봉 합계
    1.  

기능 4. 특정 사원 승진시키기

  1. 사용자에게 사원번호(empNo) 를 입력받습니다.
  1. 배열에서 해당 사원번호를 가진 Employee를 찾아서
  1. promote() 메서드를 실행합니다.
  1. 승진 후 변경된 직급과 월급을 출력합니다.

기능 5. 월급 이체 시뮬레이션


3. 메인에서 어떻게 호출되는지 & 실행 예시

public class EmployeeMain { public static void main(String[] args) { Employee[] employees = new Employee[10]; // 1. 더미로 사원을 10명 만든다. (생성자 유형을 다 써보기) Employee e1 = new Employee("홍길동", "0102222"); Employee e2 = new Employee("장보고", "0105555", "개발팀"); Employee e3 = new Employee("장보고", "0102222", "인사팀", 3, 1000, "8888", "사원"); // 2. 사원 10명을 employees에 담는다. (배열) employees[0]=e1; employees[1]=e2; employees[2]=e3; // 3. printInfo 호출 (전체사원) for (int i = 0; i < employees.length; i++) { employees[i].printInfo(); } // 4. 전체사원의 월급의 합 출력 int totalMonthSalary; System.out.println("기본 월급 총액 = " + totalMonthSalary + "원"); // 5. 전체사원의 연봉의 합 출력 int totalYearSalary; System.out.println("기본 연봉 총액 = " + totalYearSalary + "원"); // 6. 전체사원의 연봉+보너스 출력 int totalYearSalaryWithBonus; System.out.println("보너스 포함 연봉 총액 = " + totalYearSalaryWithBonus + "원"); // 7. 특정 사원 승진 시키기 -------------------------- for(int i=0; i<employees.length; i++){ // 이름이 김철수이면 // promote() 메서드 호출하여 한단계 위로 승진 시키기 } // 승진됐는지 확인하기 for (int i = 0; i < employees.length; i++) { employees[i].printInfo(); } // 8. 월급 이체 시뮬레이션 --------------------------- for(int i=0; i<employees.length; i++){ // 전체사원 월급 이체 시키기 // payAll(); // [급여 이체 완료] 홍길동님께 3000000원이 111-111-111111 계좌로 지급되었습니다. // [급여 이체 완료] 김철수님께 3200000원이 222-222-222222 계좌로 지급되었습니다. // [급여 이체 완료] 이영희님께 3500000원이 333-333-333333 계좌로 지급되었습니다. } } }

3-2. 콘솔 출력 예시 (어떤 결과가 나와야 하는지)

이건 샘플 예시라서 숫자/직급/이름은 자유롭게 바꿔도 됨.
학생들이 “아, 이런 느낌으로 나오면 되는구나” 감만 잡게 해주면 돼.

1) 처음 전체 사원 출력

== 전체 사원 목록 == 홍길동 / 010-1111-1111 / 개발팀 / 사원번호: 1001 / 직급: 사원 / 월급: 3000000 / 계좌: 111-111-111111 김철수 / 010-2222-2222 / 인사팀 / 사원번호: 1002 / 직급: 대리 / 월급: 2800000 / 계좌: 222-222-222222 이영희 / 010-3333-3333 / 영업팀 / 사원번호: 1003 / 직급: 과장 / 월급: 3500000 / 계좌: 333-333-333333

2) 월급 / 연봉 정산 결과 예시

이번 달 월급 총액 = 9300000원 기본 연봉 총액 = 111600000원 보너스 포함 연봉 총액 = 139480000
(보너스 규칙에 따라 숫자는 달라질 수 있음.
예를 들어 사원 10%, 대리 20%, 과장 30% 보너스라고 가정했을 때.)

3) 승진 후 출력 예시

== 김철수 대리 승진 처리 == == 전체 사원 목록 == 홍길동 / 010-1111-1111 / 개발팀 / 사원번호: 1001 / 직급: 사원 / 월급: 3000000 / 계좌: 111-111-111111 김철수 / 010-2222-2222 / 인사팀 / 사원번호: 1002 / 직급: 과장 / 월급: 3200000 / 계좌: 222-222-222222 이영희 / 010-3333-3333 / 영업팀 / 사원번호: 1003 / 직급: 과장 / 월급: 3500000 / 계좌: 333-333-333333
여기서는 예시로
  • 대리 → 과장 승진
  • 승진하면서 월급 2,800,000 → 3,200,000 으로 인상했다고 가정.

4) 월급 이체 시뮬레이션 예시

== 이번 달 월급 이체 시작 == [급여 이체 완료] 홍길동님께 3000000원이 111-111-111111 계좌로 지급되었습니다. [급여 이체 완료] 김철수님께 3200000원이 222-222-222222 계좌로 지급되었습니다. [급여 이체 완료] 이영희님께 3500000원이 333-333-333333 계좌로 지급되었습니다.
 
Share article