Ssssong += Dev

[C++, C#] static, property 본문

개발/공부

[C++, C#] static, property

ssong_dev 2022. 4. 14. 13:28

static 정말 중요한 개념인데 별로 친하질 않아서.... 

분명 개발하면서 static 쓰면 더 효율적인 부분이 있었을 텐데도

맞아 이런 게 있었지......... 하고 방치해 둔 수준이라 다시 복습하였다.

 

static으로 선언된 객체는 선언 시 데이터 영역에 할당되어 초기화는 최초 한 번만 실행된다.

데이터 영역에 할당되었기 때문에 프로그램이 끝날 때 해제된다.

 

#include <iostream>

using namespace std;

class Door
{
public:
    static int doorNum;
    Door();
};

int Door::doorNum = 0; //초기화 시켜주기. 안하면 에러남!
Door::Door(){
    doorNum++;
}

int main()
{
    Door doorA;
    Door doorB;

    cout << "문의 갯수는 " << Door::doorNum <<"개 입니다." << endl;

    return 0;
}

C++ 에서 static 변수를 사용한 모습이다.

클래스 선언하면서 데이터 영역에 올라가고 해당 클래스 객체를 따로 만들지 않아도 사용 가능하다.

함수도 static으로 생성 가능하다. 

위 코드에서 doorNum은 doorA, doorB가 생성될 때 더해져서 Door::doorNum은 2를 출력한다.

 

 

 

 

property는 get(), set() 을 C#에서 더욱 간편하게 구현하는 기능이다. 

 

public class ObjectMove : MonoBehaviour 
{
	public static float moveSpeed;
}
public class GameManager : MonoBehaviour
{
	public int Score
	{
		set{
			score = value;
			scoreLabel.text = Score.ToString();
			if(score == 5) //프로퍼티의 set에서 조건이 생겨서 조건 만족하는 한 번만 실행될 수 있다.
            {
				ObjectMove.moveSpeed += 1;
				//moveSpeed가 static으로 선언되어 객체 생성 없이 클래스 자체에 접근해 사용할 수 있다.
             }
		}
		get{
			return score;
		}
	}
 }

 

static으로 선언한 moveSpeed를 Score 프로퍼티에서 가져왔다. 

Score = value; 이렇게 set할 수 있고 set 안의 기능들도 같이 적용된다. 점수가 변할 때 한 번 실행되어야 하는 기능들을

이렇게 프로퍼티를 사용해서 Update 내에서 켜고끄고 일일이 안해주고 훨씬 경제적으로 사용할 수 있다.