static
- 지금까지 프로그램 내부 공간을 빌리거나 할당하고 클래스나 배열처럼 힙공간을 빌리는 동적인 활동들을 봤다면 static은 정적 즉 고정적으로 한 공간을 할당해 놓는것이다
- 스태틱은 프로그램이 종료될 때 까지 할당 해제되지 않고 고정된 영역의 메모리 공간을 할당할 때 사용된다
- 메모리에 상주하고 할당 해제되지 않기 때문에 필요이상의 스태틱 객체를 선언하면 불필요한 메모리를 계속 사용하게 됩니다

- 스태틱으로 선언된 변수는 클래스에 귀속되어 특정 인스턴스에 속하지 않고 클래스자체에 속해 모두 공유한다
- 몬스터헌터 수레카운터나 파티 공용 퀘스트 진행도 등 이런 곳에 주로 사용된다
- 스태틱은 객체를 만들지 않고도 특정 기능 사용가능함
- 하지만 단점으로는 어디서든 접근이 가능해서 변경되면 모두 적용되어버림
다양한 스태틱 사용법
| 구분 | 설명 |
| 스태틱 필드 | 클래스 설계도를 바탕으로 모든 인스턴스가 공유하는 필드 |
| 스태틱 프로퍼티 | 보안을 위해 숨겨진 정적변수와 소통하기 위해 겟셋을 이용해 만드는 필드 |
| 스태틱 메서드 | 객체를 만들지 않고 사용 가능한 메서드 |
| 스태틱 클래스 | 인스턴스 생성 불가능, 모든 필드가 const(상수) 혹은 스태틱이여야함 |
스태틱 사용 예시
스태틱 필드 예시
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Day13
{
class Enemy
{
static int createCount; //공용 생성숫자
int id; //이건 숨겨진 필드
//이건 외부와 소통하기 위한 겟셋 , 프로퍼티
public int UniqueID
{
get { return id; }
set { id = value; }
}
}
internal class Program
{
static void Main(string[] args)
{
Enemy enemy1 = new Enemy();
//기본적으로 클래스내 필드에 접근할려면 객체를 생성해야함
Console.WriteLine(enemy1.UniqueID);
//스태틱 변수는 클래스.필드명으로 그냥 접근가능
Console.WriteLine(Enemy.createCount);
}
}
}
스태틱 클래스 예시
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Day13
{
//static 클래스는 정적 클래스
//new를 통한 동적할당이 불가능한 클래스
//정적 클래스는 객체가 딱 하나만 존재해야 할 때 유리함
//원주율,수학관련 식을 모아둔 클래스
static class myMath
{
const float PI = 3.14f; //상수도 정적 클래스에선 필드로 둘 수 있음
static int a; //정적 필드만 선언 가능
//int ab; //스태틱 아닌건 선언조차 불가능
public static int DoubleTheNumber(int toDouble)
{
return toDouble * 2;
}
}
internal class Program
{
static void Main(string[] args)
{
myMath.DoubleTheNumber(2);
}
}
}
'C# > 객체지향 활용과 응용 개발' 카테고리의 다른 글
| 메모리와 GC(가비지 컬렉터) (0) | 2025.11.15 |
|---|---|
| 추상 클래스 (0) | 2025.10.10 |
| 상속 (0) | 2025.10.10 |
| 생성자와 클래스 심화 (0) | 2025.10.05 |
| 객체지향과 클래스 (0) | 2025.10.05 |