본문 바로가기
Programming Language/Python

[파이썬] DAY5 객체 지향론

by 9루트 2022. 1. 20.

* 객체지향을 사용하는 이유

코드의 재사용성이 높고 코드의 관리가 쉬워진다.(상속이라는 개념이 있기 때문에 통합 관리가 쉬워졌다.)
1) 소프트웨어의 생산성 향상: 기 작성된 코드를 재사용할 수 있으므로 생명 주기 단축 문제를 해결해준다. 

2) 실세계에 대한 쉬운 모델링: 과거 수학 계산, 통계 처리 등 순서대로 풀어야 하는 알고리즘 뿐 아니라 실세계의 객체를 중심으로 하는 객체 지향 언어가 세계를 모델링하기 쉬워졌다.

3) 부품별로 나눠져있기 때문에 오류가 나도 부분만 고치면 된다.

 

 

객체지향의 4대 성질

캡슐화(은닉성)

상속성

다형성

추상화

 

cf) 객체는 인스턴스랑 같다.

객체는 인스턴스와 다르다.

둘 다 맞는 표현

 

 

객체 지향 특징

1) 객체들의 상호작용이 중요

서로 데이터를 주고 받는다. 객체가 가지고 있는 기능 = 메소드

 집합 관계: 완성품과 부품

 사용 관계: 객체가 다른 객체를 사용하는 관계

 상속 관계: 종류 객체와 구체적인 사물 객체 관계, 부모 객체에 대한 성질들을 자식 객체가 물려받음

파이썬은 객체 지향을 포기하는 기능이 없다.(C와 달리 상속을 기반으로 하는 업캐스팅 다운캐스팅 개념이 없다.)

2) 객체 = 필드(속성) + 메소드(동작)

변수 = 데이터를 담을 수 있는 공간

필드 = 객체 내에 데이터를 담을 수 있는 공간

3) 객체는 세 가지로 구성: 데이터 + 행위(기능) + 고유의 아이덴티티

4) 객체는 클래스에 정의된 내용대로 메모리에 생성된다.(메모리 공간 유무에 따라 존재 유무 따질 수 있음)

 


1. 캡슐화

외부로부터 보호하기 위해 클래스로 캡슐 표현, 캡슐화 함으로써 은닉성이 나온다.

클래스 = 객체를 만드는 틀

객체 - 클래스라는 틀에서 생겨난 실체

이 관점에서 객체와 인스턴스(실체)는 같은 뜻이다.

캡슐화는 클래스가 아닌 객체를 만드는 과정으로 객체의 필드와 메소드를 하나로 묶고 실제 구현 내용을 외부로부터 감추는 것이다.

캡슐화 된 멤버를 노출 시킬지 여부는 접근 제한자(Access Modifier)를 사용하여 결정한다.

 

* 접근 제한자 (C는 4가지지만 파이썬에서는 2가지만 고려하면 된다.)

 


2. 상속

부모 클래스의 필드와 메소드(멤버=필드+메소드)를 자식 클래스가 물려받는 것

자식 클래스가 부모 클래스를 선택해서 물려 받는다.

상속을 받아도 멤버는 부모 클래스 영역 안에 있다. 부모의 영역과 자식의 영역은 다르므로 자식은 부모의 멤버를 가지고 있을 수 있다.(오버라이딩-다형성) 즉 다른 지역이므로 자식은 부모와  같은 필드나 메소드를 가지고 있을 수 있다.

상속의 장점

(1) 부모 클래스를 한번만 수정함으로써 자식 클래스를 수정할 필요가 없다.(유지 보수의 편리성)

(2) 코드의 반복을 줄일 수 있다.

(3) 다형성을 구현할 수 있다. 

 


3. 다형성

부모 클래스에서 물려받은 가상 함수를 자식 클래스 내에서 오버라이딩 하여 사용하는 것

부모로부터 상속 받은 하나의 기능을 다르게 보이거나 작동하도록 하는 현상

ex) 소리를 내는 기능을 받았지만 멍멍, 야옹야옹, 꼬꼬댁 등 각각 다양하게 작동하게 한다.

 


4. 추상화

부모 만들기, 관련 있는 것들 끼리 그룹 짓기

길과 건물들을 묶은 것 = 지도

지하철 역과 길을 묶은 것 = 지하철 노선도

고양이, 새, 등등 = 동물

 

동물이라는 클래스로 동물이라는 객체를 만들 수 없다. 왜냐하면 동물은 실체가 없는 개념이기 때문이다.

즉 추상화는 실존하는 객체를 만들 수 없는 클래스로 공통 속성과 기능을 상속하기 위해 존재한다.