Static

tacoyaggi ㅣ 2024. 2. 2. 09:49

Static Method

  • 일반적인 메서드는 클래스의 인스턴스를 선언하고 해당 인스턴스로 부터 호출 당함.
  • static 을 사용하면 인스턴스에서 호출하는 것이 아닌 클래스 자체에서 호출이 가능함. (이게 가장 큰 차이)
string name = Man.GetName("타코");

Man man = new Man();
int age = man.GetAge(31);


public class Man
{
    // static 메서드
    public static string GetName(string name)
    {
        return name;
    }
    // 일반 메서드
    public int GetAge(int age)
    {
        return age;
    }
}

Static Property

  • 정적 메서드와 개념은 동일함. 클래스 단계 에서 바로 호출 가능함.
string name = Man.Name;

Man man = new Man();
int age = man.Age;


public class Man
{

    // 정적 속성
    public static string Name { get; set; }
    // 일반 속성
    public int Age { get; set; }

}

Static Class

  • 정적 클래스는 인스턴스화 할 수 없음.
  • 주로 유틸리티 함수에 많이 사용함. (나 같은 경우는 암호화, 복호화를 정적 클래스로 사용함.)
  • 동적이지 않은 즉 변하지 않는 데이터에 사용함.
  • 기존 static methodstatic property 뭐가 다른거지? 차이점은 정적 클래스 안에서는 정적인 메서드와 속성만 존재할 수 있다.
  • 정적 클래스안에서는 모든 것이 정적으로 이루어져야 함.
string name = Man.GetName("타코");

string name2 = Man.Name;

public static class Man
{

    public static string Name { get; set; }

    public static string GetName(string name)
    {
        return name;
    }
}

Static Field

  • 정적 필드도 개념은 동일함.
string name = Man.Name;

Man man = new Man();
int age = man.Age;

public class Man
{
    public static string Name = "타코";
    public int Age = 31;
}

Static 사용이유

  • 공유할 데이터가 있을 경우 사용함. 정적 필드 or 정적 속성을 통해 공유된 데이터를 유지하고 어느곳에서든 이 데이터에 접근할 수 있을 때 사용함.
  • 아래 예제에서 공유된 데이터는 정적 필드로 선언된 age임.
  • 각각의 Children , Adult 클래스에서 정적 필드를 공유해서 사용할 때 유용함.
Adult adult = new Adult();
int age = adult.PlusAge(); // 31

Children children = new Children();
int childrenAge = children.PlusAge(); // 32

public class Children
{
    public int PlusAge()
    {
        int myAge = Man.age++;

        return myAge;
    }
}

public class Adult
{
    public int PlusAge()
    {
        int myAge = Man.age++;

        return myAge;
    }
}

public class Man
{
    public static int age = 31;
}

결론

  • 공유해야할 필드 or 속성이 있다면 static 을 사용하자!
  • 정적인 데이터를 return 해주는 메서드는 static 을 사용하자!

'SW 기능 > C#' 카테고리의 다른 글

this  (0) 2024.02.02
Struct  (0) 2024.02.02
Serialization  (0) 2024.02.02
Reflection  (0) 2024.02.02
OverLoading, Override  (0) 2024.02.02