[Python] 객체지향 프로그래밍

신은지·2024년 5월 12일
0

Python

목록 보기
9/23
post-thumbnail

객체지향 프로그래밍

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


객체 생성

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


객체 사용의 장점

코드 재사용과 모듈화에 좋아, 가장 이상적인 프로그램이 될 수 있다.


class

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



객체

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

객체 속성은 변경할 수 있다.


객체와 메모리

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


얕은 복사 VS 깊은 복사

  • 얕은 복사

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

예시 코드는 다음과 같다.

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}')
     
  tc1 = TemCls(10, 'hello')    
  tc2 = tc1
  tc1.printClsInfo()
  tc2.printClsInfo()
   
  tc1 = TemCls(2024, 'python')    
  tc2 = tc1
  tc1.printClsInfo()
  tc2.printClsInfo()

  • 깊은 복사

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

예시 코드는 다음과 같다

import copy

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}')
     
  tc1 = TemCls(10, 'hello')    
  tc2 = copy.copy(tc1)
  tc1.printClsInfo()
  tc2.printClsInfo()
   
  tc2.number = 3.14    
  tc2.str = 'Bye'
  tc1.printClsInfo()
  tc2.printClsInfo()

list의 다양한 깊은 복사 예시

import copy

scores = [9, 8, 5, 7, 6, 10]
scoresCopy = []

scoresCopy = scores
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

# for문 사용하기
for s in scores;
	scoresCopy.append(s)
    
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

# extend 사용하기
scoresCopy.extend(scores)
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

# copy() 사용하기
scoresCopy = scores.copy()
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

# list의 슬라이싱 사용하기
scoresCopy = scores[:]
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')   





* 이 글은 제로베이스 데이터 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

profile
I believe there is no best, only better

0개의 댓글