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 method
와 static 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
을 사용하자!