Static 그리고 Main

2024. 12. 18. 14:40개발/C#

이 글은 박상현님의 '이것이 C#이다 개정판'을 참고하여 공부한 내용입니다.


Static

C와 C++의 Static 한정자를 알고 있다면 C# Static의 사용법도 알 수 있습니다. Static은 가시성과 단일성을 제어하며, C++ 에서는 Static 메서드를 통해 인스턴스를 사용하지 않고 바로 호출이 가능합니다. 바로 호출이 가능하다는 점은 Static을 사용하는 순간 그 함수 혹은 변수는 전역으로 설정, 데이터 메모리에 할당되어 프로세스의 시작과 끝을 함께한다는 것을 추론할 수 있게 해줍니다. 더 나아가 C#은 Static 클래스, Static 생성자, Static 로컬함수를 지원합니다. 여기서 로컬함수란 메서드 내에서 선언되는 함수를 뜻합니다.

 

Static 구분

  C C++ C#
Static 전역변수 파일 내 가시성 파일 내 가시성 없음
Static 지역변수 값 유지 값 유지 없음
Static 클래스 없음 없음 인스턴스 불가
모든 속성, 메서드가 Static
Static 속성 없음 클래스 범위 가시성, 단일성 클래스 범위 가시성, 단일성
Static 메서드 없음 인스턴스 없이 호출 가능 인스턴스 없이 호출 가능
Static 생성자 없음 없음 클래스 로드시 한번 실행
Static 로컬 없음 없음 주변 지역변수의 간섭 제한

 

C#은 C, C++과 달리 모든 함수와 변수는 클래스 내에서 관리됩니다. 그렇다면 C#의 프로세스 진입점은 어떻게 선언해야 할까요?

 

Main

C, C++은 main() 전역함수를 통해 메모리에 할당되고 진입점으로 프로세스를 시작할 수 있습니다. 하지만 C#은  완전 객체 지향 프로그래밍 언어로 모든 코드는 클래스 내부에 존재 해야하며 캡슐화 되어야 합니다. 그래서 데이터에 할당하여 시작하기 위한 방법이 Static 메서드 입니다.

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("여러분, 안녕하세요?\n반갑습니다.");
    }
}

 

Static 메서드를 사용하여 Main()을 데이터 영역에 메모리를 할당하고 CLR을 통하여 실행하게 됩니다.

'개발 > C#' 카테고리의 다른 글

C# 프로퍼티  (0) 2025.02.12
C# 종료자, Finalize, IDisposable  (0) 2025.02.12
C# 참조에 의한 매개변수 전달  (0) 2025.02.11
C#의 데이터 타입  (1) 2024.12.20
C# 그리고 .NET  (0) 2024.12.17