C#

[C#] static 변수, static 메소드, static 클래스

정보처리마법사 2015. 6. 11. 12:05
반응형

데이터 영역

-전역변수와 static변수가 할당되는 영역.

-프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야만 메모리에서 소멸.

스택 영역

-함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역.

-함수 호출이 완료되면 소멸.

-늦게 할당된 변수의 메모리가 먼저 해제.

힙 영역

-프로그래머가 관리하는 메모리 영역.

-동적 할당으로 생성되는 메모리 영역.

 

static 변수는 객체를 선언만 해도 메모리가 할당되며 해당 객체를 계속 반복적으로 생성해도 그 메모리는 유지가 됨.

일반적인 변수들이 객체가 새로 생성될 때 메모리가 초기화 되는 것과는 다른 점.

프로그램 로딩시 단 한 번 클래스 내에 생성되고 동일 메모리를 계속 사용.

 

public class MyClass

{

private static int staticNum=0;

private int num=0;

public StaticTest()

{

staticNum++;

num++;

}

public void ShowMe()

{

Console.WriteLine("staticNum : {0},  num : {1}", staticNum, num);

}

}

public static void Main()

{

for(int i=0; i<5; i++)

{

StaticTest st = new StaticTest();

st.ShowMe();

}

}

실행결과

staticNum : 1, num : 1

staticNum : 2, num : 1

staticNum : 3, num : 1

staticNum : 4, num : 1

staticNum : 5, num : 1

static 메소드는 객체가 메모리를 할당 받기 전에 호출이 되기 때문에 객체 생성 후 메모리 할당을 받는 일반 변수에는 접근이 불가능.

인스턴스 메소드와는 달리 클래스로부터 객체를 생성하지 않고 클래스명.메소드명 형식으로 호출하는 메소드이다.

메소드 내부에서 클래스 인스턴스 객체멤버를 참조해서는 안된다.

인스턴스 객체로부터 호출될 수 없으며, 반드시 클래스명과 함께 사용된다.

 

public class MyClass

{

public int InstMethod()

{

return 1;

}

public static int StaticMethod()

{

return 1;

}

}

public class MySecondClass

{

public void StaticTest()

{

MyClass mc=new MyClass();

int a = mc.InstMethod();

 

int b = MyClass.StaticMethod();

}

}

 

static 클래스는 모든 클래스 멤버가 static 멤버로 되어 있으며, public생성자를 가질 수 없지만(객체를 생성할 수 없으므로), static 생성자를 가질 수 있다.

이 static생성자는 주로 static 필드들을 초기화 할 때 사용한다.



Fin.


잘 못 된 정보가 있으면 말씀해주세요~


1초도 걸리지 않는 공감버튼 클릭은 작성자에게 큰 힘이 됩니다.


 

반응형

'C#' 카테고리의 다른 글

[C#] 람다식 Lambda Expressions  (0) 2015.06.12
[C#] Hashtable foreach  (0) 2015.06.11
[C#] Textbox 마지막 추가 텍스트에 자동 포커스  (1) 2015.06.11
[C#] 자동구현 프로퍼티  (0) 2015.06.10
[C#] DWORD 를 C#에서 쓰기  (0) 2015.03.18