cs 8. 파이썬 기초 (파이썬 자료 추상화, 데이터은닉, 다형성, 상속, 오버라이딩, 다중상속 ) :: 맥스웰과 데자와

0. 객체란?

 

gksid102.tistory.com/21

 

6. 파이썬 기초5 (객체 object, 클래스 class, 인스턴스 instance, 속성 attribute, 메서드 method)

0. 리스트와 함수 리스트 : 변수(데이터)를 모으는 한 가지 방법 함수 : 코드를 끊임없이 재사용할 수 있는 단위로 모으는 방법 1. 객체 (Object) 객체는 실제로 존재하는 모든 것들입니다. 객체는 함

gksid102.tistory.com

* 객체 지향 프로그램의 특징

 

프로그래밍 용어로 파이썬은 객체지향적(object-oriented)라고 표현합니다. 이는 파이썬 내에서 객체를 사용하는 것이 가능하다는 뜻입니다. 객체 지향 프로그래밍의 특징은 기본적으로 자료 추상화상속, 다형 개념동적 바인딩 등이 있으며 추가적으로 다중 상속 등의 특징이 존재합니다. 객체 지향 프로그래밍은 자료 추상화를 기초로 하여 상속, 다형 개념, 동적 바인딩이 시스템의 복잡성을 제어하기 위해 서로 맞물려 기능하는 것입니다.

 

 

 

1. 자료 추상화

 

자료 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것입니다. 추상 자료형은 자료형의 자료 표현과 자료형의 연산을 캡슐화한 것으로 접근 제어를 통해서 자료형의 정보를 은닉할 수 있습니다. 객체 지향 프로그래밍에서 일반적으로 추상 자료형을 클래스, 추상 자료형의 인스턴스를 객체, 추상 자료형에서 정의된 연산을 메소드(함수), 메소드의 호출을 생성자라고 합니다. 추상 자료형은 접근 제어를 통해서 자료형의 정보를 은닉할 수 있습니다.

 

* 캡슐화란? 

  • 객체의 속성(data fields)과 행위(메서드, methods)를 하나로 묶고,
  • 실제 구현 내용 일부를 외부에 감추어 은닉한다.

 

* 메서드로만 데이터를 획득하거나 변경할 수 있도록 객체의 데이터에 대한 접근을 제한하는 것을 프로그래밍 용어로 데이터 은닉(data hiding)이라고 합니다.

 

# 데이터 은닉의 예

 

데이터 은닉을 사용한 예 : 메서드로만 데이터를 변경할 수 있도록 접근을 제한함

 

데이터 은닉을 사용하지 않은 예 : 메서드를 사용하지 않고 직접 속성을 변경함.

 

위 두 방법모두 wizard의 skill_level을 2로 설정할 것입니다. 그렇지만 첫번째 예시는 메서드로만 데이터를 변경할 수 있도록 접근을 제한하였고, 두번째 예시는 메서드를 사용하지 않고 직접 속성을 변경하였습니다. 속성을 바로 수정하지 않고 수고롭게 메서드를 만든 데에는 두가지 이유가 있습니다.

 

  • 속성에 직접 접근할 경우 level up을 시킬 최소한 두 가지 부분이 필요합니다. 즉, skill_level을 변경하는 부분과 skill_string을 변경하는 부분입니다. 메서드를 이용하면 한 번의 메서드 호출로 원하는 작업을 모두 할 수 있습니다.
  • 또한 메서드를 사용하면 skill_level이 증가하기만 하고 감소하지는 않게끔 만들 수 있습니다.

 

 

 

2. 다형성(polymorphism) : 동일한 메서드이름, 다른 동작 방식

 

다형성 개념이란 어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩(같은 이름의 메서드가 여러 클래스에서 다른 기능을 하는 것)이나 오버로딩(같은 이름의 메소드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것)을 의미합니다. 즉, 다형성은 서로 다른 클래스에 이름이 같은 두 개(또는 그 이상)의 메서드를 둘 수 있다는 뜻입니다. 다형 개념을 통해서 프로그램 안 객체 간의 관계를 조직적으로 나타낼 수 있습니다.

 

# 다형성 예

 

동일한 메서드지만 다른 동작 방식을 구현함

 

Wizard 클래스와 Archer 클래스 모두 levelUp( )이라는 메서드가 들어 있습니다. 두 직업에 대해 모두 levelUp( ) 메서드를 사용했지만 각 직업에 대해 서로 다른 동작을 수행했습니다. 이것이 바로 다형성의 예입니다.

 

 

 

3. 상속

 

객체지향 프로그래밍에서 클래스는 다른 클래스로부터 속성과 메서드를 물려받을 수 있습니다. 상속은 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능입니다. 상속을 받는 새로운 클래스를 부클래스, 파생 클래스, 하위 클래스, 자식 클래스라고 하며 새로운 클래스가 상속하는 기존의 클래스를 기반 클래스, 상위 클래스, 부모 클래스라고 합니다. 상속을 통해서 기존의 클래스를 상속받은 하위 클래스를 이용해 프로그램의 요구에 맞추어 클래스를 수정할 수 있고 클래스 간의 종속 관계를 형성함으로써 객체를 조직화할 수 있습니다.

 

공통 속성과 메서드를 공유하는 클래스 '가계도'

 

클래스를 상속하는 코드는 다음과 같습니다.

 

>>> [ class 상위클래스이름 ]

>>> 코드

>>> [ class 하위클래스이름(상위클래스이름) ]

>>> 코드

 

하위 클래스를 만들때는 클래스 이름에 ( )를 붙이고 안에 상위 클래스 이름을 넣으면 됩니다.

 

 

# 클래스 상속 예시

 

예시 1

 

예시2

-> Son 클래스에는 greeting 메서드가 없지만 Parents 클래스를 상속받았으므로 Parents의 메서드인 greeting 메서드를 호출할 수 있습니다.

 

 

** 오버라이딩의 예 **

 

오버라이딩의 예

-> 위 예시처럼 같은 이름의 메서드가 여러 클래스에서 다른 기능을 하는 것을 오버라이딩(overriding) 이라고 합니다.

오버라이딩의 사전적 의미는 '다른 무엇보다 더 중요한, 최우선시 되는' 으로 보통 상위 클래스에서 이름은 같으나 하위 클래스의 기능을 다르게 하여 더 우선시 하고 싶을 때 사용합니다.

 

 

** 다중 상속 **

 

다중 상속은 클래스가 2개 이상의 클래스로부터 상속받을 수 있게 하는 기능입니다. 클래스들의 기능이 동시에 필요할 때 용이하나 클래스의 상속 관계에 혼란을 줄 수 있고(예: 다이아몬드 상속) 프로그래밍 언어에 따라 사용 가능 유무가 다르므로 주의해서 사용해야 합니다. 참고로 JAVA는 지원하지 않습니다.

 

# 다중 상속의 예

 

다중 상속의 예시

-> Son(Mom, Dad) 와 같이

[ class 하위클래스이름( 상위클래스이름1, 상위클래스이름2, ... ) ]

로 코드를 작성하면 여러개의 클래스 기능을 모두 상속받을 수 있습니다.

 

 

4. 동적 바인딩

 

동적 바인딩은 실행 시간 중에 일어나거나 실행 과정에서 변경될 수 있는 바인딩으로 컴파일 시간에 완료되어 변화하지 않는 정적 바인딩과 대비되는 개념입니다. 동적 바인딩은 프로그램의 한 개체나 기호를 실행 과정에 여러 속성이나 연산에 바인딩함으로써 다형 개념을 실현합니다.

 

 

 

참고문헌

[1] 위렌 산데/ 카터 산데, 헬로! 파이썬 프로그래밍, 위키북스, 2015

[2] 위키백과, 객체 지향 프로그래밍

ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

+ Recent posts