관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

[Spring반] 중간시험 13 - Java 실기 시험 및 문제 풀이 5 : 문제 7~8번 <클래스와 생성자> 본문

개발 포트폴리오/수료증 및 시험

[Spring반] 중간시험 13 - Java 실기 시험 및 문제 풀이 5 : 문제 7~8번 <클래스와 생성자>

huenuri 2024. 12. 9. 12:25

문제 7번부터는 지난 8월 초에 시험 볼 때도 풀지 못했던 문제들이다. 여기서부터는 공부가 많이 필요한 단원이지만 지금은 어느 정도 이해할 수 있다.

이제 문제를 풀어보겠다.


 

 

 

 

Java 실기 시험 다섯 번째

 

문제 7번

다음과 같은 표를 보고 클래스를 작성하시오.(class명 : MP3Player)


 

 

 

코드 설명

  1. 속성 정의
    • private 접근 제한자를 사용하여 외부에서 접근할 수 없도록 설정
    • String 타입 변수 name, color, boolean 타입 변수 power 정의
  2. 메서드 선언
    • 표에 있는 play, stop, remove 메서드를 정의
    • remove 메서드는 반환값이 있으므로 return 0을 추가하여 기본값을 반환

여기까지 작성하는 것이 문제였으나 클래스를 완성해 볼 것이다.


 

 

 

출력문과 함께 작성하기

 

 

코드 설명

1. 생성자 추가

  • MP3Player 생성자를 추가하여 객체 생성 시 모델명과 색상을 초기화할 수 있도록 함
  • 전원 상태(power)는 기본값으로 false로 설정

2. 전원 관리 메서드 추가

  • 전원을 켜고 끄는 메서드 powerOn과 powerOff를 추가하여 전원이 꺼져 있을 경우 다른 기능이 동작하지 않도록 조건을 추가

3. 메서드 구현

  • play 메서드 : 전원이 켜져 있으면 재생 메시지를 출력
  • stop 메서드 : 전원이 켜져 있으면 정지 메시지를 출력
  • remove 메서드 : 전원이 켜져 있을 때만 입력받은 숫자만큼 파일을 삭제하며 삭제된 파일 개수를 반환. 전원이 꺼져 있으면 아무 동작도 하지 않음

4. 조건 처리

  • 모든 메서드는 전원이 꺼져 있을 경우 메시지를 출력하고 동작하지 않도록 처리

 

근데 color에 노란 줄이 표시되어 보기에 안 좋아 이 코드를 수정해보겠다.


 

 

 

color를 사용하는 방법 : color를 활용하는 메서드 추가

color에 노란 줄이 뜨는 이유는 이 변수를 선언했지만 코드에서 직접 사용하지 않았기 때문이다. 이를 해결하려면 color를 사용하는 코드 또는 getter와 setter 메서드를 추가하면 된다.

 

이제 출력을 하는 메서드를 추가해볼 것이다.


 

 

 

 

 

이제 코드를 정리해보면 다음과 같다.


 

MP3 Player 클래스

MP3 Player는 MP3 플레이어의 동작을 시뮬레이션하기 위한 클래스로, 다음과 같은 속성과 메서드를 포함하고 있다.

속성 (전역 변수)

  1. name : 모델명을 저장하는 변수
  2. color : 색상을 저장하는 변수
  3. power : 전원이 켜져 있는지 여부를 나타내는 boolean 변수 (true/false)

생성자

  • MP3 Player(String name, String color): 객체 생성 시 모델명(name)과 색상(color)을 초기화하며, 전원(power)은 기본값으로 꺼짐(false) 상태로 설정

메서드

  1. powerOn
    • 전원을 켬(power = true)
    • 전원이 켜졌다는 메시지를 출력
  2. powerOff
    • 전원을 끔(power = false)
    • 전원이 꺼졌다는 메시지를 출력
  3. play
    • 전원이 켜져 있을 경우, 재생 메시지를 출력
    • 전원이 꺼져 있을 경우, "전원을 켜야 재생할 수 있습니다." 메시지를 출력
  4. stop
    • 전원이 켜져 있을 경우, 정지 메시지를 출력
    • 전원이 꺼져 있을 경우, "전원을 켜야 정지할 수 있습니다." 메시지를 출력
  5. remove(int number)
    • 전원이 켜져 있을 경우, 입력된 숫자(number)만큼 파일을 삭제하고 그 값을 반환
    • 전원이 꺼져 있을 경우, "전원을 켜야 파일을 삭제할 수 있습니다." 메시지를 출력하고 0을 반환
  6. getColor
    • 현재 색상을 반환
  7. setColor(String color)
    • 새로운 색상 값을 설정

 

Main 클래스

Main 클래스는 MP3Player 객체를 생성하고 메서드를 호출하여 MP3 Player의 동작을 테스트하는 역할을 수행한다.

코드 설명

  1. 객체 생성
    • 이름이 "Walkman", 색상이 "Red"인 MP3Player 객체를 생성
  2. 전원 확인 및 기능 실행
    • player.play() : 전원이 꺼져 있으므로 실행 불가 메시지 출력
    • player.powerOn() : 전원을 켜고 실행 가능 상태로 변경
    • player.play() : 재생 가능
    • player.stop() : 재생을 정지
    • player.remove(3) : 3개의 파일 삭제 후 삭제된 파일 개수 출력
    • player.powerOff() : 전원 끔
    • player.remove(2) : 전원이 꺼져 있으므로 실행 불가 메시지 출력
  3. 색상 확인 및 변경
    • player.getColor() : 현재 색상을 확인하고 출력
    • player.setColor("Blue") : 색상을 "Blue"로 변경
    • 변경된 색상을 다시 확인하고 출력

 

 

 

추가로 알아야 할 내용

1. Getter와 Setter 추가

  • 모델명과 색상은 필요하면 getter와 setter를 통해 외부에서 접근하거나 변경할 수 있도록 추가할 수 있음
public String getName() {
    return name;
}

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

public String getColor() {
    return color;
}

public void setColor(String color) {
    this.color = color;
}

 

 

 

2. 배열 또는 리스트 사용

  • 파일의 이름과 같은 실제 데이터를 다루려면 배열이나 List를 활용하여 파일을 관리할 수 있음

3. 추상화 확장

  • MP3 Player는 다른 전자기기의 상위 클래스로 확장할 수도 있음. 예를 들어, MediaPlayer 클래스를 상속받아 여러 플레이어를 구현 가능

 

 

 

 

문제 8번

다음과 같은 결과가 나오도록 프로그램을 작성하시오. (class명 : Tv, Main)

 

 

 


 

 

 

 

 

이렇게 작성했는데 이 코드에는 오류가 많이 있다.

 

  1. 기본 생성자 추가 : new Tv()를 호출할 수 있도록 기본 생성자가 필요함
  2. getter와 setter 사용 금지 : 문제의 결과를 보면 직접 필드에 접근하고 있으므로, private를 default로 변경해 직접 접근 가능하게 함
  3. 메서드 구현 : channelUp, channelDown, print 메서드를 구현

 

 

 

코드 수정하기

 

 

 

 

 

 

코드 설명

1. Tv 클래스

  • 필드
    • channel과 color는 접근 제한자(default)로 설정하여 같은 패키지 내에서 접근 가능
  • 생성자
    • 기본 생성자를 추가하여 new Tv() 사용 가능
    • 초기값은 채널 0, 색상 white로 설정
  • 메서드
    • channelUp: 채널 번호를 1 증가
    • channelDown: 채널 번호를 1 감소
    • print: 현재 상태(채널과 색상)를 출력

2. Main 클래스

  • Tv 객체 생성
    • new Tv()로 기본 생성자 호출
  • 속성 변경
    • channel과 color 속성을 직접 변경하여 문제의 요구에 맞게 동작
  • 메서드 호출
    • channelUp과 channelDown 메서드를 호출해 채널 변경
    • print 메서드를 호출해 현재 상태 출력

 

 

 

 

학습을 마치고

클래스를 만드는 문제를 풀며 공부를 해보았다. 아직은 익숙하지 않아서 오류 없는 완벽한 코드를 작성하지는 못하지만 몇 번 더 연습을 하면 충분히 할 수 있을 것 같은 희망이 보였다.

이제 두 문제만 더 풀면 실습 문제도 모두 마치게 된다. 나머지 두 문제는 정말 어려워서 아예 손도 못 댄 문제였지만 오늘은 왠지 알 수 있을 것 같다.