[C#] 정적 속성 static
2023. 8. 19. 17:04ㆍ공부/C#
static이란?
static은 정적, 움직이지 않는다는 뜻을 가진다. C#에서 말하는 static이란 메소드나 필드가 클래스의 인스턴스가 아닌 클래스 자체에 소속되도록 지정하는 한정자를 의미한다. 클래스의 인스턴스는 여러 개가 존재할 수 있지만 클래스는 단 한가지만이 존재한다. 따라서 클래스 자체에 소속된다면 그것은 프로그램 내에서 유일하게 존재한다는 뜻이 된다.
=> static 한정자를 사용한 대상은 프로그램 내에서 단 한 가지로만 존재할 수 있다.
예시를 살펴보자.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Csharp_Project
{
class CountA
{
public static int Count = 0;
}
class CountB
{
public CountB()
{
CountA.Count++;
//생성자
}
}
class CountC
{
public CountC()
{
CountA.Count++;
//생성자
}
}
class MainApp
{
static void Main()
{
Console.WriteLine($"CountA의 Count: {CountA.Count}");
new CountB(); //생성자
new CountC(); //생성자
new CountB(); //생성자
new CountC(); //생성자
Console.WriteLine($"CountA의 Count: {CountA.Count}");
}
}
}
<실행 결과>
CountB, CountC의 객체를 여러번 생성해도 static으로 선언한 CountA.Count는 단 하나밖에 존재하지 않는다.
이처럼 static 필드는 프로그램 내에서 단 하나만 존재하기 때문에 프로그램 전체에 걸쳐 공유해야하는 변수는 static을 사용하여 선언하면 된다. (게임이라면 플레이어의 점수, 생명력 등)
다음 예시를 살펴보자.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Csharp_Project
{
class ClassA
{
public static void MethodA()
{
Console.WriteLine("스태틱 메소드 호출");
}
public void MethodB()
{
Console.WriteLine("일반 메소드 호출");
}
}
class MainApp
{
public static void Main()
{
ClassA.MethodA(); //스태틱 메소드 호출
ClassA classA = new ClassA();
classA.MethodB(); //일반 메소드 호출
}
}
}
<실행결과>
static으로 선언한 정적 메소드는 인스턴스의 생성 없이 클래스의 이름만으로 바로 호출할 수 있다. (static으로 선언되었다면 해당 메소드는 프로그램 내에서 단 하나만 존재하기 때문)
인스턴스 내부에서 데이터를 이용해야한다면 인스턴스 메소드(static이 아닌 메소드)를 이용하고 인스턴스 내부의 데이터를 이용할 일이 없다면 인스턴스를 생성할 필요가 없는 정적 메소드 (static 메소드)를 선언하는 것이 좋다.
'공부 > C#' 카테고리의 다른 글
[C#] 얕은복사 & 깊은복사 (0) | 2023.08.21 |
---|---|
[C#] 클래스, 생성자, 종료자 (0) | 2023.08.12 |
[C#] 가변 개수의 인수 params (0) | 2023.08.12 |
[C#] 출력 전용 매개변수 (ref, out) (0) | 2023.08.08 |
[C#] Call by reference (참조에 의한 매개변수 전달) (0) | 2023.08.08 |