AI학습 10

이유진·2024년 6월 27일

-- 15.객체지향과_클래스.ipynb --

1. 객체지향 프로그래밍

  • 문제를 여러개의 객체 단위로 나눠 작업하는 방식
  • 클래스를 이용해 연관있는 처리부분과 데이터 부분을 하나로 묶어 객체를 생성해 사용함

1-1.클래스와 객체

  • 건축 설계도가 클래스라면, 실제로 지어진 집은 객체로 비유
  • 붕어빵 틀이 클래스라면 붕어빵은 객체
  • 실제로 클래스가 인스턴스화 되어 메모리에 상주하는 상태를 객체라고 부름
  • 파이썬의 모든 변수는 객체를 저장한다. (순수 객체지향언어)

1-2.클래스 만들기

데이터 부분 :

class 클래스명 :
    def __init__(self) : # 생성자               self는 위치 정보라고 생각하면 됨
        self.필드명1 = 값1
        self.필드명2 = 값2
        ...
        객체가 메모리에 로드될 때 가장 먼저 실행되는 문장

처리부분 :

    def 메소드명(변수,변수2, ...):
        메소드가 호출되면 실행될 문장
  • 생성자는 클래스를 객체화 시킬 때 가장 먼저 실행되는 함수
  • 클래스를 통해 호출되는 변수를 필드라고 함
  • 클래스를 통해 호출되는 함수를 메소드라고 함

class Dog :
pass

클래스를 이용해 객체를 생성

jin = Dog()
print(jin, type(jin))

tomy = Dog()
print(tomy, type(tomy))

1-3.생성자

  • 클래스 인스턴스가 생성될 때 자동으로 호출됨
  • init (self, 변수1, 변수2, ...)
  • self 매개변수는 항상 첫번째 오며, 자기 자신의 객체를 가리킴
  • 이름이 꼭 self일 필요는 없지만 관례적으로 self를 사용
  • 생성자에서는 해당 클래스가 다루는 데이터 정리

self가 진짜 위치정보를 넘겨주는지 확인

class Dog :
def init(self): # 셀프는 객체 그 자체!
print(self)

jin = Dog()
print(jin)

tomy = Dog()
print(tomy, type(tomy))

클래스가 다루는 데이터를 정의!

class Dog :
def init(self): # 셀프는 객체 그 자체!
print(self)
self.name = '이름없음' # self라는 위치에 name이라는 저장공간이 생김.
self.age = 0 # 틀일 뿐이니까 print로 해도 name 또는 age는 안나옴.

jin = Dog()
print(jin.name)

jin.name = '진순이'
print(jin.name)

tomy = Dog()
print(tomy.name)

객체를 만듦과 동시에 내가 원하는 데이터를 필드에 넣기

class Dog :
def init(self, name, age, breed = '술먹고개됨'): # 셀프는 객체 그 자체!
print(self)
self.name = name # self라는 위치에 name이라는 저장공간이 생김.
self.age = age
self.breed = breed

jin = Dog('지민이',25)
print(jin.name)
print(jin.breed)

tomy = Dog('호중이', 25, '그냥잡종')
print(tomy.name)
print(tomy.age)
print(tomy.breed)

함수 호출과 똑같이 매개변수를 잘 넘겨줘야합니다.

self 자동으로 넘어가기에 객체를 만들 때 신경 쓸 필요가 없다.

1-4.메소드 정의하기

  • 해당 클래스의 객체에서만 호출 가능한 함수
  • 해당 객체의 속성(data)에 대한 연산을 행함
  • 객체이름.메소드명() 형태로 호출함

class Counter :
def init(self) :
self.num = 0

메소드 해당 객체의 기능

def Increment(self) :
self.num += 1

번호표 리셋

def do_Reset(self) :
self.num = 0

공통적인 기능을 가지고 있는 친구들을 묶어줄 때

add(수학 연산과 관련된 함수들을 묶어줄 때)

def add(self, num1, num2) :
return num1 + num2

SHBank = Counter()
HNBank = Counter()

print('신한은행 번호표', SHBank.num)
print('신한은행 번호표', HNBank.num)

번호표를 증가한 객체는 신한은행 객체!

그렇기 때문에 하나은행 객체는 아무 영향 X

SHBank.Increment()
print('신한은행 번호표', SHBank.num)
print('신한은행 번호표', HNBank.num)

1-5.메소드 타입

  • instance method : 객체 형태로 호출되기 때문에 해당 메소드를 호출한 객체에만 영향을 미침
  • class method : class로 호출(함수 선언 위에 @staticmethod 라고 표시)

class Math :
def add(slef, x, y):
return x+y
def multiply(self, x, y):
return x*y

math = Math()
print(math.add(1,4))

class Math2 :

@staticmethod # 어노테이션(아래 영역의 쓰임을 컴퓨터에게 알려줌.)
def add(x, y):
return x+y

@staticmethod
def multiply(x, y):
return x*y

소속 즉 클래스만 알려주면 됨

Math2.add(1,4)

profile
독해지자

0개의 댓글