클래스 vs. 인스턴스 속성

Python 객체 지향 프로그래밍 입문

George Boorman

Curriculum Manager, DataCamp

OOP 핵심 원칙

캡슐화:

  • 데이터와 메서드 묶음

상속:

  • 기존 코드 기능 확장

다형성:

  • 통일된 인터페이스 제공
Python 객체 지향 프로그래밍 입문

인스턴스 수준 속성

class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

emp1 = Employee("Teo Mille", 50000) 
emp2 = Employee("Marta Popov", 65000)
  • namesalary 값은 각 객체에 고유합니다
  • self는 객체에 할당합니다
Python 객체 지향 프로그래밍 입문

클래스 수준 속성

  • 클래스의 모든 인스턴스가 공유하는 데이터

 

  • class 본문에 클래스 속성을 정의합니다

 

  • 클래스 내부의 "전역 변수"
Python 객체 지향 프로그래밍 입문

클래스 수준 속성 구현

class Employee:
    # 클래스 속성 정의
    # self. 문법 없음
    MIN_SALARY = 30000 

def __init__(self, name, salary): self.name = name # 클래스 이름으로 # 클래스 속성 접근 if salary >= Employee.MIN_SALARY: self.salary = salary
else: self.salary = Employee.MIN_SALARY
  • MIN_SALARY는 모든 인스턴스가 공유합니다
  • 클래스 속성 정의에는 self를 쓰지 않습니다
  • 관례상 대문자 사용
  • 클래스 속성 값 접근은 ClassName.ATTR_NAME 사용
Python 객체 지향 프로그래밍 입문

클래스 수준 속성

class Employee:
    # 클래스 속성 정의
    MIN_SALARY = 30000    

def __init__(self, name, salary): self.name = name # 클래스 이름으로 # 클래스 속성 접근 if salary >= Employee.MIN_SALARY: self.salary = salary else: self.salary = Employee.MIN_SALARY
emp1 = Employee("John", 40000)
print(emp1.MIN_SALARY)
30000
emp2 = Employee("Jane", 60000)
print(emp2.MIN_SALARY)
30000
Python 객체 지향 프로그래밍 입문

클래스 수준 속성 수정

emp1 = Employee("John", 40000)
emp2 = Employee("Jane", 60000)

# emp1의 MIN_SALARY 업데이트 emp1.MIN_SALARY = 50000
# 두 직원의 MIN_SALARY 출력 print(emp1.MIN_SALARY) print(emp2.MIN_SALARY)
50000
30000
Python 객체 지향 프로그래밍 입문

클래스 수준 속성 수정

  • MIN_SALARY는 클래스 정의에서 생성됩니다

 

  • 객체의 MIN_SALARY를 업데이트해도 클래스 정의의 값은 바뀌지 않습니다

 

  • 보안 — 소프트웨어 변경 방지!
Python 객체 지향 프로그래밍 입문

왜 클래스 속성을 쓰나요?

클래스 관련 전역 상수

 

  • 속성의 최소·최대값
    • 잘못된 데이터 방지
  • 자주 쓰는 값과 상수, 예: Database 클래스의 host, port
    • 객체 생성 시 반복 제거
Python 객체 지향 프로그래밍 입문

연습해 봅시다!

Python 객체 지향 프로그래밍 입문

Preparing Video For Download...