class StaticFunc
{
int nonStaticNum = 5;//비정적, 일반적인 필드
static int staticNum = 10;//정적 필드
public static void PrintNum()//정적 메서드 만들었슴.
{
//Console.WriteLine("비정적 인트값은 : " + nonStaticNum);
Console.WriteLine("정적 인트값은 : " + staticNum);
}
public static void IncreaseAndPrintStaticNum()//정적 메서드는 정적메서드만 부를수 이씀.
{
//정적메서드 내에서 지역변수들은 static일 필요는없다.
int a = 10; // 지역변수는 static안에서 쓰고 사라지는거라 안에서 선언한건 쓸수있음.
Random rnd = new Random();
staticNum++;
PrintNum();
//PrintNomalNum();
}
public void PrintNomalNum()//정적 메서드 만들었슴.
{
Console.WriteLine("비정적 인트값은 : " + nonStaticNum);
//Console.WriteLine("정적 인트값은 : " + staticNum);
}
}
위에는 테스트를 해본 코드이다.
지금부터 이게 왜 주석처리해놨는지에 대해 쓸것이다.
지금 처음에 주석처리 한부분 중에서 nonStaticNum 이게 비정적이라 아래처럼 static 안으로 넣어두면 에러가난다.
public static void WriteStaticNum()
{
Console.WriteLine(nonStaticNum);
Console.WriteLine(staticNum);
}
할당이 되질 않았는데 호출하려고 해서 그런거다.
static property와 마찬가지로, static 함수 내에선 static이나 const만 조작이 가능하다.
같은 이유이긴 하지만 정적 함수를 한번 호출해보면 이해가 가능할것이다.
StaticFunc temp = new StaticFunc();
temp.writeStaticNum();
라고 적으면 바로 에러가 난다.
static 함수도 객체 개별로 쓸 수 있는 것이 아닌 클래스 소유의 함수이다.
클래스명을 통해 사용하면 작동 할 것이다.
StaticFunc.writeStaticNum();
위에 코드처럼 사용하면 호출이 정상적으로 된다.
즉 static 함수 는 호출할때 클래스.메서드명으로 호출하면 된다는 것이다.
public static void IncreaseAndPrintStaticNum()//정적 메서드는 정적메서드만 부를수 이씀.
{
//정적메서드 내에서 지역변수들은 static일 필요는없다.
int a = 10; // 지역변수는 static안에서 쓰고 사라지는거라 안에서 선언한건 쓸수있음.
Random rnd = new Random();
staticNum++;
PrintNum();
//PrintNomalNum();
}
이 메서드 부분은 안에 지역변수가 있다.
static 안에서는 static만 사용할수 있는데 왜 저건 되냐 ? 싶겠지만
정적할당 영역에서 저 메서드가 실행이 되면서 지역변수도 할당이 되면서 사용 되기 떄문에 실행이 가능하다.
a는 함수를 호출하는 시점에 임시로 스택에 생성이 된다는 것이다.
요약하자면 되게 간단해진다.
static 안에선 지역변수를 제외하곤 static만 쓰면된다! 로 한줄 요약이 된다.
'IT > 학습' 카테고리의 다른 글
상속(Inheritance) (0) | 2024.12.11 |
---|---|
Static -4. static 클래스 (0) | 2024.12.11 |
Static -2 static 프로퍼티 (1) | 2024.12.11 |
Static -1. static 필드와 static 참조형 필드 (0) | 2024.12.11 |
클래스Class (0) | 2024.12.10 |