22.10.18 - 파이썬 OOP(상속과 오버라이딩)(2)

LaMelo·2022년 10월 18일
0

jupyter

목록 보기
18/29
post-thumbnail

1. 오버라이딩

  • 오버라이딩이란 부모가 물려준 메서드를 자식쪽에서 변형 후 사용하는 것을 의미합니다. (메서드 재정의)

  • 위와 같이 부모쪽에서 이미 특정 메서드가 생성되었지만, 자식쪽에서 추가도니 사항을 따로 반영하지 못하는 이슈가 발생했을 때 자식쪽에서 물려받은 메서드를 고쳐서 현재 객체 상황에 맞게 쓰는 것을 오버라이딩이라고 합니다.

  • 방법은 자식쪽 클래스 설계부분에 부모쪽과 동일한 메서드를 작성하고 코드 내용을 새롭게 작성하면 됩니다.

(1) 부모 클래스에 메서드가 있다면?

  • get_info() 함수 설정
  • 상속 클래스 생성
  • 과연 상속시 부모 클래스의 메서드(함수)는 어떻게 출력이 될까요?
    • 상속된 메서드도 자식쪽에서도 호출은 가능합니다. 다만 부모클래스에서 적용했던 변수들만 출력이 되는 모습을 볼 수 있습니다.

(2) 오버라이딩의 활용

  • 새 클래스(Airplane)을 생성하여 출력 요건을 설정해보도록 하겠습니다.

    • 클래스 생성 (생성자함수 추가)
    • 함수 설정 (fly(), break_(), get_info())

      - 변수는 속도, 연료, 편명으로 두고 최고속도를 900에 제한을 걸고 연료가 0이 되면 연료계수가 0으로 고정되게끔 설정하였습니다.
      - 그럼 비행기를 설정하여 작동을 시켜보겠습니다.
    • a2라는 비행기를 생성하여 출발 및 정지시켜보았습니다.(잘 작동하는 것을 볼 수 있습니다.)
  • Airplane() 클래스의 상속을 받을 하위클래스를 만듭니다.

    • 초음속 비행이 가능한 SupersonicAirplane 클래스를 생성했습니다.
      • SupersonicAirplane 클래스는 Airplane 클래스를 상속합니다.
      • 콩코드의 조건은 속도 증가량 300, 최대속도 2000이며 연료 소비량과 브레이크의 기능은 같다고 설정합니다.
      • 부모 함수와 메서드 명과 파라미터는 동일하나 조건이 달라진 오버라이딩 함수를 작성하였습니다.
      • 자식 클래스의 변수인 sa1를 제작합니다. 최고속도 2000의 콩코드를 만들었습니다.
      • 콩코드를 출발시켜 봅니다.
  • 왜 sa1(콩코드)변수에서는 자식 클래스의 오버라이딩한 함수가 불려나오는 것일까요? (타 언어는 어떤 클래스의 함수가 나올지 정의를 해줘야 출력이 됨.)

    • 그것은 함수를 변경하였다는 것은 부모클래스 함수를 하위 클래스에 적용하는데 있어 변경점이 필요하다는 것을 의미하므로 파이썬에서는 변경된 오버라이딩 함수를 적용되는 것이라고 합니다.

참고

공부하기 괜찮다고 추천받은 책

컴퓨터 사이언스 부트캠프 with 파이썬 - 입문
고전 컴퓨터 알고리즘 in 파이썬 - 문풀에 유용
한권으로 읽는 컴퓨터 구조와 프로그래밍 - 기본서 너낌

profile
가즈아~

0개의 댓글