본문 바로가기
코딩 어쩌구/자료구조와 알고리즘

[python] 모듈과 클래스

by annmunju 2021. 10. 11.

모듈

이미 만들어진 기능을 사용자가 가져와서 사용. 필요할 때 마다 사용할 수 있음.

ex. 계산 모듈, 난수 모듈, 날짜와 시간 모듈...

1) 내부 모듈 : 파이썬 설치 시 기본적으로 사용할 수 있는 모듈

2) 외부 모듈 : 별도 설치 후 사용할 수 있는 모듈

3) 사용자 모듈 : 사용자가 직접 만든 모듈

 

# 난수 발생 모듈
import random

random.randint(시작, 끝) # 시작과 끝-1 사이에 난수 1개 발생
random.sample(range(시작, 끝), n) # 시작과 끝-1 사이에 난수 n개 발생 (겹치는 난수 없음)

 

1. 모듈 제작과 사용

모듈명.함수(...) : 모듈 안에 속한 함수를 이용할 수 있다.
# calculator.py

def add(n1, n2):
	print(f"덧셈 결과: {n1 + n2}")
    
def sub(n1, n2):
	print(f"뺄셈 결과: {n1 - n2}")

def mul(n1, n2):
	print(f"곱셈 결과: {n1 * n2}")
  
def div(n1, n2):
	print(f"나눗셈 결과: {n1 / n2}")

1) import 키워드를 이용해 모듈 임포트

2) import ~ as x : x라는 닉네임을 붙여 모듈 이름을 단축 시킨다.

3) from ~ import ~ : 어떤 모듈에서 특정 기능(함수)만 가져온다.

 

2. 실행(메인) 파일

 - 실행파일(.py)에는 전역변수 __name__ 이 저장되어 있다.

   - __name__에는 __main__이 저장된다. 메인으로 직접 실행한 파일이라는 의미이다.

   - __name__에는 다른 모듈 이름이 저장될 수 있다. 메인 실행파일 안에 import 해서 사용했다는 의미이다.

 

3. site-packages 

어디에서나 사용할 수 있는 모듈 패키지. 한번에 다운로드 해서 사용할 수 있다. 보통 우리는 pip install 해서 인터넷에서 다운로드 해서 사용하지..!

 

+. 자주 사용하는 모듈

1) import math

 - sum, max, min, pow(숫자, 거듭제곱수), round, fabs=절대값, ceil=올림, floor=내림, trunc=버림

 - gcd=최대공약수, factorial=팩토리얼, sqrt=제곱근

2) import random

3) import time

 -  tm_year / tm_mon / tm_mday / tm_hour / tm_min / tm_sec / tm_wday

 

 

 


 

클래스

* 객체지향 프로그래밍

1) 속성과 기능으로 구분됨. 속성(숫자) / 기능(덧셈, 뺄셈...) | 속성(색상, 길이, 가격) / 기능(전진, 후진, 정지...)

2) 객체 만들기 : 클래스에서 생성된다.

 - 클래스 만들기 (1개) > 객체 생성자 호출 > 객체 생성 * n개...

ex. 붕어빵 틀 > 반죽 넣고~ > 여러개의 붕어빵 생성 가능

3) 객체 사용의 장점 : 코드 재사용. 모듈화에 좋다.

 

[클래스 생성 예시]

class Car:

    def __init(self, color, length):
    	self.color = color
        self.length = length
        
    def doStop(self):
    	print("STOP!!")
    
    def doStart(self):
    	print("START!!")
       
    def printCarinfo(self):
        print(self.color)
        print(self.length)
# 객체 생성
car1 = Car('red', 200)
car2 = Car('blue', 300)

 - car1, car2를 이용해 클래스 내의 함수를 이용하거나, color, length를 이용할 수 있음.

 

1. 객체 속성 변경

class NewGenPC:

    def __init__(self, name, cpu, memory, ssd):
    	self.name = name
        self.cpu = cpu
        self.memory = memory
        self.ssd = ssd
        
    def doExcel(self):
        print("Excel Run!")
        
    def doPhoto(self):
        print("Photo Run!")
        
    def printPCInfo(self):
        print(name, cpu, memory, ssd)
        
myPC = NewGenPC('myPC', 'i5', '16G', '256G')

myPC.cpu = 'i9'
myPC.ssd = '512G'

myPC.printPCInfo()

# 결과
# myPC, i9, 16G, 512G

 

2. 객체와 메모리

1) 변수는 객체의 메모리 주소를 저장하고 이를 이용해서 객체를 참조한다.

     메모리에 객체가 생성됨. > 변수에다 저장했으나 이는 객체가 담긴 메모리 주소가 담겨있으니 이를 찾아오는 것. = 주소값을 가지고 참조한다. 레퍼런스 참조

2) 얕은 복사 : 객체 주소를 복사하는 것으로 객체 자체가 복사되지 않는다.

3) 깊은 복사 : 객체 자체를 복사하는 것으로 또 하나의 객체가 만들어진다. (copy 모듈 사용해서 그를 복사해 완전히 다른 객체로 복제)

 

3. 클래스 상속

클래스는 또 다른 클래스를 상속해서 내 것처럼 사용할 수 있다.

class Normal: ... #상속하는 자

class Tuerbo(Normal): ... #상속받는 자

- 다중 상속 : 2개 이상의 클래스를 상속한다. class 상속받는(상속1, 상속2...):

- 오버라이딩 : 하위 클래스에서 상위 클래스의 메서드를 재정의한다. 하위 클래스에서 상위 클래스에 있는 메서드와 동일한 이름으로 새로운 방법을 부여하면 상속을 통해 재정의 할 수 있다. 

- 추상클래스 : 상위 클래스에서 하위 클래스에 메서드 구현을 강요한다. 상위 클래스에 아예 구현은 안되고, 선언만 되어 있는 경우 하위 클래스에서 구체적으로 구현시키고 이를 상속 강요함. (상위 클래스에서 사용하도록 함)

 

4. 생성자

1) 객체 생성될 때 생성자를 호출하면 __init__()가 자동으로 호출 된다.
2) __init__()가 속성을 초기화한다.

 객체명() >>> init이 자동 호출됨. 

 객체명(변수1, 변수2) >>> init이 자동 호출 됨. 하지만 변수1,변수2 저장은 되어있음 

3) super() : 상위 (상속하는) 객체 init 호출. super().__init__(변수1, 변수2)

728x90