AI School 8기 (LIKELION, 22.12~23.05)

[AI School/TIL] Python 4일차_23.01.05

data_start_ 2024. 2. 23. 15:46

2023.01.05 (목) 파이썬 4번째 강의를 들었습니다.

 

[Python 문법 4]

오늘은 class에 대해서 배웠습니다. 언제 어떻게 사용하고, 어떤 장점이 있는지를 중점적으로 알 수 있었습니다.

 

1. Class : 2가지 방법으로 사용된다.

(1) 변수와 함수를 묶어서 코드를 작성하는 방법 (코드 가독성 높일 수 있음)

(2) 객체지향 구현하는 문법으로 사용

  • 객체지향 : 실제 세계를 모델링하여 프로그램을 개발하는 개발 방법론 (가장 객체지향적인 언어는 java)

-협업을 용이하게 하기 위한 목적으로 사용됨

(여러명이 하나의 프로그램을 개발하다보면 다른 사람이 만든 코드를 가져다가 사용할 때,

그 기능을 효율적으로 잘 사용하기 위해서)

-실제 세계를 모델링한다 (네트워크 등 대부분의 기술들이 실제 세계를 모델링해서 개발하는 경우가 많음. 여러 사람이 협업할 때, 개념을 이해하기가 쉬움)

 

  • 식별자 컨벤션

-변수, 함수 : snake_case

-클래스 : PascalCase, UpperCamelCase

 

  • class, self, 사용자 정의 데이터 타입, special methods(__init__(), __add__() 등)
  • 상속, super, getter-setter, mangling, method의 종류들(인스턴스, 클래스, 스태틱)
  • Class 사용법 : 클래스 선언 (코드 작성), 객체 생성(메모리 사용 / 자원 사용), method* 실행 (코드 실행)

* method : 클래스 안에서 선언된 함수

cf) 함수 사용법 : 함수 선언 (코드 작성), 함수 호출 (코드 실행)

 
단계
클래스
실제 세계 비유
1
클래스 선언
설계도 작성
2
객체 생성
제품 생산
3
method 실행
생산된 제품의 기능 사용

 

# [1] 클래스선언 : 코드작성
# 계산기 설계 : Calculator : number1, number2, plus(), minus()

class Calculator:

    number1, number2 = 1, 2

    def plus(self):
        return self.number1 + self.number2

    def minus(self):
        return self.number1 - self.number2

# [2] 객체 생성 : 메모리 사용
calc1 = Calculator()
calc2 = Calculator()

# [3] 메서드 실행 : 코드 실행
calc1.plus(), calc1.minus()
 

output >

(3, -1)
  • self : 객체 자신 (다른 언어에서는 this)
# calc1.plus() : self == calc1
# self.number1 + self.number2 > calc1.number1 + calc1.number2
# plus의 객체는 calc1
 
  • 스페셜 메서드 : 특별한 기능을 하는 메서드
 
구분
기능
특징
__init__()
생성자 메서드
- 객체를 생성할 때 실행
- 변수의 초기값을 설정할 때 주로 사용
- 불량 객체(메서드 사용X)가
만들어질 확률을 줄여줌
__add__()
+ 연산자를 정의
(연산자, 논리식 모두 가능)
-int 데이터타입의 +연산과 str 데이터타입의 + 연산이 다르게 수행
-python의 list와 numpy의 ndarray 데이터타입이 수행되는 연산이 다르다.
__str__(), __repr__()
print() 함수 실행을 정의
-ipython에서 출력하는 기능을 수행
(마지막 줄에 변수 넣으면 실행되는 거)
-repr은 객체의 속성을 보고 싶을 때 많이 사용

 

* __init__() 예시

# 클래스생성 : 설계도작성
class Account:

    def __init__(self, balance=20000):
        self.balance = balance

    def insert(self, amount):
        self.balance += amount
    
    def withdraw(self, amount):
        if self.balance >= amount:
            self.balance -= amount
        else:
            print(f'잔액이 {amount - self.balance}원 부족합니다.')

# 객체생성 : 메모리사용 : 자원사용
account = Account()

# 메서드실행 : 코드실행 : 기능사용 : 불량품 생산
account.insert(3000)

 
  • 클래스는 사용자 정의 데이터 타입이다.
 
구분
데이터 타입
클래스
사용자 정의로 만듦
account
type(account)
-> __main__.Account
Account
사용자 정의로 만들지 않음
data = [1, 2, 3]
type(data)
-> list
list
  • 상속 : 다른 클래스의 변수(메서드)를 가져와서 사용하는 방법

-다른 언어는 다중 상속이 안 되나, 파이썬은 다중 상속이 가능하다.

 

2. Decorator : 함수에서 중복되는 코드를 빼서 데코레이터 함수로 만들어서 코드를 작성하는 방법

- 원래 있던 함수에 새로운 기능을 추가한 함수로 변경할 때 주로 사용한다.