05의 개발 계발

[TIL] 230406 메소드(method)의 종류 (인스턴스 / 정적 / 클래스) 본문

TIL

[TIL] 230406 메소드(method)의 종류 (인스턴스 / 정적 / 클래스)

생각하는 코댕이 2023. 4. 6. 21:29
728x90

TIL 학습목표

  • Class의 메소드의 종류를 안다. (인스턴스 / 정적 / 클래스) 메소드
  • 각 메소드의 차이점을 안다.
  • 각 메소드의 사용법과 용도를 안다.

1) 문제점 (Problem)

알고리즘 문제를 풀다, 흠터레스팅 코드에서 str.maketrans() 을 사용하는 것을 보고 추가 학습을 진행하다가

메소드에도 종류가 있음을 알게되었다.

배운 부분을 정리해보도록 하자. 


2) 학습한 내용 (Study)

▶메소드의 종류

메소드의 종류 설명 예시
인스턴스 메소드 (Instence Method) 인스턴스로 호출하는 메소드 .translate()
정적 메소드 (Static Method) 클래스로 호출하는 메소드로, 속성에 관여하지 않고 함수 자체의 기능만을 수행한다. str.maketrans()
클래스 메소드 (Class Method) 클래스로 호출하는 메소드로, 클래스의 속성에 접근 가능한 메소드 bytes.fromhex()

▶각 메소드의 차이점

메소드의 종류 인자의 차이    
인스턴스 메소드 (Instence Method) 인자로 self를 받는다 self. 으로 인스턴스의 속성값에 관여할 수 있다
정적 메소드 (Static Method) 인자로 self를 받지않는다 클래스와 인스턴스의 속성값에 관여하지 않는다
클래스 메소드 (Class Method) 인자로 cls를 받는다 cls. 으로 클래스의 속성값에 관여할 수 있다

▶각 메소드의 사용법과 용도

1. 인스턴스 메소드

[사용법]  <인스턴스>.<메소드>(인자1,인자2, ...)

[용도]

- 인스턴스의 속성 값에 관여해야 할 때 사용
- 인스턴스의 내용을 변경해야 할 때 사용
- 인스턴의에 변화를 줄 때, 즉 부수 효과(side effect)가 필요할 때 사용

2. 정적 메소드

[사용법]  <클래스>.<정적메소드>(인자1,인자2, ...)

[용도]

- 인스턴스 속성, 인스턴스 메서드가 필요 없을 때 사용
- 메서드의 실행이 외부 상태에 영향을 끼치지 않는 순수 함수(pure function)를 만들 때 사용
- 순수 함수는 부수 효과(side effect)가 없고 입력 값이 같으면 언제나 같은 출력 값을 반환한다.
- 즉, 정적 메서드는 인스턴스의 상태를 변화시키지 않는 메서드를 만들 때 사용
- 인스턴스 내용과는 상관없이 결과만 구하면 될 때 사용

 


3. 클래스 메소드

[사용법]  <클래스>.<클래스메소드>()

*cls → class의 약자

[용도]

- 메서드 안에서 클래스 속성, 클래스 메서드에 접근해야 할 때 사용
- 특히, cls를 사용하면 메서드 안에서 현재 클래스의 인스턴스를 만드는게 가능하다.

즉, cls는 클래스이므로 cls() Person()과 같다!


3) 시사점 (implication)

메소드의 구분 필요성

메소드는 (인스턴스메소드,정적메소드,클래스메소드) 총3가지로 구분되며, 다음과 같다.

1 - 인스턴스 메소드 : 일반적으로 인스턴스를 생성하여 인스턴스에 사용하는 메소드
2 - 정적 메소드 : self를 인자로 받지 않기에 인스턴스의 속성값에 관여하지 않고 일반 함수처럼 사용가능한 메소드
3 - 클래스 메소드 : 정적 메소드와 유사하지만, cls를 인자로 받으며 클래스의 속성값에 관여할 수 있는 메소드
 

파이썬 코딩 도장: 34.1 클래스와 메서드 만들기

Unit 34. 클래스 사용하기 ​클래스는 객체를 표현하기 위한 문법입니다. 예를 들어 게임을 만든다고 하면 기사, 마법사, 궁수, 사제 등 직업별로 클래스를 만들어서 표현할 수 있습니다. ▼ 그림 3

dojang.io

 

파이썬 코딩 도장: 35.2 정적 메서드 사용하기

지금까지 클래스의 메서드를 사용할 때 인스턴스를 통해서 호출했습니다. 이번에는 인스턴스를 통하지 않고 클래스에서 바로 호출할 수 있는 정적 메서드와 클래스 메서드에 대해 알아보겠습

dojang.io

 

파이썬 코딩 도장: 35.3 클래스 메서드 사용하기

이번에는 정적 메서드와 비슷하지만 약간의 차이점이 있는 클래스 메서드를 사용해보겠습니다. 클래스 메서드는 다음과 같이 메서드 위에 @classmethod를 붙입니다. 이때 클래스 메서드는 첫 번째

dojang.io

현재 나의 수준에서 주로 사용하는 메소드는, 인스턴스 메소드와 정적 메소드 이다.
지금의 단계에선 사용법만 안다면 개념적으로 나누는 것이 코딩과정에서 유의미하지는 않다.

하지만 코드리뷰 등 소통을 할 때에, 메소드의 종류와 차이점을 모른다면 소통에 어려움이 있을 것 같다.
또한 각 메소드가 구분된다는 것은, 각 메소드의 특이점들이 코딩과정에서 필요했기에 생겼다는 것을 의미한다.
실제로 클래스 메소드를 학습하면서 클래스 자체의 속성값에 관여를 한다면, 인스턴스와 상속받는 클래스에게도 관여를 할 수 있으니 이를 활용할 수 있다는 생각이 들었다.

아직 사용하지는 않았지만, 알고 있는 것 만으로도 코딩 시야를 넓혀주는 것 같다.

따라서, 클래스를 사용한다면 메소드의 구분이 필요하다고 생각한다.


4) 알게 된 점  (Learnd)

메소드의 종류와 각 차이점, 사용법을 알게되었다.

아직 사용 하지 않은 기능이더라도 시야를 넓혀준다는 점에선 알아두는 편이 확실히 도움이 되는 것 같다.

초보라고 BFS 만 할 것이 아니라, DFS 도 필요한 것 같다.

*BFS DFS가 궁금하다면 참고

 




 

728x90