(중급) 객체(Object), 클래스(Class), 복사(Copy)

임경민·2023년 9월 18일
1
post-thumbnail
post-custom-banner

Summarization


  • 객체(Object)는 속성과 기능으로 구분되며, 코드 재사용 및 모듈화에 좋다.
  • 클래스(Class) class 키워드와 속성(변수), 기능(함수)를 이용해서 만든다.
  • 변수는 객체의 메모리 주소를 저장하고 이를 통해 객체를 참조한다.
  • 얕은 변수는 객체 주소를 복사하는 것으로, 객체 자체가 복사되지 않는다. 객체 자체를 복사하는 것은 깊은 복사라고 한다.

Contents

  • 객체지향 프로그래밍은 객체(Object)를 이용한 프로그램으로, 객체는 속성과 기능으로 구성된다.
  • 객체 사용의 장점
    • 코드 재사용 및 모듈화에 좋다.
  • 클래스(Class)
    클래스(Class)는 class 키워드와 속성(변수), 기능(함수)를 이용해서 만든다.
class Car:

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

    def doStop(self):
        print('Stop!')

    def doStart(self):
        print('Go!')

    def printCarinfo(self):
        print(f'Self.color : {self.color}')
        print(f'Self.legnth : {self.length}')

car1 = Car('red', 200) # Object1
car2 = Car('blue', 300) # Object2

car1.printCarinfo()
car2.printCarinfo()
  • 객체 속성 변경
class Calculator:
    def __init__(self):
        self.num1 = 0
        self.num2 = 0
        self.result = 0

    def add(self):
        self.result = self.num1 + self.num2
        return self.result


Calculator().add()
  • 메모리(Memory)
    • 변수는 객체의 메모리 주소를 저장하고 이를 통해 객체를 참조한다.
      • 주소를 참조하기 때문에 참조변수(Reference Variable)라고도 함
    • 변수를 할당하는 경우, 새로운 메모리에 저장이 아닌, 기존 메모리에 저장된 주소를 넣어주는 것.
      • 따라서, 처음 할당된 메모리의 값(Value)를 변경하면, 변수를 할당한 메모리 내용도 함께 변경된다.
class Robot:
    def __init__(self, color, height, weight):
        self.color = color
        self.height = height
        self.weight = weight

    def printRobotInfo(self):
        print(f'color: {self.color}')
        print(f'height: {self.height}')
        print(f'weight: {self.weight}')

rb1 = Robot('red', 200, 80)
rb2 = Robot('blue', 300, 120)
rb3 = rb1

rb1.printRobotInfo()
rb3.printRobotInfo()

rb1.color = 'gray' # 기존 메모리 내용 변경
rb1.printRobotInfo()
rb3.printRobotInfo() # 할당된 변수 내용도 함께 변경
  • 복사(Copy)
    • 얕은 복사 : 객체 주소를 복사하는 것
      • 객체 자체가 복사되지 않는다.(i.e.주소만 복사 > 각 객체가 가르키는 주소가 서로 같다.)
    • 깊은 복사 : 객체 자체를 복사하는 것 > 또 하나의 객체를 생성한다.
post-custom-banner

0개의 댓글