KDT 과정을 수강하며 그날 배운 내용의 확인과 복습을 위해 꾸준히 글을 써보려고 한다.
사전적인 지식보단 알기 쉽게 풀어놓은 내용으로 구성하고자 한다.
DAY 6 2023.03.10
5일차에 했던 내용중 정리하지 못한 내용을 마저 정리하고 오늘 내용을 정리해보고자 한다.
1.객체 지향 프로그래밍
●객체란?
물리적으로 존재하거나 추상적으로 생각할 수 있는 것중에서 자신의 속어을 가지고 있고 다른 것과 식별 가능한 것을 말함
●클래스란?
객체를 생성하기 위한 일종의 설계도(클래스 안에는 명사와 동사만 있음)
클래스는 프로퍼티(필드),메소드(함수) 로 구성되어 있다.
프로퍼티(Property) :데이터가 저장되는곳
메소드 (method) : 객체의 동작에 해당되는 실행 블록
●클래스와 객체
건축 설계도가 클래스라면,실제로 지어진 집은 객체
객체는 클래스로 생성되어 구체화된 인스턴스
실제로 클래스가 인스턴스화 되어 메모리에 상주하는 형태를 객체라고 부름
파이썬의 모든 변수와 함수는 객체로 저장
●클래스 만들기
클래스를 통해 호출되는 변수를 프로퍼티(필드) 라고 부름
클래스를 통해 호출되는 함수를 메소드라고 부름 ( 메소드는 클래스 내에서 공유)
self : 클래스의 각 호출된 객체를 가르침. 호출하는 객체에 따라 달라짐
프로퍼티에 self 가 없다면 어떤 객체를 가르치는지 모르므로 사용해준다.
클래스 생성 예시
●생성자(Constructor)
클래스를 객체화 시킬 때 가장 먼저 실행되는 메소드(호출하는 변수에 대해 처음부터 선언된다)
__init__(self) 의 형태로 궁성된다
생성자에서는 해당 클래스가 다루는 데이터를 정의하고 초기화함
●메소드
메소드란?
해당 클래스의 객체에서만 호출가능한 함수
해당 객체의 속성에 대한 연산을 행함
객체이름 메소드명() 형태로 호출한다.
하나의 예시를 보며 설명하겠다.
이 코드를 보게되면 Counter 라는 클래스를 정의하고 그안에 다양한 메소드를 담고 있다. 이 클래스에 대해 설명해보자면 처음에 __init__ 코드 즉 생성자를 사용하여 처음 에 객체 num 을 0으로 초기화 시키는 역할을 하고있다. 그이후 메소드는 그 수에 1을 추가하거나 감소 시키고 현재 num 상태를 보여주는 함수 등으로 구성되어있다.
이 매서드는 변수에 직접적으로 접근하는것이 아닌 메서드 즉 함수를 통해서 num이라는 변수를 업데이트 시켜주고 있다. 그렇다면 여기서 우리가 의문을 가질 수 있다.
#왜 변수를 직접적으로 수정하지 않고 메소드를 통해 수정할까?
이는 객체 지향 프로그래밍중 하나의 특성인 "은닉성" 이다. 은닉성이란 변수에 직접적으로 접근하지 않고 메소드를 통해서 변수를 수정하는것이다. 이러한 이유는 데이터를 다룰때 프로퍼티, 즉 변수를 직접적으로 변환해 주는 방식을 택한다면 후에 데이터가 손상되거나 변경되면 안되는 데이터를 변경하게 될 수도 있기에 그럴 가능성을 애초에 막는것이다.
"은닉성을 보호한다" 라는 말은 이러한 일련의 과정을 말하는 것이고, 이는 객체 지향 프로그래밍에 중요한 특성중에 하나이다.
● 메소드 타입
ºinstance method : 객체 형태로 호출되기 때문에 메소드를 호출한 객체에서만 사용한다.
ºclass method : 클래스 이름으로 호출하느 메소드 (메소드 선언위에 @staticmethod라고 표기한다) 객체를 만들지 않고 사용하는 것이니 self는 필요없다.
예시를 살펴보자
일단 일반적인 클래스 선언과 클래스 사용에 대해 보자
클래스를 선언하고 변수에 클래스를 선언해준뒤 변수.method 를 사용하고 있는 모습이다. 이를 instance mehod라 한다.
class method 의 사용을 보자
이는 클래스 적용을 따로 하지 않고 클래스명.메소드() 형식을 취함을 보여준다.
사용하는 이유는 객체를 선언할 필요가 없고 직관적으로 코드가 눈에 보이기 때문이다.
2.상속
상속이란?
- 기존의 정의해둔 클래스의 기능을 그래도 물려받음
- 기존 클래스에 기능 일부를 추가하거나, 변경하여 새로운 클래스를 정의함
- 코드를 재사용할 수 있게 됨
- 안정적이고 유지보수에 용이함
- 상속을 받고자 하는 대상인 기존 클래스를 부모,parent,super,base 클래스라고 부름 (해주는 클래스)
- 상속을 받는 새로운 클래스를 자식,child,sub 클래스라고 부름
클래스를 상속받는 방법은 calss 클래스명(상속받을 클래스)의 형태를 취하면 된다.
●메소드 오버라이딩
- 부모 클래스의 mehod를 재정의
- 자식 클래스의 인스턴스로 호출시 재정의된 메소드가 호출됨
클래스를 상속후 부모클래스의 메소드를 재정의 할 때 사용한다.
예시를 살펴보자
●다중상속
- C#,Java는 다중상속이 불가능
- 파이썬은 C++과 같이 다중상속이 가능
- 여러 클래스를 상속(개수제한x)
하나의 클래스가 여러가지 클래스를 다중으로 상속받는다. 제약조건이 있지만 파이썬에서는 비교적 자유롭게 가능하다.
3.스페셜 메소드
●스페셜 메소드
- __로 시작해서 __로 끝나는 특수함수
- 해당 메소드를 재구현하면 객체에 여러가지 파이썬 내장함수나 연산자에 원하는 기능을 부여할 수 있다.
바로 예시를 살펴보자
각각 __을 사용하여 특수한 기능을 한다.
사용하는 이유는 클래스내에서 기존 파이썬 내장함수를 오버라이딩하여 클래스를 선언하고 상황에 맞게 사용하기 위해서이다.
4.모듈
- 클래스 또는 함수를 모아 놓은 파일
- 모든 파이썬 파일(py) 는 모듈
일전에 설명에서도 포함되있던 모듈이다. 이는 클래스와 함수를 모아놓은 파일로써 확장자명은 .py이다. 모든 파이썬 파일을 지칭한다.
사용하는 방법은
import 모듈명 이다.
그중에 특정 method를 불러오고 싶다면 from 모듈명 import 메서드명 으로써 확장시킬 수 있다.
#그렇다면 여러가지 모듈을 사용할때 같은 이름의 함수들이 존재한다면?
모듈채로 가져와서 모듈.함수명을 사용할 수 있지만 편의를 고려하며 모듈에 별명을 붙여 가져온다. 예시를 보자
현재 우리는 공부를 위해 구글 코랩을 사용하고 있다. 이 상황에서 특정 모듈파일을 가져와서 사용할 수 있다. 문서 파일에 직접 올린후 사용 할 수 있지만 이는 컴퓨터에 메모리처럼 휘발성이 생긴다. 그를 방지하기위해 구글 드라이브와 연동한후 모듈 파일을 연동시키는 방법을 알아보자
●구글 드라이브의 활용
이는 sys 모듈과 sys.path.append(경로명) 을 이용한다. 이를 통해서 그 경로에 존재하는 모듈을 자유롭게 가져올 수 있다.
예시를 보자
●패키지
- 모듈의 상위개념
- 모듈이 모여있는 디렉토리
패키지 관리자
- 외부 모듈을 설치 또는 삭제하기 위한 프로그램
- pip 명령을 사용(파이썬을 설치하면 pip 함께 설치됨)
- 윈도우 명령 프롬프트 또는 터미널에서 사용
- pip --version 으로 버젼을 확인할 수 있음
오늘은 객체 지향 프로그래밍 부터 상속과 스페셜 메소드 모듈을 공부하여 보았다. 특정 함수보단 언어의 구조적인 공부라고 볼 수 있다. 특정 함수의 기능이나 명칭은 검색을 통해 바로 쓸 수 있지만 구조적인 공부는 평소에도 앞으로도 게속 쓰일 것이기 때문에 주기적으로 복습을 통해 정확히 알 필요가 있다.
오늘 배운 KDT 의 내용을 정리하여 보았다. 앞으로 꾸준히 블로깅을 하고자 한다.
'코딩공부 > 파이썬(Python)' 카테고리의 다른 글
Python_예외처리 (2) | 2023.03.23 |
---|---|
문제.random 모듈 활용 문제 (1) | 2023.03.23 |
Python_random module (0) | 2023.03.23 |
Python_변수, callback함수와 lambda 함수 (3) | 2023.03.23 |
Python_사용자 정의함수 (0) | 2023.03.23 |