Python_Intermediate _3

최정민·2024년 7월 30일

Python_Middle

목록 보기
3/4

수강항목

  1. 객체지향 프로그래밍
  2. 객체와 클래스
  3. 클래스 상속

1. 객체지향 프로그래밍

  • 객체를 이용한 프로그램으로 객체는 속성과 기능으로 구성된다.

    [출처이미지]제로베이스 취업스쿨

  • 객체는 클래스에서 생성된다.

    [출처이미지]제로베이스 취업스쿨

  • 객체는 원하는 만큼 생성이 가능하다.

객체 사용의 장점

  1. 코드 재사용, 모듈화에 좋다.

2. 객체와 클래스

  • 클래스는 class 키워드와 속성(변수) 그리고 기능(함수)를 이용해서 만든다.

    [출처이미지]제로베이스 취업스쿨

  • 클래스는 시작을 대문자로 시작한다.

  • 객체는 클래스의 생성자를 호출한다.

파이썬

class Air():

    def __init__(self, color, len):
        self.color = color
        self.length = len

    def airPortInfo(self):
        print(f"self.color : {self.color}")
        print(f"self.length : {self.length}")

    def doFly(self):
        print("비행기 이륙 합니다.")

    def doStop(self):
        print("비행기 착륙 합니다.")

air1 = Air("blue", 1500)
air2 = Air("green" , 2000)

air1.airPortInfo()
air2.airPortInfo()

설명

  1. color와 len이라는 매개변수 생성
  2. self.color / self.length 로 초기화 진행
  3. 함수를 생성하여 기능을 만든다.
  4. 객체를 만들어 매개변수에 값을 넣어 기능을 사용한다.

객체 속성 변경

  • 객체 속성은 변경할 수 있다.
  • 속성에 접근하기 위해서는 도트연산자를 이용한다.
  • 속성에 접근하여 해당 속성에 값을 변경할 수 있다.
class NewGenerationPC:

    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 doPotoshop(self):
        print("PHOTOSHOP RUN")

    def printPCInfo(self):
        print(f"self.name: {self.name}")
        print(f"self.cpu: {self.cpu}")
        print(f"self.memory: {self.memory}")
        print(f"self.sdd: {self.ssd}")

myPC = NewGenerationPC("myPC", "i5","16GB","256GB")
myPC.printPCInfo()

print("-" * 30)

friendPC = NewGenerationPC("friendPC", "i7","32GB","512GB")
friendPC.printPCInfo()

print("-" * 30)

myPC.cpu = 'i9'
myPC.memory = '32GB'
myPC.ssd = '1T'
myPC.printPCInfo()

출력

객체와 메모리

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

    def __init__(self, color, weight):
        self.color = color
        self.weight = weight

    def printInfo(self):
        print(f"address1 : {self.color}")
        print(f"address2 : {self.weight}")

addr1 = Address("blue",300)
addr2 = Address("green",100)
addr3 = addr1

addr1.printInfo()
addr2.printInfo()
addr3.printInfo()

print("속성 변경 후 확인")

addr1.weight = 100
addr1.color = "black"

addr1.printInfo()
addr2.printInfo()
addr3.printInfo()

출력

설명

  1. addr3에 addr1을 대입한다.
  2. 예상은 객체 자체를 복사했을 거라고 했지만 사실은 주소를 기억하는 것
  3. 속성을 변경하면 만일 객체를 복사했다면 addr3는 변경이 안되어야 하지만 변경이 되는것을 알 수 있다.
  4. 객체는 메모리에 주소를 저장하기 때문이다.
  5. 해당 내용은 얕은복사라고도 한다.

얕은 복사

  • 객체 주소를 복사하는 것으로 객체 자체가 복사되지는 않는다.

깊은 복사

  • 객체 자체를 복사하는 것으로 또 하나의 객체가 만들어 진다.
class TemCls:

    def __init__(self,n,s):
        self.number = n
        self.str = s

    def printClsInfo(self):
        print(f"self.number : {self.number}")
        print(f"self.str : {self.str}")
import copy

tc1 = TemCls(10,"Hello")
tc2 = copy.copy(tc1)

tc1.printClsInfo()
tc2.printClsInfo()

print("깊은복사 ------")
tc1.number = 20
tc1.str = "bye"

tc1.printClsInfo()
tc2.printClsInfo()

출력

설명

  1. 얕은 복사는 메모리에 주소를 가져와 사용
  2. 깊은 복사는 객체 자체를 복사하여 새로운 주소를 할당받는것이다.
  3. 사용하기위해서는 import copy 외부모듈을 불러와 copy.copy()를 사용하여 객체를 복사
  4. tc1에 속성을 변경하고 확인 하니 얕은복사와 다르게 tc1만 변경된 것을 확인할 수 있다.

3. 클래스 상속


[출처이미지]제로베이스 취업스쿨

파이썬

class NormalCar:
    def drive(self):
        print("[NormalCar] drivee() called!!")
    def back(self):
        print("[NormalCar] back() called!!")

class TurboCar(NormalCar):
    def turbo(self):
        print("[TurboCar] turbo() called!!")

myTurboCar = TurboCar()

myTurboCar.turbo()
myTurboCar.drive()
myTurboCar.back()

출력

설명

  1. 클래스를 두개 만든다.
  2. 함수를 생성한다.
  3. 두번 째 클래스에 첫번째 클래스를 상속한다.
  4. 두번째 클래스 변수에 담아 사용한다.
profile
데이터분석공부중

0개의 댓글