C#

C# 변수

littlemk 2018. 7. 19. 11:42

C# 변수 

C# 변수는 메서드 안에서 해당 메서드의 로컬변수로 선언되거나, 혹은 클래스 안에서 클래스 내의 전역변수(이를 필드(Field) 라고 부른다)로 선언될 수 있다. 로컬변수는 해당 메서드내에서만 사용되며, 메서드 호출이 끝나면 사용되지 못한다. 반면 필드는 클래스 객체가 살아있는 한 계속 존속하며 또한 다른 메서드들에서 참조할 수 있다 (주: 만약 필드가 static 정적 필드이면 클래스 Type이 처음으로 런타임에 의해 로드될 때 해당 Type object (타입 메타정보를 갖는 객체)에 생성되서 프로그램이 종료 때까지 유지된다).

로컬변수는 기본값을 할당받지 못하기 때문에 반드시 사용 전에 값을 할당해야 하는 반면, 필드는 값을 할당하지 않으면, 기본값이 자동으로 할당된다. 예를 들어, int 타입 필드인 경우 0 이 할당된다.

모든 C# 변수는 Case-Sensitive 즉 대소문자를 구별한다. 즉, var1 과 Var1은 서로 다른 변수이다.
Comment # @gamba201: 필드앞에 static 이 붙은 것을 Static 필드라 부르고,  static이 없는 필드를 Instance 필드라 부릅니다.
이 둘은 다른 것입니다. Static 필드는 해당 클래스당 하나만 존재하며, Instance 필드는 해당 클래스로부터 생성된 객체들마다 1개씩 존재합니다.



C# 변수 예제

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
       class CSVar
       {
              //필드 (전역변수)
              int globalVar;
              const int MAX = 1024;
              public void Method1()
              {
                     // 로컬 변수
                     int localVar;
                     // 아래 할당이 없으면 에러 발생
                     localVar = 100;
                     Console.WriteLine(globalVar);
                     Console.WriteLine(localVar);
              }
       }
       class Program
       {
              // 모든 프로그램에는 Main()이 있어야 함
              static void Main(string[] args)
              {
                     // 테스트
                     CSVar obj = new CSVar();
                     obj.Method1();
              }
       }
}



  • 필드 globalVar는 값을 명시적으로 할당하지 않은 경우 기본값 0이 할당된다. 여기서 전역(Global)의 의미는 객체 (혹은 클래스) 내에서의 전역을 의미한다.
  • 지역변수 localVar는 값을 할당하지 않고 사용하게 되면, 아래와 같은 컴파일러 에러가 발생한다.





# Readonly 키워드 사용 방법

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
       class CSVar
       {
              //필드 (전역변수)
              int globalVar;
              // const 키워드 사용방법
              const int MAX_Value = 1024;
              //readonly  키워드 사용 방법
              public readonly int Max;
              public CSVar()
              {
                     Max = 2;
              }
              public void Method1()
              {
                     // 로컬 변수
                     int localVar;
                     // 아래 할당이 없으면 에러 발생
                     localVar = 100;
                     Console.WriteLine(globalVar);
                     Console.WriteLine(localVar);
              }
       }
       class Program
       {
              // 모든 프로그램에는 Main()이 있어야 함
              static void Main(string[] args)
              {
                     // 테스트
                     // CSVar obj = new CSVar();
                     // obj.Method1();
                     CSVar test = new CSVar();
                     test.Method1();
                     CSVar readtest = new CSVar();
                     Console.WriteLine("readonly 사용/ Max 값은 ? :" + readtest.Max);
              }
       }
}


참고 사이트 (readonly 키워드) :: 
  1. https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/readonly
  2. http://adibong.tistory.com/entry/C-const-%EC%83%81%EC%88%98


! 주의 사항 !

  • 생성자 이름의 대/소문자가 클래스 또는 구조체 선언 이름의 대/소문자와 다른 경우에 "메서드에는 반환 형식이 있습니다"라는 오류 배출



참고 사이트 :: http://www.upaper.net/alexylee/1114162