[11일차] 9장 : 추상클래스

steaming·2022년 4월 3일
0
  • 추상 클래스란
    : 추상 메서드를 항상 포함하는 클래스이며 추상 메서드는 함수의 구현 코드가 없고, abstract 예약어를 사용하여 선언만 하는 메서드다.

  • 메서드 선언 의미
    : 메서드 선언은 봐도 어떤 일을 하는 메서드인지 알 수 있다. 함수의 선언부 즉, 반환 값, 함수 이름, 매변수를 정의한다는 것은 곧 함수의 역할이 무엇인지, 어떻게 구현하는지 정의한다는 뜻이다.

  • 추상 클래스 구현하기

    -> 완전하게 구현되지 않은 두 추상 메서드에서 오류 발생

    -> 오류 해결 : 추상 클래스와 메서드에 abstract 예약어 추가

    -> 추상 클래스를 상속 받은 하위 클래스는 구현되지 않은 추상 메서드를 모두 구현해야 구체적인 클래스가 된다. displya(), typing() 추상 메서드의 몸체 코드를 작성했다.

    -> display() 하나만 구현했다. 추상 메서드를 하나 가지고 있기 때문에 추상 클래스가 된다.

    -> MyNoteBook은 모든 추상 메서드가 구현된 클래스이므로 abstract 예약어를 사용하지 않는다.

  • 추상 클래스를 만드는 이유

    -> 추상 클래스는 인스턴스로 생성할 수 없다. 추상 클래에서 구현하는 메서드는 하위 클래스에서도 사용할, 즉 하위 클래스에서도 구현 내용을 공유할 메서드를 구현한다.

  • 추상 클래스 재현하기




  • 템플릿 메서드
    : 틀이 있는 메서드

    -> 자동차 시동의 켜고 끄는 방법은 어느 차나 같기 때문에 starCar()와 turnOff()는 미리 코드를 구현해두었고 drive()와 stop()은 차종에 따라 다른 방식으로 움직일 수 있기 때문에 추상 메서드로 선언했다. 이 중15~20행은 자동차가 달리는 방법을 순서대로 구현해 둔 템플릿 메서드이다.


    -> 두 클래스 모두 Car 클래스를 상속 받고 추상 메서드인 drive()와 stop()을 구현했다.

  • 템플릿 메서드의 역할
    : 메서드 실행 순서와 시나리오를 정의. 템플릿 메서드는 실행 순서, 즉 시나리오를 정의한 메서드이므로 바꿀 수 없다. 메서드 앞에 final 을 사용하면 상속받은 하위 클래스가 메서드를 재정의 할 수 없다. 템플렛 메서드는 로직 흐름이 이미 정해져 있는 프레임워크에서 많이 사용하는 기본 구현 방법이다.

  • 공통으로 사용하는 메서드를 상위 클래스에 추가하기

    -> wiper() 추상 메서드 추가


    -> 두 클래스에서 wiper() 추상 메서드를 구현

  • 템플릿 메서드 응용하기






    -> Player 클래스와 PlayerLevel 클래스는 포함(HAS-A) 관계이다. 게임에서 모든 Player는 자신의 레벨이 있기 때문에 Player클래스에서 PlayerLevel을 멤버 변수로 갖는다. 레벨이 올라갈수록 수행하는 기능이 달라지기 때문에 PlayerLevel 클래스를 추상 클래스로 만들어 모든 레벨에서 공통으로 수행하는 기능을 구현하고, 각 레벨마다 달라지는 기능은 추상 메서드로 만들었다. PlayerLevel을 상속받은 BeginnerLevel, AdvancedLevel, SuperLevel에서 추상 메서드로 선언한 부분을 필요에 맞게 구체적으로 구현했다.

  • final 예약어
    : 마지막으로 정한 것이니 더 이상 수정할 수 없다는 뜻이다.
    final 변수 - 상수
    final 메서드 - 하위 클래스에서 재정의 할 수 없음
    final 클래스 - 상속 할 수 없음

  • 여러 자바 파일에서 공유하는 상수 값 정의하기


  • 추상 클래스와 상속 받는 클래스 구현하기





profile
즐겁게 코딩코딩

0개의 댓글