자료구조(Python)

BY Jung·2022년 1월 27일
0
post-thumbnail

사용자 정의 함수

  • 인수(argument): 함수를 호출할 때 전달되는 필요한 정보

  • 매개변수(parameter): 함수 헤더에 정의된, 함수 호출 시 인수가 전달되는 곳

  • 디폴트 인수(default argument): 함수 호출 시 인수가 생략되면 기본 값으로 사용되는 인수

  • 키워드 인수(keyword argument): 매개변수 이름에 직접 값을 지정하여 호출하는 인수.

    • 키워드 인수를 사용하면 함수 호출 시 인수의 순서를 변경 가능하다.

✔️ 변수의 범위

  1. 내장 범위(built-in scope) : 언어의 일부로 정의된 변수와 리터럴들. 프로그램의 어디에서나 쓸 수 있다.
  2. 전역 범위(global scope) : 소스 파일 맨 위(함수나 클래스 밖)에서 생성된 변수. 프로그램 어디에서나 쓸 수 있다.
  3. 지역 범위(local scope) : 함수나 클래스의 멤버함수(메소드) 안에서 생성된 변수. 그 안에서만 사용. ex) 함수의 매개변수
  4. 인스턴스 범위(instance scope) : 클래스의 데이터 멤버로 생성된 변수들. 해당 클래스 내 다른 함수들에서 쓸 수 있다.

✔️ 모듈

from module_A import * → 모듈 A의 모든 식별자를 사용
from module_B import a, b → 모듈 B의 a, b 식별자를 사용
많은 모듈을 사용할 경우 식별자가 중복될 수 있으므로 식별자는 가급적 선택적으로 사용하자.

✔️ 클래스

클래스실체화(instance)한 것이 객체(object)이다.
클래스의 속성(attribute)메소드(method)에 의해 정의된다
* 메소드: 클래스 안의 함수를 지칭

  • __init__ 메소드(생성자)
    • 클래스가 실체화될 때 자동으로 호출된다.
    • 객체에서 사용할 데이터를 정의하고 초기화하는 역할.
    • 모든 메소드는 첫 번째 인수(argument)로 항상 self를 받아주며, 여기서의 self는 실체화된 객체(object)를 가리킨다.
     class Car:
         def __init__(self, color, speed=0):    #생성자 메소드
              self.color = color		   #데이터 멤버 color 정의 및 초기화
              self.speed = speed		   #데이터 멤버 speed 정의 및 초기화
    • self가 붙지 않은 모든 변수들은 멤버 변수가 아닌 지역변수 혹은 전역변수이다.
  • 객체 생성하기
    car1 = Car('black', 0)	# 검정색, 속도 0
    car2 = Car('red', 120)	# 빨간색, 속도 120
    car3 = Car('green')		# 초록색, 속도 0(디폴트 인수)
  • 객체에 대한 연산
    class Car:
        # ...
        def speedUp(self) : self.speed += 10
        def speedDown(self) : self.speed -= 10
    car2.speedDown()	#car2 속도 10 감속
    car3.speedUp()		#car3 속도 10 가속

연산자 중복(operator overloading)

  • 사용자가 의한 클래스의 객체들에게 표준 연산자를 적용 가능하다
    def isEqual(self, carB):
        if self.color == carB.color:
            return True
        else: return False
    car4 = Car('red')
    print(car1.isEqual(car4))	# False
    print(car2.isEqual(car4))	# True
  • 자동차 클래스 내에서 __eq__라는 메소드를 정의하면 ==연산자로 바로 비교 가능함
    def __eq__(self, carB):
        return self.color == carB.color
  • Car 객체 문자열(str)로 변환하기 : __str__메소드
    def __str__(self):
        return "color = %s, speed = %d" % (self.color, self.speed)
    print("[car3]", car3)		# [car3] color = green, speed = 0

상속

기존에 정의된 클래스로부터 멤버를 추가해 새로운 클래스를 간편하게 만드는 것을 지칭
기본(base) 클래스 : 부모 클래스
파생(derived) 클래스 : 자식 클래스

  • 클래스의 상속
    • Car 클래스를 상속하는 SuperCar 클래스
    • color와 speed는 다시 정의하지 않음 (self.color, self.speed는 부모 클래스의 생성자 호출로 해결)
    • 자식 클래스에서 부모를 부르는 함수 super()
      class SuperCar(Car):	#Car 상속
        def __init__(self, color, speed=0, Turbo=True):
            super().__init__(color, speed)    #부모(Car) 클래스의 생성자 호출
            self.Turbo = Turbo    #터보모드 변수 생성 및 초기화
  • 자식 클래스 객체 생성하기
    s1 = SuperCar("Gold", 0, True)	#골드, 속도 0, 터보모드 on
    s2 = SuperCar("White", 0, False)	#흰색, 속도 0, 터보모드 off
  • 메소드의 재정의(overriding)
    def setTurbo(self, Turbo=True):    #터보모드를 on/off하는 메소드
        self.Turbo= Turbo
    • 터보 모드가 on이면 급속히 가속(+50)한다고 가정하면, 부모의 speedUp()함수는 터보 모드가 꺼진 경우로 볼 수 있다.
      def speedUp(self):	#SuperCar의 SpeedUp 메소드 재정의
          if self.Turbo:
              self.speed += 50
          else:
              super().speedUp()  #일반 자동차의 가속 메소드
    • speedUp() 함수는 부모 클래스에 이미 정의되어 있지만, 자식에서 내용을 변경해 다시 재정의(overriding)하였다.
profile
Slow and steady wins the race

0개의 댓글