Codeit Sprint/Weekly_Paper

위클리 페이퍼 #4 - 클래스(Class), 인스턴스(Instance), 정적메소드

ko_sick 2024. 7. 11. 01:17

금주의 위클리 페이퍼의 주제는 2가지이다.

 

1) 클래스와 인스턴스에 대해 설명해주세요.

2) 정적 메소드는 무엇이고, 어떻게 호출하나요?

 

클래스(Class)와 인스턴스(Instance)

 

객체지향의 개념이 나타나기 이전의 프로그래밍의 방법은, 프로그램이 일을 하고나면, 다음엔 어떤일을 하라는 식으로 컴퓨터가 해야할 일에 대해서 알려주어야 했지만 객체지향 프로그래밍(Object-Oriented Programming)의 등장으로 보다 좋은 프로그램을 만들어 낼 수 있었다. 

 

객체에 담겨져있는 두 종류의 정보

  • 속성(attributes) : 상태(state)를 나타내는 데이터
  • 매서드(method) : 행동(behavior)을 나타내는 데이터

객체지향 프로그래밍이란, 프로그램을 수 많은 객체(object)라는 기본 단위들로 나누고 이들의 상호작용으로 서술하는 방법을 뜻한다. 객체란 두 종류의 정보를 답는 집합체를 뜻한다. 상태 데이터와 행동 데이터를 묶은 복잡적인 자료구조가 객체이다. 하나의 모델이 되는 청사진(blueprint, 설계도)를 만들고, 그 설계도를 바탕으로한 객체(object)를 만드는 프로그래밍 패턴이다. 모델이 되는 청사진클래스(Class), 청사진을 토대로 만들어진 객체를 해당 클래스의 인스턴스(instance)라고 한다.

 

간단하게 구조를 나타내면 아래와 같다.

class Say:   # 말하기를 정의
	def hello(self, name):   # 인사하기 method
    		return (f"hello my name is {name}")

codeit = Say() ## codeit(instance)을 만들어 class say를 이용해서
codeit.hello()

 

클래스를 만들때는 class 클래스이름:  형식으로 구성해서 클래스의 성질과 행동에 대해서 지정을 해주면 된다. 클래스의 행동에 해당하는 부분은 클래스 내부에 정의된 함수이며, 이를 메서드(method)라고 부른다. 클래스를 토대로 만들어진 객체인 codeit을 만들었습니다.
인스턴스명 = 클래스()의 방식으로 인스턴스를 할당해줄수 있다. 클래스의 내부에 있는 메서드를 사용하기 위해서는 인스턴스.메서드이름()의 형식으로 사용하면 된다.

 

 

정적 메소드(Static Method)

정적 메소드란 클래스의 메소드를 사용할 때 인스턴스를 통해서 호출했지만, 인스턴스를 통하지 않고 클래스에서 바로 호출 하는 방법이다. 

Class 클래스이름:
    @staticmethod
    def 메소드이름(매개변수1, 매개변수2):
    	코드

정적 메소드는 메소드위에 @staticmethod를 붙여서 사용하고, 이때 매개변수에 self를 지정하지 않는다. "@"는 데코레이터라고 불리며 메소드의 추가 기능을 구현할 때 사용 된다.

 

간단히 덧셈과 곱셈을하는 계산기 class를 구성해보았습니다.

class Calc:
    @staticmethod
    def add(a, b):
    	print(a + b)
        
    @staticmethod
    def mul(a, b):
    	print(a * b)
        
Calc.add(10, 20) # 클래스에서 바로 메소드 호출
Calc.mul(10, 20) # 클래스에서 바로 메소드 호출

Calc 클래스에서 @staticmethod를 이용해 add와 mul 매서드를 만들어 냈고, self를 받지 않으므로 인스턴스 속성에는 접근할 수 없다. 어떠한 상황에서 메소드를 만들어 내냐면, 메소드의 실행이 외부 상태에 영향을 끼치지 않는 순수 함수(pure function)을 만들 때 사용 된다. 입력값이 같으면 언제나 같은 출력값을 반환하는, 즉 인스턴스의 상태를 변화시키지 않는 메서드를 만들 때 사용된다.

 

 

 

 

 

출처 : https://wikidocs.net/85


출처 : https://dojang.io/mod/page/view.php?id=2379