이 게시글은
서울대학교 데이터사이언스대학원
조요한 교수님의
데이터사이언스 응용을 위한 컴퓨팅 강의를
학습을 목적으로 재구성한 것입니다
python의 Module
module이란 쉽게 말하면 python 파일을 뜻한다
import math라고 가장 위에 선언해주면
math라는 python 파일 안에 있는 각종
definition이나 statement를 사용할 수 있다
접근을 위해서는
math.sqrt()
이런 방식으로 한다
from math import sqrt와 같은 방식으로
math 모듈 안에 있는 sqrt 함수만 가져올 수도 있지만
이름 충돌 확률이 있어 권장되지 않는 방식이라고 한다
python의 class
class는 주로 구글링해보면
설계도(blueprint)라는 개념에 자주 비유가 된다
클래스는 변수들과 함수들이 정의되어있는
하나의 object이다
class는 객체지향의 개념을 배우면
더욱 깊게 이해할 수 있지만
객체지향은 이후 수업에서 더욱 자세하게 배우므로
이 수업에는 간략하게만 설명한다고 한다
python에서 클래스를 구현하려면
초기화 init함수 앞에 무조건 인자로
자기 자신인 self를 넣어주는데
통상적으로 self라고 부르나, 반드시 인수명이
self일 필요는 없다
알아두면 좋을 python의 class에서 특이점은
파이썬은 모든 데이터 타입들이 다 class로 구성되어있다고 한다
int, float, str, bool 등등의 모든 타입이 class로 구성되어있고
data type이 built-in으로 구현되어있는 C언어와
가장 큰 차이점이라고 한다
그래서 파이선에서는
help(int)와 같이 하면 int data type에 대한
설명을 볼 수 있다고 한다
앞에서 말했듯 class는 설계도(blueprint)에
주로 비유가 된다고 했는데
한마디로, class는 그냥 정의 그 자체일 뿐
실체가 없는 것이다
설계도가 완성되었다고 집이 건축된 것이 아니듯
설계도는 그냥 집을 이렇게 건축할 것이라는 정의일 뿐
집이라는 건축물의 실체가 아니다
따라서 실체가 없는 class는 메모리 상에도
올라가지 않는다
프로그램 상에서 클래스 객체를 생성하면
클래스가 실행이 되고 메모리에 올라와서
클래스 인스턴트인 class object가 만들어진다
Object-Oriented Programming (OOP) Principles
객체지향에는 가장 유명한
대표적인 원칙 4가지가 있다
객체 지향의 개념에 대해서는 다른 수업에서
매우 자세하게 다루도록 하고
이번에는 class를 배우면서 객체지향 4원칙에 대해서만
간략하게 다뤄보자고 하셨다
1) Encapsulation (캡슐화)
클래스와 관계가 있는 여러 가지 메소드들을 번들링을 시키는 것이다
예시를 들자면 Account(계좌)라는 class를 정의하면
account와 관련된 account_holder, balance 등등은
Account class안에다 정의한다는 것이다
이러한 캡슐화는 reusability(재사용성)이 올라가는데
모든 메소드들이나 속성들이 한 개의 class로
번들링이 되어있기 때문에 재사용성이 높다
또한, 수정이 필요할 때는 class 내부에서만
수정하면 되므로 complexity를 낮춰준다
2) Abstraction (추상화)
class는 복잡한 시스템에서 세부사항을 감추고
중요한 개념만 드러내는 것을 뜻한다
class 내부의 메소드들이 구체적으로 어떻게 동작하는지를
외부에서 몰라도 되도록 하는 것이다
위 코드에서 Shape는 추상 class로
Shape에서의 area 메소드는 Shape를 상속받는
클래스들이 무조건 구현하도록 되어있다
그래서 Shape를 상속받는 Rectangle이라는 클래스에서
area함수를 정의해주는 모습을 볼 수 있다
Shape 함수에서는 딱히 구체적인 area 코드를
구현하지않고 중요한 Interpace만 드러냈다
개발자 관점에서는 class 내부에서 특정 메소드가
어떻게 구체적으로 동작하는지 모르기 때문에
편하게 느껴질 수 있다
추상화도, class 내부에선 수정이 생길지라도
이를 사용하는 바깥에서는 수정을 고려할 필요가 없기때문에
complexity를 줄여준다
3) Inheritance (상속)
Child 클래스가 Parent 클래스를
물려받는 것을 의미한다
위 코드를 참고하면
Vehicle이 Parent(Base) Class이고
Car은 Vehicle을 상속받은 Child(Derived) Class이다
이렇게 부모인 Vehicle을 상속받은
Car Class는 Vehicle 클래스에 있는
display_info 메소드를
따로 Car 클래스에 정의할 필요없이 사용할 수 있다
이는 반복적인 코드의 작성을 막아준다
4) Polymorphism (다형성)
이름이 같은 메소드들이 여러개 있어도
그 주인이 누구냐에 따라 다른 방식으로
수행이 될 수 있는 것을 뜻한다
이게 되지않으면 개발자는 프로그래밍을 할 때
if/else로 하나하나 예외처리를 해줘야했을 것이다
'강의 > computer science' 카테고리의 다른 글
[computerScience] Array, Linked List, Queue, Stack, Hash Table (1) | 2024.09.13 |
---|---|
[ComputerScience] C언어와 포인터 (3) | 2024.09.09 |
[ComputerScience] Memory Model, Stack VS Heap, Memory Operation (2) | 2024.09.06 |
[ComputerScience] 프로그래밍 언어 개요(변수, 데이터타입, 범위, 연산자) (2) | 2024.09.06 |
[ComputerScience] 인터프리터와 컴파일러 (0) | 2024.09.06 |