This article is currently in the process of being translated into Korean (~98% done).
Variables
변수는 저장소로 비유할 수 있습니다.그리고 변수는 프로그래머에게 기본 소양이죠.C#에서 변수는 이렇게 선언됩니다.
<데이터 종류> <이름>;
예를 들자면 이런식이에요.
string name;
이것이 가장 기본적인 형태입니다.그러나 이 변수는 아직 값을 갖고 있지 않아요.지금이나 나중에 당신은 이렇게 할당해줄 수 있어요.
<data type> <name> = <value>;
만약 이 변수가 당신이 만들고 있는 메소드에 포함된 것이 아니라면(예시: 클래스 멤버 변수),당신은 변수의 접근성을 제한하고 싶을때도 있을거에요.
<접근 제한자> <데이터 종류> <이름> = <값>;
여기 완성된 예시에요:
private string name = "John Doe";
접근 제한자 부분은 class와 연관이 있습니다.따라서 만약 당신이 더 자세한 설명을 원한다면 나중에 class에 대한 챕터에서 볼 수 있을거에요.우리는 일단 변수 파트에 집중해 봐요.
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string firstName = "John";
string lastName = "Doe";
Console.WriteLine("Name: " + firstName + " " + lastName);
Console.WriteLine("Please enter a new first name:");
firstName = Console.ReadLine();
Console.WriteLine("New name: " + firstName + " " + lastName);
Console.ReadLine();
}
}
}
일단 변수에 대해서는 대략 설명 했으니,흥미로운 파트로 바로 가볼게요.먼저, 우리는 여러 변수들을 문자열(string) 타입으로 선언했어요.문자열은 간단히 글을 포함해요.보시다시피 우리는 바로 변수에 값을 주었어요.다음으로,우리는 콘솔에 글들을 출력했죠.거기서 우리는 두개의 변수를 사용했어요.문자열은 '+'를 이용해서 다른 부분을 모아서 만들어져요.
다음으로,우리는 유저에게 성을 물어봐요.그다음에 우리는 ReadLine()메소드를 사용해서 콘솔에서 유저의 입력값을 받고 그것을 firstName 변수에 넣어줘요.유저가 엔터를 누르면,새로운 성이 변수에 할당되는 것이죠.그리고 다음줄에 우리는 이름(성 + 이름)을 다시 출력하죠.이것은 어떻게 바뀌었는지 보기 위해서에요.우리는 방금 우리의 첫번째 변수를 썼고,변수의 가장 중요한 기능을 썼어요.그 기능은 바로 프로그램이 돌아가는 도중에도 변수는 바뀔 수 있다는 거에요.
또다른 흥미로운 예제는 바로 연산이에요.여기 예시가 하나 있어요.우리가 방금 쓴거랑 같은 코드에 기반을 두었죠.
int number1, number2;
Console.WriteLine("Please enter a number:");
number1 = int.Parse(Console.ReadLine());
Console.WriteLine("Thank you. One more:");
number2 = int.Parse(Console.ReadLine());
Console.WriteLine("Adding the two numbers: " + (number1 + number2));
Console.ReadLine();
이것을 우리의 Main 메소드에 넣고 한번 시도해 보세요.우리가 쓴 유일한 트릭은,int.Parse() 메소드에요.이것은 간단히 문자열을 받아 정수로 전환해줘요.보시다시피,이 어플리케이션은 사용자의 입력을 검토하지 않아요.그래서 만약 당신이 숫자가 아닌 다른것을 입력한다면,오류가 뜰거에요.이것에 대해서는 나중에 자세히 알려줄게요.
Variables & scope
지금까지,우리는 지역 변수 만을 써왔어요.지역 변수는 같은 메소드에서 정의되고 쓰이는 것을 의미해요.C#에서,특정 메소드 안에서 정의된 메소드는 그 메소드 외부에서 사용될 수 없어요.그래서 이것이 로컬(현지의)라고 불리는 이유죠.만약 당신이 다른 프로그래밍 언어에도 익숙하다면,당신은 전역 변수 도 알거에요.그러나 C#은 전역 변수의 개념을 지원하지 않아요.대신,당신은 클래스에서 필드를 선언할 수 있어요.필드는 클래스의 모든 메소드에서 접근할 수 있죠.예를 들어 설명해 볼게요.
using System;
namespace VariableScope
{
class Program
{
private static string helloClass = "Hello, class!";
static void Main(string[] args)
{
string helloLocal = "Hello, local!";
Console.WriteLine(helloLocal);
Console.WriteLine(Program.helloClass);
DoStuff();
}
static void DoStuff()
{
Console.WriteLine("A message from DoStuff: " + Program.helloClass);
}
}
}
helloClass를 유심히 보세요.메소드 안에서 선언되는 대신에 클래스 스코프로 선언되었어요.이렇게 함으로서 Main()메소드와 우리가 만든 DoStuff()메소드 두곳에서 접근할 수 있게 만들어 진거에요.그러나 이것은 helloLocal변수에는 해당되지 않아요.왜냐하면 helloLocal변수는 Main() 메소드 안에서 선언되었기 때문에 Main()메소드 안에서만 접근 가능하기 때문이에요.
변수가 선언되는곳을 다르게 하는 개념을 우리는 스코핑 이라고 불러요.그리고 이것은 당신의 코드가 너무 많은 변수로 인해 엉망 진창이 되어 너무 많은곳에서 바뀌는것을 방지해줘요.이런 식으로 우리를 도와주는 다른 기능은 접근 제한자에요.(이번 예시에서 private로 쓰인거 이거에요.)이 기능은 나중에 클래스 챕터에서 설명할게요.
Summary
변수들은 당신이 다양한 종류의 데이터를 저장할 수 있게 해줘요.예시로는 텍스트 문자열이나,커스텀 오브젝트가 있겠네요.이것들은 선언된 메소드 안에서 접근 가능해요. 클래스 필드는 클래스의 모든 메소드에서 접근 가능해요.그리고 접근 제한자를 이용한다면,클래스 외부에서도 접근 가능하게 할 수 있어요.