사이먼's 코딩노트

[Java] 종합 문제풀이 본문

Java/Java

[Java] 종합 문제풀이

simonpark817 2024. 2. 19. 20:47
  • 이번에는 여지껏 배운 Java 문법을 이용하여 인력관리소를 운영하는 문제를 풀어봅시다.

 

[문제]

  • 다음 Main 메서드를 보고 주석에 작성된 대로 출력되게 클래스와 메서드를 추가해보세요.
public class Main {
    public static void main(String[] args) {
        사람인력관리소 a사람인력관리소 = new 사람인력관리소();

        a사람인력관리소.add사람("홍길순", 33);
        // 나이가 33살인 1번째 사람(홍길순)이 추가되었습니다.
        a사람인력관리소.add사람("홍길동", 20);
        // 나이가 20살인 2번째 사람(홍길동)이 추가되었습니다.
        a사람인력관리소.add사람("임꺽정", 30);
        // 나이가 30살인 3번째 사람(임꺽정)이 추가되었습니다.

        사람 a사람1 = a사람인력관리소.get사람(1);
        a사람1.자기소개();
        // 저는 1번, 홍길순, 33살 입니다.

        사람 a사람2 = a사람인력관리소.get사람(2);
        a사람2.자기소개();
        // 저는 2번, 홍길동, 20살 입니다.

        사람 a사람3 = a사람인력관리소.get사람(3);
        a사람3.자기소개();
        // 저는 3번, 임꺽정, 30살 입니다.
    }
}
  • Main 메서드를 살펴볼 때 사람은 총 3명이고 각자 다른 나이와 이름을 가지고 있다.
  • add사람() 이라는 메서드를 통해 사람이 한명씩 추가되고 추가된 사람의 정보를 출력하게 되어있다.
  • 각 사람은 고유 번호를 가지고 있고 자기소개() 라는 메서드를 통해 본인의 번호, 이름, 나이를 출력하게 되어있다.
  • 이 Main 메서드가 오류 없이 실행되기 위해 작성해야 될 부분은 객체 생성에 필요한 사람인력관리소라는 클래스와, 사람 개개인의 정보를 담는 사람 클래스이다.
  • add사람()과 get사람() 메서드는 둘 다 a사람인력관리소를 통해 메서드가 호출되고 있어 사람인력관리소 클래스 안에 정의되어야 하고, 자기소개() 메서드는 사람 클래스 안에 정의되어야 한다.

 

class 사람인력관리소 {
    int 마지막번호;
    사람[] 사람들;
    사람인력관리소() {
        마지막번호 = 0;
        사람들 = new 사람[100];
    }
    void add사람(String 이름, int 나이) {
        int 번호 = 마지막번호 + 1;

        사람 a사람 = new 사람();
        a사람.나이 = 나이;
        a사람.번호 = 번호;
        a사람.이름 = 이름;

        사람들[번호 - 1] = a사람;

        System.out.printf("나이가 %d살인 %d번째 사람(%s)이 추가되었습니다.\n", 나이, 번호, 이름);

        마지막번호 = 번호;
    }

    사람 get사람(int 번호) {
        return 사람들[번호 - 1];
    }
}
class 사람 {
    String 이름;
    int 나이;
    int 번호;
    void 자기소개() {
        System.out.printf("저는 %d번, %s, %d살 입니다.\n", 번호, 이름, 나이);
    }
}
  • 위 코드는 새로 생성된 사람인력관리소 클래스와 사람 클래스다.
  • Main 메서드에서 a사람인력관리소.add사람() 코드를 보고 사람인력관리소 클래스에서 add사람() 메서드를 호출했다는 것을 알 수 있다.
  • 사람인력관리소 클래스에서 add사람() 메서드를 생성해주고 이 때 인자로 이름과 나이를 넘겨주기 때문에 매개변수로 String 이름과 int 나이를 받는다.
  • add사람() 메서드에서는 출력문으로 추가된 사람 순서대로 가지는 고유 번호와 이름 나이를 출력한다.
  • 여기서 고유 번호는 add사람() 메서드를 호출할 때 마다 1번부터 순서대로 자기 자신의 고유 번호를 가지는 것이다.
  • 위 자바 시스템은 계속해서 마지막으로 저장된 고유 번호를 기억해야되기 때문에 전역변수로 마지막번호 라는 인스턴스 변수를 생성하고 생성자를 통해 초기값을 0으로 세팅하였다.
  • 그리고 사람들이라는 배열 변수를 생성하여 3명의 사람만 추가되는 것이 아니라 최대 100까지 추가가 가능하도록 마찬가지로 생성자에서 new 사람[100]을 세팅하였다.
  • 우리는 이제부터 추가되는 사람을 사람들 배열에 0번 공간부터 차례대로 값을 저장하도록 할 것이다.
  • add사람() 메서드 안에서는 메서드가 호출될 때마다 고유 번호를 1씩 증가시키기 위해서 번호라는 지역변수를 따로 생성하여 [int 번호 = 마지막번호 + 1] 와 같이 작성하고 전역변수인 마지막번호에도 증가된 번호를 저장하기 위해 가장 아래에 [마지막번호 = 번호] 을 작성하여 마지막번호를 계속 1씩 증가시켜준다.
  • 다음은 add사람() 메서드가 호출될 때마다 각 개인의 a사람 객체 변수를 생성하여 인자를 통해 넘겨받은 값을 저장하였다.
  • a사람에 저장된 개인정보를 사람들이라는 배열에 담기 위해서 [사람들[번호 -1] = a사람] 과 같이 코드를 작성하여 만약 첫번째로 추가된 사람이 고유 번호 1번을 가지게 되면 사람들[0] 공간에 해당 사람을 저장할 수 있도록 했다.

 

  • 사람인력관리소 클래스의 사람들 배열 변수나 a사람 변수가 정상적으로 생성되기 위해선 사람 클래스가 필요하다.
  • 사람 클래스는 각 개인 정보인 이름, 나이, 번호를 가지고있다.
  • Main 메서드에서는 a사람1, a사람2, a사람3 처럼 추가된 사람들을 자기소개() 메서드를 호출하도록 되어있다.
  • 자기소개() 메서드는 사람 클래스에서 생성하고 단순히 출력문을 통해 각 개인을 소개하도록 하였다.

 

  • 마지막으로 get사람() 이라는 메서드를 통해 add사람() 을 통해 저장된 각 개인의 정보를 가져오고 해당 정보를 리턴하여 자기소개() 메서드에 제대로 출력되도록 해야한다.
  • get사람() 메서드는 a사람인력관리소 변수를 통해 메서드가 호출되고 해당 타입은 사람으로 되어있기 때문에 사람인력관리소 클래스에서 get사람() 메서드를 생성해주고 이 때 타입은 void가 아닌 사람으로 하여 return 값을 받도록 해야한다.
  • add사람() 메서드를 통해 이미 추가된 사람의 정보는 사람들[번호 - 1] 에 저장되었기 때문에 get사람() 메서드에서는 아무런 작동없이 return을 사람들[번호 - 1]로 해주면 된다.
반응형

'Java > Java' 카테고리의 다른 글

[Java] 문제풀이(1)  (0) 2024.03.11
[Java] ArrayList  (0) 2024.02.19
[Java] 추상 클래스 / 인터페이스  (0) 2024.02.14
[Java] 생성자 문제풀이  (1) 2024.02.14
[Java] 캐스팅 / 생성자  (2) 2024.02.14