정적변수(static variable),정적메소드(static mathod)는 특정 오브젝트가 아니라,클래스에 속하는 멤버변수나 메소드를 말한다.
■사용방법
static 형 변수이름
예를 들어
class Person
{
public string name; // 이름.개인별로 다르기 때문에 인스턴스변수로.
public int age; // 나이.개인별로 다르기 때문에 인스턴스변수로.
public static string scientificName;
// 학명. 사람마다가 아니라 분류에 의해 정해지는 것이라, 정적변수로.
}
특정오브젝트는 사람마다,클래스는 인간이라는 종별,자체가 되는것이라,이름과 나이는 사람마다 달라지지만,인간이라는 종의 학명[Homo sapiens]은 공통이다.
그래서, 사람이라는 클래스를 작성했을때 name이나 age라는 멤버변수를 작성했을 경우에는 인스턴스변수로,scientficName 이라는 클래스전체에 공유되어야 하는 변수를 만들경우에는 정적변수로 해야한다.
정적변수는 클래스에 속해있는 값이라, 값을 참조할때는 아래와 같다.
Person p = new Person()
p.name = "이호리"; // 인스턴스변수는 [인스턴스명.변수명]으로 참조한다.
p.age = 18;
Person.scientificName = "Homo sapiens"; // 정적변수와 [클래스명.변수명]으로 참조한다.
또, 정적변수,정적메소드는 수학함수나수학정의등의 인스턴스가 필요없는 함수를 정의하는 경우에도 사용된다.
using System;
class Math
{
// sin x 를 구하는 함수
static double Sin(double x)
{
double xx = -x * x;
double fact = 1;
double sin = x;
for(int i=0; i<100; ++i)
{
fact *= i; ++i; fact *= i; ++i;
x *= xx;
sin += x / fact;
}
return sin;
}
}
class StaticSample
{
static void Main()
{
Console.Write(Math.Sin(1));
}
}
표준라이브러리의 Math.Sin 이나 Console.Write 등은 정적메소드이다.
■정적클래스
Ver.2.0
C# 2.0에서는 클래스를 정의할때 static을 부치는 것으로 정적멤버에서만 정의되지 않았던 클래스를 작성을 할 수 있다.
static class Math
{
// double x; 등의 static 이 아닌 변수나 메소드의 정의는 할 수 없다.
// sin x 을 구하는 함수.
static double Sin(double x)
{
double xx = -x * x;
double fact = 1;
double sin = x;
for(int i=0; i<100; ++i)
{
fact *= i; ++i; fact *= i; ++i;
x *= xx;
sin += x / fact;
}
return sin;
}
}
참조
http://ufcpp.net/study/csharp/oo_static.html
[출처] 정적변수,정적메소드|작성자 롱박
'프로그래밍 > C#.net' 카테고리의 다른 글
virtual method (0) | 2009.08.24 |
---|---|
계승 (0) | 2009.08.24 |
프로퍼티 (0) | 2009.08.24 |
은폐 (0) | 2009.08.24 |
Constructor (0) | 2009.08.24 |
댓글