'multiple inheritance'에 해당되는 글 2건

  1. 2013.05.01 class
  2. 2012.08.22 다중 상속(Multiple Inheritance)

class

Programming/Python 2013. 5. 1. 20:41 |


파이썬의 클래스는 새로운 이름 공간을 지원하는 단위이다. 이 이름 공간에는 함수와 변수가 포함될 수 있다. 

모듈과 차이가 있다면, 모듈 파일 단위로 이름 공간을 구성하는 반면, 

클래스는 클래스 영역과 인스턴스 영역 내에 이름 공간을 구성한다. 상속 관계에서 상위클래스는 하위 클래스의 이름 공간에 포함된다.


클래스와 이름 공간

클래스 인스턴스도 이름 공간을 생성한다. 이것은 모듈에 없는 중요한 기능이다. 

클래스는 하나 이상의 인스턴스 객체를 생성하는 틀과 같다.


상속

모듈과의 중요한 차이점은, 클래스는 상속(Inheritance)이 된다는 것이다.

클래스는 다른 클래스와 공통적인 특징을 공유할 수 있으므로, 개별적인 특징만을 새로 정의하는 새로운 클래스를 만들 수 있다. 

즉, 재사용성이 있다.


연산자 중복

파이썬 클래스는 연산자 중복을 지원한다. 각종 산술, 논리, 슬라이싱, 인덱싱 등등의 연산을 중복할 수 있다.

연산자 중복이란, 어떤 연산자를 클래스 객체에서도 사용할 수 있게, 거기에 맞는 함수를 정의하는 것이다.



파이썬에서 클래스에 관련된 꼭 필요한 용어

 class  class 문으로 정의되며, 멤버와 메쏘드를 가지는 객체이다.
 class object

 클래스와 같은 의미로 사용. 클래스를 종종 특정한 대상을 가리키지 않고 일반적을 언급하기 위해서 사용하는 반면에, 클래스 객체는 어떤 클래스를 구체적으로 지정하기 위해서 사용하기도 한다. 

 class instance 

 클래스를 호출하여 만들어지는 객체 

 class instance object  

 클래스 인스턴스와 같은 의미이다. 인스턴스 객체라고 부르기도 한다. 

 member 

 클래스가 갖는 변수 

 method 

 클래스 내의 정의된 함수 

 attribute 

 멤버와 메쏘드 전체를 가리킨다. 즉, 이름 공간의 이름 전체를 의미한다. 

 super class 

 base class 라고 하기도 한다. 어떤 클래스의 상위에 있으며 각종 속성을 서브 클래스로 상속해 준다. 

 sub class 

 derived class 라고 하기도 한다. 슈퍼 클래스로부터 상속된 하위의 클래스를 말한다. 슈퍼 클래스로부터 각종 속성을 상속받으므로 코드와 변수를 공유한다. 



객체지향 프로그래밍에서 클래스들이 가지는 중요한 특성

 inheritance

 기존의 클래스의 속성과 행동을 그대로 받아들이고 추가적으로 필요한 기능을 새로운 클래스에 덧붙이는 것이다. 소프트웨어의 재사용 관점에서 상속은 대단히 중요한 역할을 하며, 프로그램의 개발 시간을 단축시켜 준다. 

 다른 프로그래밍 기법과 객체지향 프로그래밍을 구분하는 중요한 특징이다. A클래스를 슈퍼 클래스로 하는 클래스 B를 생성하였다면 "B is-a A" 관계라고 한다. 

 multiple inheritance 

 두 개 이상의 슈퍼 클래스로부터 상속받는 것. 

 polymorphism 

 상속 관계 내의 다른 클래스의 인스턴스들이 같은 멤버 함수 호출에 대해 각각 다르게 반응하도록 하는 기능. 

 encapsulation 

 메쏘드와 멤버를 클래스 내에 포함시키고 외부에서 접근 가능하도록 인터페이스만을 공개하고 다른 속성들을 내부에 숨기는 것. 

 composition 

 x라는 객체(혹은 다수의 객체)가 클래스 A안에 포함되어 A의 각종 메쏘드를 구현하는데 사용된다. 

 즉, 어떤 객체가 다른 객체에 포함되어 활용되는 것을 말한다. 이때 A가 x를 포함하므로 "has-a" 관계라고 한다. 



'Programming > Python' 카테고리의 다른 글

정적 메소드, 클래스 메소드, 장식자  (0) 2013.05.01
메쏘드의 정의와 호출  (0) 2013.05.01
문자열 이름으로 속성 값 참조  (0) 2013.05.01
모듈의 실행 ( __name__ == '__main__' )  (0) 2013.05.01
Module  (0) 2013.05.01
Posted by scii
:

다중 상속이란, 

둘 이상의 클래스를 동시에 상속하는 것을 말한다. 그리고 C++은 다중상속을 지원하는 객체지향 언어이다. 그런데 다중상속은 제법 논란이 되는 문법이다.


실제로 다중 상속으로만 해결이 가능한 문제는 존재하지 않으니, 굳이 다중 상속을 하기 위해 노력할 필요는 없다. 하지만 누군가는 다중 상속을 예외적으로, 매우 제한적으로 적용할 수도 있는 일이므로, 이에 대한 이해를 위해서라도 다중상속을 공부할 필요는 있다. 



다중 상속의 기본방법



세미콤마를 이용해서 상속의 대상이 되는 클래스를 구분해서 명시할 수 있다. 

그리고 기초클래스를 상속하는 형태는 각각 별도로 지정이 가능하다. 






다중 상속의 모호성(Ambiguous)


  - 다중 상속의 대상이 되는 두 기초 클래스에 동일한 이름의 멤버가 존재하는 경우에는 문제가 발생할 수 있다. 이러한 경우에는 유도 클래스 내에서 멤버의 이름만으로 접근이 불가능하기 때문이다. 

만약에 이름만으로 접근하려 든다면 컴파일러는 다음과 같이 불만을 토로할 것이다.


"도대체 어느 클래스에 선언된 멤버에 접근을 하라는 거야?"



이 문제를 해결하려면 위에처럼 직접적으로 어느 클래스에 정의된 함수인지를 명시해야 한다. 

즉, 다중 상속을 할 때 같은 이름의 함수가 있다면, 그 함수를 호출을 할때에는 

어느 클래스에 정의된 함수의 호출을 원하는지 명시해야 한다. 

Posted by scii
: