관리 메뉴

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

상속 23 - 연습문제 실습편 문제 풀기 1 : 문제 1~2번 본문

프로그래밍 언어/자바

상속 23 - 연습문제 실습편 문제 풀기 1 : 문제 1~2번

huenuri 2024. 12. 2. 20:05

오후에 이론편 연습문제까지 모두 풀었고 이제 실습편 문제가 남아있다. 어느 세월이 이 많은 문제를 다 풀까 모르겠지만 적어도 내일 새벽까지는 다 풀 수 있을 것 같다.

그럼 1번 문제부터 풀어보겠다.


 

 

 

 

연습문제 실습편 문제 풀기

 


 

 

 

문제 1번

 

문제 코드

 

 

 

 

아직 ColorTV 클래스가 구현되어 있지 않아 오류가 뜬다. 이제 이 클래스를 만들어보겠다.


 

 

ColorTV 클래스

 

 

 

Main 클래스

 


 

 

코드 설명

  1. TV 클래스
    • size라는 필드를 가지며, 이는 TV의 크기를 나타냄
    • getSize() 메서드로 size 값을 반환
  2. ColorTV 클래스
    • TV를 상속받아 새로운 필드 color를 추가. 이는 컬러 개수를 나타냄
    • 생성자에서 super(size)를 사용하여 부모 클래스의 생성자를 호출
    • printProperty() 메서드로 size와 color를 출력
  3. Main 클래스
    • ColorTV 객체를 생성하고, printProperty()를 호출하여 문제에서 요구하는 출력 결과를 확인

 

 

 

 

 

문제 2번

 

 

2번 문제가 1번에서 이어지고 있지만 코드가 조금씩 달라서 패키지를 따로 만들고 문제별로 클래스를 다시 생성해 주었다.


 

 

 

문제 코드

 

메인 클래스 부분이 조금 달라졌다. 이번에는 ColorTV를 상속받는 IPTV 클래스를 작성하는 것이다. 근데 IPTV 클래스만 새로 작성하는 것이 아니라 ColorTV도 달라져야 하는 부분이 있다.


 

 

 

문제 풀기

 

ColorTV 클래스

 

 

 

IPTV 클래스


 

코드 설명

  1. TV 클래스
    • size 필드를 가지고 TV의 크기를 나타냄
    • getSize() 메서드로 크기를 반환
  2. ColorTV 클래스
    • TV 클래스를 상속받아 color 필드를 추가
    • getColor() 메서드로 컬러 정보를 반환
  3. IPTV 클래스
    • ColorTV 클래스를 상속받아 ipAddress 필드를 추가
    • 생성자에서 super(size, color)를 호출하여 부모 클래스 필드를 초기화
    • printProperty() 메서드에서 ipAddress, size, color 정보를 출력
  4. Main 클래스
    • IPTV 객체를 생성하고, printProperty() 메서드를 호출하여 문제에서 요구하는 출력 결과 확인

 

getColor 메서드의 접근 제어자가 문제 1번과 달라진 이유는 클래스의 위치와 상속 관계에 따라 접근 제어자를 조정해야 할 필요성이 있기 때문이다.


 

1. 문제 1번의 경우 (getColor의 public)

public int getColor() {
    return color;
}
  • 문제 1번에서는 ColorTV 클래스와 그 메서드가 같은 파일 내에서만 존재했다.
  • getColor 메서드는 외부에서 ColorTV 객체를 통해 접근해야 했으므로, public 접근 제어자를 사용하여 다른 클래스에서도 자유롭게 접근할 수 있게 설계되었다.

 

2. 현재 코드 (getColor의 protected)

protected int getColor() {
    return color;
}
  • 현재 문제에서는 ColorTV 클래스가 다른 패키지(문제02)에 위치하고 있다.
  • 이 코드에서는 ColorTV를 상속받는 클래스나 동일 패키지 내의 클래스만 getColor를 사용할 수 있도록 설계하고 있다.
  • protected 접근 제어자상속받은 클래스와 같은 패키지 내에서 접근 가능하기 때문에
    • getColor 메서드가 외부에서 무분별하게 사용되지 않도록 제한하면서, 상속 관계에서는 접근 가능하게 만든다.

 

 

출력이 아주 잘 되었다.


 

 

 

학습을 마치고

어젯밤에 2번 문제를 다 풀지 못하고 잠자리에 들었다. 그리고 다음날 새벽 1시 반에 일어나 다시 공부를 시작하며 문제를 마무리할 수 있어서 정말 좋았다. 지난 세 달 동안의 블로그 학습일지 목표는 하루에 10개 이상을 올리는 거였는데, 앞으로 세 달은 평균 13개로 목표를 올려보았다.

어제도 그제도 최소 12개는 넘겼던 것 같다. 아침과 오후에 정말 공부하기 싫었던 시간이 있었지만 그 시간에도 책상 앞을 떠나지 않았으며 열심히 공부하려고 노력했다. 이처럼 열심히 노력하니 난 앞으로 좋은 결과가 있으리라 믿어 의심치 않는다.