반응형
static 메서드
개념
- 인스턴스 메서드와는 달리 클래스로부터 객체를 생성하지 않음
- '클래스명.메서드명'과 같이 직접 호출하는 메서드
- 메서드 정의 시, 메서드 앞에 static 키워드 사용
- 메서드 내부에서 클래스의 인스턴스 객체 멤버를 참조해서는 안됨
- 인스턴스 객체로부터 호출될 수 없음
- 반드시 클래스명과 함께 사용
예제 - 인스턴스 메서드와 스태틱 메서드 선언
public class MyClass
{
private int val = 1;
// 인스턴스 메서드
public int InstRun()
{
return val;
}
// 정적(Static) 메서드
// 메서드 앞에 static 키워드 사용
public static int Run()
{
// 클래스의 인스턴스 객체 멤버를 참조할 수 없음 (val)
// return val; >>> Error
return 1;
}
}
예제 - 인스턴스 메서드와 스태틱 메서드 호출
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 인스턴스 메서드 호출
MyClass myClass = new MyClass();
int i = myClass.InstRun();
// 정적 메서드 호출
int j = MyClass.Run();
MessageBox.Show("i(Instance 메서드) : " + i + "\nj(Static 메서드) : " + j);
}
}
- 출력 화면
static 속성, 필드
개념
- static 메서드와 같이 '클래스명.속성명' 형식 사용
- 프로그램 실행 후 해당 클래스가 처음으로 사용될 때 한 번 초기화되어 계속 동일한 메모리를 사용
- 반대로 Non-static 필드들은 클래스 인스턴스를 생성할 때마다 메모리에 새롭게 생성
예제 - static 필드와 속성 정의
// static 필드
protected static int _id;
// static 속성
public static string Name { get; set; }
static 클래스
개념
- 모든 클래스 멤버가 static 멤버로 되어 있음
- 클래스 정의 시, 클래스명 앞에 static 키워드 사용
- public 생성자(Constructor)를 가질 수 없고 static 생성자를 가질 수 있음
- static 생성자는 주로 static 필드들을 초기화 하는데 사용
예제 - static 생성자를 통해 static 변수 초기화
public class MyClass
{
// 인스턴스 멤버 변수
private int val = 1;
// static 멤버 변수
private static int iStaticVar;
// static 생성자
static MyClass()
{
// static 멤버 변수가 아닌 멤버 변수 사용 시 에러 출력
// val = 1;
// static 멤버 변수 초기화
iStaticVar = 1;
}
// static 메서드
public static int changeStaticValue()
{
iStaticVar++;
return iStaticVar;
}
// 인스턴스 메서드
public int changeValue()
{
val++;
return val;
}
}
예제 - static 클래스에서 static 메서드 사용
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// static 클래스, 스태틱 메서드 사용
MessageBox.Show( MyClass.changeStaticValue() + "");
// static 클래스, 인스턴스 메서드 사용
// 스태틱 클래스는 인스턴스 멤버 변수를 참조 할 수 없음 : Error 출력
// MessageBox.Show( MyClass.changeValue() + "");
}
}
- 출력 화면
- 생성자를 통해 1의 값으로 초기화된 스태틱 변수
- 스태틱 메서드를 통해 +1이 된 스태틱 변수의 값 : 2
참고
반응형