📘프로그래밍/C#

[C#] 11 정적 멤버

bohemdev1 2024. 11. 2. 01:08

정의

 

 

정적(static) 멤버란?

클래스에는 속하지만, 객체 별로 할당되지 않고 클래스의 모든 객체가 공유하는 멤버

 

 

 

의의

 

 

정적 멤버의 경우 일반 멤버와 다르게 프로그램이 실행되는 동안 유지되므로 객체들이 프로그램 전반에 걸쳐 공유하는 주요 데이터를 관리하는 목적으로 사용합니다.

 

 

 

기능

 

 

정적 멤버의 주요 특징은 다음과 같습니다.

  • 객체를 생성하지 않고 클래스를 직접 참조하여 접근합니다.
  • 프로그램이 시작할 때 메모리가 확보돼서 프로그램이 종료될 때까지 유지됩니다.
  • 클래스 소속이지만 메모리를 클래스와 별도로 생성합니다.

 

 

선언 방법

 

정적 멤버 선언은 일반적인 멤버 변수 및 함수 선언 앞에 static 키워드를 추가합니다.

static datatype variable-name;					// 정적 멤버 변수의 선언
static datatype function-name ( datatype variable-name, ··· );	// 정적 멤버 함수의 선언

 

 

 

접근 방법

 

정적 멤버는 객체를 생성하지 않으므로 해당 클래스를 직접 참조하여 접근합니다.

class-name.variable-name	// 정적 멤버 변수 호출
class-name.function-name ()	// 정적 멤버 함수 호출

 

 

 

사용 예시

 

 

다음은 게임에 등장하는 Hero 의 이름 및 유저 점수를 저장하는 Hero 클래스 예시입니다.

 

#1 클래스 및 정적 멤버 선언

public class Hero
{
    public string m_Name = "";			// 인스턴스 멤버 변수
    public static int s_UserPoint = 0;		// 정적 멤버 변수

    public void AddUserPoint(int a_Point)	// 인스턴스 멤버 메서드
    {
    	m_Name = "아이언맨";
        s_UserPoint += a_Point;
    }

    public static void PrintUserPoint()		// 정적 멤버 메서드
    {
        //m_Name = "아이언맨";
        Debug.Log($"사용자점수({s_UserPoint})");
    }
}

 

일반 멤버 메서드 AddUserPoint 내에서는 일반 멤버 변수 m_Name 을 사용할 수 있으나 정적 멤버 메서드 PrintUserPoint 내에서는 사용할 수 없습니다. 그 이유는 m_NameHero 클래스 인스턴스를 생성해야만 사용 가능한 일반 멤버 변수이고 PrintUserPoint 는 객체를 생성하지 않는 정적 멤버 메서드 때문입니다.

 

정리하면, 일반 멤버 메서드 내부에서는 정적 멤버 사용이 가능하나 정적 멤버 메서드 내부에서는 일반 멤버를 사용할 수 없습니다.

 

 

#2 정적 멤버 호출

void Start()
{
	Hero.PrintUserPoint();		// 정적 멤버 메서드 사용
	Hero.s_UserPoint = 100;		// 정적 멤버 변수 사용
	
	Hero A = new Hero();		// 인스턴스 생성
	A.AddUserPoint(200);		// 일반 멤버 메서드 사용
	
	Hero.PrintUserPoint();		// 정적 멤버 메서드 사용
}

/*
사용자점수(0)
사용자점수(300)
*/

 

 

 


 

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

'📘프로그래밍 > C#' 카테고리의 다른 글

[C#] 13 List  (3) 2024.11.16
[C#] 12 네임스페이스  (0) 2024.11.02
[C#] 10 REF / OUT  (1) 2024.11.01
[C#] 09 생성자 / 소멸자  (2) 2024.10.31
[C#] 08 클래스  (1) 2024.10.30