본문 바로가기
개발

[파이썬&루비] 오버라이드(Override)

by 마스터누누 2017. 6. 2.
728x90
반응형

오버라이드(Override)




오버라이드는 재정의라는 의미를 내포하고 있다.

상속이라는 개념에서 상당히 중요한 기능이며, 복잡해진 객체 지향을 좀 더 잘 사용하기 위해 만들진것이다.


오버라이드는 상속 받은 메소드를 재정의 하는 것을 말한다.

부모 객체에서 자식 객체로 메소드가 넘어갈 때 이 메소드의 기능을 수정 하기 위해

해당 메소드의 코드를 다시 작성하는데 이것이 오버라이드이다.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# python
class C1:
    def m(self):
        return 'parent'
class C2(C1):
    def m(self):
        return super().m() + ' child'
    pass
= C2()
print(o.m())
 
# ruby
class C1
  def m()
    return 'parent'
  end
end
class C2 < C1
  def m()
    return super()+' child'
  end
end
= C2.new()
p o.m()
cs


위의 코드는 오버라이드에 대한 예제이다.

먼저 파이썬을 보면, C2는 C1의 자식 객체이다. 즉, C1으로 부터 상속받은 객체이다.

C2 내부에 pass는 비어있는 객체이므로 에러를 내지않고 계속 실행시키라는 의미이다.

C2 에서는 부모객체로 부터 받은 m 메소드를 오버라이드한다.

m 메소드 내부의 super는 부모객체를 가리키며, 따라서 super().m()은 부모객체의 m 메소드를 호출하는 것이다.

결과적으로 실행시 parent child라는 문자열이 호출된다.


다음으로 루비 코드를 살펴 보자.

문법적으로 차이가 있지만 오버라이드의 사용방법은 파이썬과 차이가 나지 않는다.

결과적으로 오버라이드 후에도 파이썬 코드와 결과 값이 같다.

다만 차이가 나는것은 super 메소드인데, 루비에서는 super는 부모 객체를 가리키지 않고

super가 소속되어있는 메소드와 같은 부모객체의 메소드를 가리킨다.



출처 : 생활코딩, 파이썬&루비


반응형

댓글