전역에서 쓰고싶은 함수가있는데 그 함수가 클래스에 밀접한 관계에 있고 해당 클래스 내부의 private멤버 변수에 그대로 접근하고싶을때! 정적 메소드를 사용할 수 있다.


class Color {
public:
	Color() : r(0), g(0), b(0) {}
	Color(float r, float g, float b): r(r), g(g), b(b) { }
	float GetR() {return r;}
	float GetG() {return g;}
	float GetB() {return b;}

	static Color MixColors(Color a, Color b) {
		return Color((a.r + b.r) / 2, (a.g, b.g) / 2, (a.b + b/b) / 2);
	}
private:
	float r;
	float g;
	float b;
};

int main() {
	Color blue(0,0,1);
	Color red(1, 0, 0);
	Color purple = Color::MixColors(blue, red);
}

Color purple = blue.MixColors(blue, red); 이런식으로 어떤 객체에 포함된식으로 쓸수도있음.

그냥 메소드랑 뭐가 다르냐? 그냥 메소드는 만들어진 "객체"가 수행하는일이잖아. 객체를 만들고 그 객체에 .을 찍고 뒤에 호출하는식인거지. 반면에 static메소드는 객체를 만들지 않아도 클래스를 통해 호출할수있는거구. 클래스::메소드 이렇게 호출해다가..

정적 멤버 변수

클래스에 속하는 변수! 객체가아닌..

객체들이 생성될때마다 1씩 증가하는 값을 가지도록하고싶어. 이런게 클래스에 속하는 변수로 지정하기 딱 좋은거임.

class Color {
public:
	Color() : r(0), g(0), b(0), id(idCounter++) {}
	Color(float r, float g, float b): r(r), g(g), b(b), id(idCounter++) { }
	float GetR() {return r;}
	float GetG() {return g;}
	float GetB() {return b;}

	static Color MixColors(Color a, Color b) {
		return Color((a.r + b.r) / 2, (a.g, b.g) / 2, (a.b + b/b) / 2);
	}
	static int idCounter;

private:
	float r;
	float g;
	float b;
	int id;
};

int Color::idCounter = 1;

int main() {
	Color blue(0,0,1);
	Color red(1, 0, 0);
	Color purple = Color::MixColors(blue, red);
}