본문 바로가기
개발

[파이썬&루비] 상속(Inheritance)

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

상속(Inheritance)



우선 비유를 통해 상속을 알아보자.

우리가 자전거를 만든다고 했을때, 부품들을 조합해서 만들게된다.

이렇게 사용되는 부품을 함수라고 생각해보자.


이렇게 함수라는 부품을 조합해서 자전거라는 객체를 만들었다.

그리고 이 자전거를 다른사람에게 팔았는데, 팔린 후 새로운 기능을 달고싶어했다.

결국, 자전거에 전조등을 달게 되었는데 기존에 깔끔하게 자전거 기능만 담고있던 자전거에

전조등의 기능을 추가하면서 새로운 객체가 되었다.


위의 예 처럼 새로운 기능을 추가해서 새로운 객체를 만드는 것.

이것을 상속(Inheritance)이라고한다.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#python
class Class1(object):
    def method1(self): return 'm1'
c1 = Class1()
print(c1, c1.method1())
 
class Class3(Class1):
    def method2(self): return 'm2'
c3 = Class3()
print(c3, c3.method1())
print(c3, c3.method2())
 
class Class2(object):
    def method1(self): return 'm1'
    def method2(self): return 'm2'
c2 = Class2()
print(c2, c2.method1())
print(c2, c2.method2())
cs


먼저 파이썬의 상속에 대해 알아보자.

첫번째로 일반적인 클래스인 Class1을 만든다.

이 클래스 내부에는 m1이라는 문자를 리턴하는 method1만 선언되어있다.

여기까지는 우리가 이때까지 배운 객체 생성이다.


다음으로 Class2는, 상속이라는 개념이 없을 경우 우리가 사용하는 방법이다.

Class2는 method1이 이미 Class1에 선언되어있더라도, 받아서 사용할수가 없기때문에 다시한번 선언해야한다.

결과적으로, 상속을 사용하지 않을 경우 프로그램의 코드가 길어지며 재활용성이 떨어지게 된다.

이로 인해 할수 있는것은 상속도 프로그래밍의 재활용성과 효율성을 추구하는 결과물이라는 것이다.


마지막으로 Class3는 Class1으로부터 상속받는 객체이다.

상속을 하기위해서는 우리가 객체를 만들기 위해서 적어주던 객체이름(Object) 양식에서

Object 자리에 상속 받을 객체 이름을 넣어주면 된다.

우리는 Class1을 상속받으므로 Class1의 이름을 넣어주자.

자바로 치자면 이 괄호안에 상속 받을 이름을 넣는것이 extends와 비슷하다.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# ruby
class Class1
    def method1()
        return 'm1'
    end
end
c1 = Class1.new()
p c1, c1.method1()
 
class Class3 < Class1
    def method2()
        return 'm2'
    end
end
 
c3 = Class3.new()
p c3, c3.method1()
p c3, c3.method2()
cs


다음은 루비이다.

파이썬으로 상속이 없을 경우를 살펴보았으니 바로 상속으로 넘어가도록 하겠다.

우선 위의 코드는 파이썬과 기능적으로는 동일하다.

루비에서 상속을 하기 위해서는 클래스 이름 뒤에 < 기호와 상속 받을 클래스의 이름을 입력하면된다.


파이썬과는 조금 다르지만 똑같이 동작하는데, 이는 객체지향을 기반으로 한 언어들이

문법적으로만 차이를 보이며, 개념적으로는 거의 동일하기 때문이다.




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




반응형

댓글