- 사전적 정의 : '정적' = 움직이지 않는다
-> 메소드/필드(=변수)가 클래스의 인스턴스가 아닌, 클래스 자체에 소속되도록 지정하는 한정자
=> 정적 메소드 : 클래스의 인스턴스를 만들지 않고도 호출 가능
- static으로 한정한 필드 : 클래스에 소속 = 인스턴스를 만들지 않고, 필드(변수)에 직접 접근
- static으로 한정하지 않은 필드 : 자동으로 인스턴스에 소속 = 인스턴스를 만들어, 인스턴스에 접근
- 한 프로그램 : 인스턴스 - 여러 개 존재 가능, 클래스 - 단 하나만 존재
-> 어떤 필드가 클래스에 소속된다 = 그 필드가 프로그램 전체에서 유일하게 존재
=> 정적 필드의 이득 : 프로그램 전체에 걸쳐 공유해야 하는 변수 선언할 때!
cf. 비정적 메소드 = 인스턴스에 소속 -> 인스턴스 메소드 : 인스턴스를 생성해야만 호출할 수 있는 메소드
+)
인스턴스 메소드 : 객체 내부 데이터를 이용해야 하는 경우
정적 메소드 : 내부 데이터를 이용할 일이 없는 경우
using System;
class Global
{
public static int Count = 0; // 정적 필드 Count 선언
}
class ClassA
{
public ClassA()
{
Global.Count++; // Global 클래스의 Count 필드 ++ (정적 메소드 = 인스턴스 만들지 않고, 바로 호출 가능)
}
}
class ClassB
{
public ClassB()
{
Global.Count++; // // Global 클래스의 Count 필드 ++
}
}
class ClassC
{
public int InstanceCount = 0; // 인스턴스 필드
public void InstanceMethod() // 인스턴스 메소드
{
InstanceCount++;
}
}
class MainApp
{
static void Main()
{
// 정적 메소드 : 클래스의 인스턴스 생성하지 않아도 호출 가능
Console.WriteLine($"Global.Count : {Global.Count}"); // 0
new ClassA(); // +1
new ClassB(); // +1
Console.WriteLine($"Global.Count : {Global.Count}"); // 2
// 인스턴스 메소드 : 인스턴스를 만들어야 호출 가능
ClassC instance = new ClassC(); // ClassC의 인스턴스 생성
Console.WriteLine($"InstanceCount : {instance.InstanceCount}"); // 0
instance.InstanceMethod(); // ClassC의 인스턴스 메소드 호출 /
Console.WriteLine($"InstanceCount : {instance.InstanceCount}"); // 1
}
}
'공부 > C#' 카테고리의 다른 글
[C#]var 사용법 (1) | 2023.11.29 |
---|---|
[C#]readonly vs. const (1) | 2023.11.27 |
[C#]헷갈리는 용어 정리 (클래스, 객체(인스턴스) ...) (0) | 2023.11.12 |
[C#]매개변수, 인수 (0) | 2023.11.09 |
[C#]정수 계열 형식 데이터 - 9개(1바이트 = 8비트) (0) | 2023.11.06 |