관리 메뉴

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

상속 19 - 연습문제 이론편 문제 풀기 1 : 문제 1~5번 본문

프로그래밍 언어/자바

상속 19 - 연습문제 이론편 문제 풀기 1 : 문제 1~5번

huenuri 2024. 12. 2. 12:41

아침에 수학 공부를 2시간 정도 하고 이제 본격적으로 자바 공부를 하려고 한다. 3시간 정도 집중해서 공부를 할 생각이다. 연습 문제는 총 30문제나 되는데 이론편과 실습편으로 나누어져 있다.

이론편은 조금 풀만 하고 실습편은 정말 어려워서 손도 못대는 경우가 많았다. 그래도 정답을 찾아가면서라도 풀어야 공부가 되는 걸 그동안의 경험으로 알게 되었다.

 

우선 이론 문제부터 풀어보려고 한다. 문제가 많으니 나누어서 한 포스트에 4~5개의 문제를 풀게될 것 같다. 새벽에 1번 문제를 풀려다가 너무 어려워서 시도만 했었다.


 

 

 

 

 

 

연습문제 이론편 문제 풀기

 


 

문제 1번

처음에 이 문제를 이해하지 못해 한참을 헤맷는데 이제 알 것 같다. obj은 모든 자바 프로그램의 부모 클래스이다. 여기서 A라는 객체를 만들었으니 objA에는 A의 멤버들만 들어간다.

 

(1) objA의 객체 멤버

private int a;
public void set(int a) { this.a = a; }

 

 

(2) objB의 객체 멤버

B는 A를 상속받았으므로 A의 것도 함께 포함이 되어 멤버들은 총 4개이다.

private int a;
public void set(int a) { this.a = a; }
protected int b, c;

 

 

 

(3) objC의 객체 멤버

C는 B에서 상속받았으므로 총 6개의 멤버들이 있다.

private int a;
public void set(int a) { this.a = a; }
protected int b, c;
public int d, e;

 

 

 

 

코드 직접 작성하기

 

 

코드는 맞지만 경고가 뜬다. 이것은 선언은 되었지만 사용되지 않았기에 발생하는 문제이다.

 

 

 

 


 

 

 

 

(4) 클래스 D를 다음과 같이 작성하였을 때 오류가 발생하는 라인 찾기

 

 

①번이다. 

 

 

각 라인 설명

  1. ① a = 1;
    • a는 A 클래스에서 private로 선언되어 있다.
    • private 멤버는 같은 클래스 내부에서만 접근 가능하므로, 오류 발생
  2. ② set(10);
    • set(int a)는 A 클래스의 public 메서드로, 외부에서 호출 가능
    • 정상 동작
  3. ③ b = 20;
    • b는 B 클래스에서 protected로 선언되어 있습니다.
    • protected 멤버는 같은 패키지 또는 상속받은 클래스에서 접근 가능하므로, 정상 동작
  4. ④ d = 30;
    • d는 C 클래스에서 public으로 선언되어 있다.
    • public 멤버는 어디서든 접근 가능하므로, 정상 동작

 

 

 

경고와 오류 없애기

 

 

private을 protected로 수정하여 같은 패키지 내 상속 관계에서는 접근 가능하도록 하면 된다. 그리고 a 값을 읽을 수 있는 get() 메서드를 추가해서 값을 사용했다.

 

 

 

 

이제 오류가 완전히 사라졌다.


 

 

 

 

 

 

문제 4번 

 

SharpPencil 클래스

 

 

 

BallPen 클래스

 

 

 

FountainPen 클래스

 

이제 이 클래스를 상 속을 사용해서 간결하게 수정해보겠다.


 

 

 

 

문제 풀기

 

1. 공통되는 부분 찾아보기

 

코드를 살펴보면 공통적으로 반복되는 필드와 메서드가 있다. int amount, getAmount(), setAmount()가 있다. 이 부분을 Pencil이라는 부모 클래스로 묶어서 상속하도록 할 것이다.


 

 

 

 

2. Pen 클래스 만들기


 

 

 

 

3. 나머지 클래스 수정하기

 

 

 

 

 

 

 

FoutainPen 클래스의 경우 Ballpen과 많이 유사하여 Pen이 아닌 BallPen에서 상속받도록 작성했다.


 

 

 

 

 

문제 5번

protected는 서브 클래스뿐 아니라 슈퍼 클래스에서도 접근이 가능하므로 2번이 틀렸다.


 

 

 

 

학습을 마치고

원래 12시까지 다 풀려고 했던 문제인데 중간에 30분 정도 낮잠을 자는 바람에 공부가 늦어졌다. 사실 아침을 먹고 나서부터는 공부가 별로 하고 싶지 않았지만 그래도 학습을 이어나갔다. 하기 싫은 마음을 내 몸도 알아챈 것인지 졸음이 쏟아지며 단 한 문제도 풀지 못했다.

잠을 자고 다시 맑은 정신으로 문제에 집중할 수 있었다. 매일 뭔가를 꾸준히 하는 것은 정말 힘든 것이다. 특히 내게는 말이다. 그래도 잘 이겨내고 매일 해야 할 일에 열중하는 나의 모습이 참 멋져보였다.

 

이제 다음 문제도 풀어보겠다.