Static

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