[24.06.03] 99클럽 코테 스터디 15일차 TIL - 인스턴스 메소드, 클래스 메소드, 정적 메소드

2024. 6. 3. 23:51·회고
728x90

파이썬에서 메소드는 크게 3가지 종류로 나뉜다. 

 

1. 인스턴스 메소드 (Instance Method)

  • 가장 흔히 쓰이는 인스턴스 메소드는 클래스에 아무 데코레이터(decorator)  없이 선언되며, 클래스의 인스턴스(객체)에서 호출이된다.
  • 첫 번째 매개변수(인자)로 일반적으로 self를 받으며, 이는 호출하는 인스턴스 자신을 가르킨다.
    -> self를 통해 인스턴스 속성(attribute)에 접근하거나 다른 인스턴스 메소드를 호출할 수 있다.
  • 메소드를 호출한 객체에만 영향을 준다.
  • 인스턴스를 생성한 후에 해당 인스턴스를 대상으로 호출해야한다.
class MyClass:
    def __init__(self, value):
        self.value = value
    
    def instance_method(self):
        return self.value

# 메소드 호출 전에 인스턴스를 생성해야만 한다.
obj = MyClass(10)

# 인스턴스 메소드 호출
print(obj.instance_method())  # Output: 10

 

2. 클래스 메소드 (Class Method)

  • @classmethod 데코레이터를 사용해서 클래스에 메소드를 선언하면 클래스 메소드가 된다.
  • 첫 번째 매개변수(인자)로 일반적으로 cls를 받으며, 이는 호출하는 클래스 자체를 가르킨다.
  • 클래스 객체 전체에 영향을 준다.
    -> 생성된 객체의 값을 모두 수정하는 경우에 유용
  • 클래스 속성(attribute)에 접근하거나 클래스 메소드를 호출할 수 있다.
    하지만 인스턴스 속성에 접근하거나 인스턴스 메소드는 호출할 수 없다.
class MyClass:
    # 클래스 변수
    class_variable = 0

    def __init__(self, value):
        self.value = value

    @classmethod
    def class_method(cls, increment):
        cls.class_variable += increment
        return cls.class_variable

# 클래스 메소드 호출 -> 클래스 전체 객체에 영향을 미침
print(MyClass.class_method(5))  # Output: 5
print(MyClass.class_method(3))  # Output: 8

 

3. 정적 메소드 (Static Method)

  • @staticmethod 데코레이터를 사용해서 클래스에 메소드를 선언하면 정적 메소드가 된다.
  • self나 cls와 같은 특별한 첫 번째 인자가 없다.
  • 정적 메소드는 클래스나 인스턴스와 관계없이 독립적으로 호출된다.
  • 클래스/인스턴스 속성에 접근하거나 클래스/인스턴스 메소드를 호출할 수 없다.
  • 클래스나 인스턴스 상태와 무관한 기능을 수행할 때 사용한다.
    -> 특정 클래스와 연관은 있지만 독립적으로 동작하는 유틸리티 함수를 정의할 때 유용하다.
    즉 관련이 있는 유튤리티 함수들을 하나의 클래스로 묶어두고 싶을 때 사용 가능한다.
  • '클래스명.정적메소드' 또는 '인스턴스명.정적메소드' 로 호출 가능하다. 
class Dog:
    # 클래스 변수
    species = "Husky"  

    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    @staticmethod
    def is_adult(age):
        return age >= 1

# 클래스로 정적 메소드 호출
print(Dog.is_adult(5))  # Output: True
print(Dog.is_adult(0.5))  # Output: False

# 인스턴스를 통해 정적 메소드 호출
dog1 = Dog("Buddy", 5)
print(dog1.is_adult(dog1.age))  # Output: True
728x90

'회고' 카테고리의 다른 글

[24.06.05] 99클럽 코테 스터디 17일차 TIL - 그리디 알고리즘 해결법, 증명  (1) 2024.06.05
[24.06.04] 99클럽 코테 스터디 16일차 TIL - 그리디 알고리즘  (0) 2024.06.04
[24.06.02] 99클럽 코테 스터디 14일차 TIL : Class, Attribute, self  (0) 2024.06.02
[24.06.01] 99클럽 코테 스터디 13일차 TIL - OrderedDict  (0) 2024.06.01
[24.05.31] 99클럽 코테 스터디 12일차 TIL - DefaultDict  (0) 2024.05.31
'회고' 카테고리의 다른 글
  • [24.06.05] 99클럽 코테 스터디 17일차 TIL - 그리디 알고리즘 해결법, 증명
  • [24.06.04] 99클럽 코테 스터디 16일차 TIL - 그리디 알고리즘
  • [24.06.02] 99클럽 코테 스터디 14일차 TIL : Class, Attribute, self
  • [24.06.01] 99클럽 코테 스터디 13일차 TIL - OrderedDict
bbooo
bbooo
  • bbooo
    bbooo
    bbooo
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • study (61)
        • 백준(BOJ) (34)
        • Programmers (15)
        • LeetCode (9)
      • AI (4)
        • Paper (0)
      • SSAC X IFFEL (4)
        • DeepML (1)
        • 밑바닥 부터 시작하는 딥러닝 (2)
      • 회고 (46)
      • Error (10)
      • Setting (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    python 과제 진행하기
    typeerror: sequence item 0: expected str instance int found
    sort
    Counter
    백준 2470
    파이썬 과제 진행하기
    브루트포스
    programmers 과제 진행하기
    풀이 실패
    그리디 알고리즘
    개발자 취업
    코딩테스트 준비
    set
    python 석유시추
    programmers 석유시추
    백트래킹
    sequence item 0: expected str instance int found
    Til
    백준
    항해99
    LeetCode
    vscode
    두 포인터
    프로그래머스 석유시추
    투포인터
    99클럽
    파이썬 석유시추
    파이썬
    문자열을 원하는 길이로
    docker
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
bbooo
[24.06.03] 99클럽 코테 스터디 15일차 TIL - 인스턴스 메소드, 클래스 메소드, 정적 메소드
상단으로

티스토리툴바