Programming/C++

[C++] static 메소드

Winduck 2023. 1. 3. 01:27
반응형

static변수와 메소드란?


이 메소드는 클래스 내부에 선언되지만 객체(object)를 통해 호출되는 것이 아닌 클래스(class)를 통해 호출되는 변수/메소드를 정적 메소드라고 합니다.

먼저, 객체와 클래스에 대한 명확한 구분이 필요합니다.

간략히 말하면 "프로그래머가 어떠한 대상을 설명하고자 할때 class로 선언. 그리고 이 class를 통하여 프로그램은 객체를 생성"합니다.

그러나, class에는 객체에 종속되지 않는 메소드를 static 메소드로 선언합니다.

예제를 통해 static 메소드를 설명 드리겠습니다.

#include<string>


class Calculator {
public:
    Calculator(std::string ownerName): mOwnerName(ownerName) {};
    ~Calculator() {};

    static int Add(int a, int b);	// static 메소드
private:
    std::string mOwnerName;

};


int Calculator::Add(int a, int b)
{
    return a + b;
}

int main()
{
    Calculator::Add(1, 2);
}

다음은 계산기 class입니다. 프로그래머가 계산기Class를 통해 소유자의 이름을 갖도록 하였고  Add메소드를 정의하였습니다. Add메소드는 static메소드로 일반 메소드와 달리 직접 호출"Calculator::Add(1, 2);"이 가능한 것을 볼 수 있습니다.  

그러면 왜 static메소드는 필요할까요?

static 메소드 필요성


이유는 설계에 있습니다. 우리가 계산기의 기능인 Add()함수만을 사용하려고 할때 일반 메소드로 선언되었다면 우리는 계산기 객체를 만들어주어야하고 없는 계산기 소유자의 이름까지 만들어야 할 것입니다.

이렇게 되면 다른 모듈에서 기능만 사용하길 원할때 코드가 깨끗하지 않은 형태가 될 것입니다.

따라서, 이러한 상황들을 고려하여 객체에 종속되지 않는 static메소드를 만드는 것이 바람직합니다.

 

 

사용시 주의 사항


앞서 설명했듯 static 메소드는 class에 의해 접근이 가능하다. 이를 다시 말하면 static 메소드는 this(현재 객체)를 가지지 않습니다. 따라서, static 메소드에서 객체 변수에 접근자체가 불가한 것을 확인할 수 있을 것입니다.

static 메소드는 객체에 종속되지 않음을 기억합시다.

반응형