반응형
아래 글은 C# 문법 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.
📃 참고자료
- https://www.csharpstudy.com/CSharp/CSharp-static.aspx
- https://wergia.tistory.com/180
- https://ifcontinue.tistory.com/2
* 위 링크를 참고해서 아래 글을 작성했습니다.
# static이란?
- static은 변수나 메소드에 키워드로 사용된다.
- static 키워드를 사용한 변수는 클래스가 메모리에 올라갈 때 자동으로 생성이 된다.
- 스택틱 변수는 객체를 선언만 해도 메모리가 할당되며 일반적인 변수들이 객체가 새로 생성될 때
메모리가 초기화 되는 것과 다르게 해당 객체를 계속 반복적으로 생성해도 메모리가 유지 된다는 특징이 있다. - 인스턴스(객체) 생성 없이 바로 사용 가능하다.
- 객체를 생성하지 않아도 되니까 편리하고 속도도 빠르다.
# static 키워드를 사용하는 이유?
- 자주 변하지 않는 일정한 값(정적 값) 혹은 설정 정보 같은 공용자원에 대한 접근에 있어서 매번 메모리에 로딩 혹은
값을 읽어 들이는 것보다 일종의 '전역 변수'와 같은 개념을 통해서 접근하는 것이다. - 인스턴스 생성 없이 사용 가능하기 때문에 프로그램 내에서 공통으로 사용되는 데이터들을 관리할 때 사용한다.
- 클래스의 일반 멤버 변수는 클래스의 객체가 생성될 때, 각 객체마다 따로 생기지만, 정적 변수는 해당 클래스가 처음으로 사용되는 때에 한번만 초기화되어 계속 동일한 메모리를 사용하게 된다.
# static (정적) 메서드
- 정적(Static) 메서드는 인스턴스 메서드와는 달리 클래스로부터 객체를 생성하지 않고
직접 [클래스명.메서드명] 형식으로 호출하는 메서드이다. - 메서드 앞에 static C# 키워드를 적어주며, 메서드 내부에 클래스의 인스턴스 객체 멤버를 참조해서는 안된다.
- static 메서드는 인스턴스 객체로부터 호출될 수 없으며, 반드시 클래스명과 함께 사용된다.
* 예제코드
public class MyClass
{
private int val = 1;
// 인스턴스 메서드
public int InstRun()
{
return val;
}
// 정적(Static) 메서드
public static int Run()
{
return 1;
}
}
public class Client
{
public void Test()
{
// 인스턴스 메서드 호출
MyClass myClass = new MyClass();
int i = myClass.InstRun();
// 정적 메서드 호출
int j = MyClass.Run();
}
}
# static (정적) 속성, 필드
- 클래스 내의 Non-static 필드들은 클래스 인스턴스를 생성할 때 마다 메모리에 매번 새로 생성되게 되는 반면,
static 필드는 프로그램 실행 후 해당 클래스가 처음으로 사용 될 때 한번 초기화되어 계속 동일한 메모리르 사용.
* 예제코드
// static 필드
protected static int _id;
// static 속성
public static string Name { get; set; }
# static 클래스
- static 클래스는 모든 클래스 멤버가 static 멤버로 되어 있으며, 클래스명 앞에 static 이라는 C# 키워드를 사용.
- static 클래스는 public 생성자(Constructor)를 가질 수 없지만, static 생성자를 가질 수 있다.
- static 클래스는 객체를 생성할 수 없기 때문이다. - static 생성자는 주로 static 필드들을 초기화 하는데 사용한다.
- static 생성자는 액세스 한정자를 사용할 수 없으며, 매개변수 역시 가질 수 없다.
* 예제코드
// static 클래스 정의
public static class MyUtility
{
private static int ver;
// static 생성자
static MyUtility()
{
ver = 1;
}
public static string Convert(int i)
{
return i.ToString();
}
public static int ConvertBack(string s)
{
return int.Parse(s);
}
}
// static 클래스 사용
static void Main(string[] args)
{
string str = MyUtility.Convert(123);
int i = MyUtility.ConvertBack(str);
}
# 스태틱의 장, 단점
장점
- 프로그램이 종료되기 전까지 메모리를 해제 하거나 객체를 생성하지 않아도, 멤버에 접근이 가능하다는 장점이 있다.
단점
- 여러곳에서 스태틱 멤버를 동시에 참조하게 될 경우에는 객체 지향에 벗어난 개념이 안좋다.
반응형
'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글
C# 불변(immutable)타입과 가변(mutable)타입 (0) | 2021.08.24 |
---|---|
변수의 Scope(범위) (0) | 2021.08.09 |
call by Value와 Call by Reference (0) | 2021.08.06 |
[토이프로젝트]UpDown 게임(컴퓨터의 랜덤 숫자 맞추기) (0) | 2021.08.05 |
박싱(Boxing)과 언박싱(UnBoxing) (0) | 2021.08.04 |