this 키워드
C#에서 this 키워드는 클래스 내부의 메서드 또는 생성자에서 현재 클래스의 인스턴스 멤버를 참조하는데 사용됩니다. 메서드의 매개변수와 인스턴스 변수의 이름이 같은 경우 구분하기 위해 사용되기도 합니다.
즉, this 키워드는 자기 자신(생성된 객체)의 멤버를 접근하기 위해 사용되는 키워드입니다. 다음은 this 키워드를 사용하는 간단한 예제입니다.
namespace ConsoleApp2
{
class Program
{
string str;
Program(string str)
{
this.str = str;
Console.WriteLine("생성자에서 this: " + this);
}
static void Main(string[] args)
{
Program obj = new Program("ABC");
Console.WriteLine("Main에서 obj: " + obj);
}
}
}
실행 결과
생성자에서 this: ConsoleApp2.Program
Main에서 obj: ConsoleApp2.Program
위 예제에서 this 키워드와 obj 객체의 출력 결과가 동일한 것을 볼 수 있습니다. this 키워드가 클래스의 현재 인스턴스의 obj를 참조하기 때문입니다.
다음은 C#에서 this 키워드를 사용하는 경우입니다.
동일한 이름의 변수
일반적으로 클래스 또는 메서드에서 동일한 이름의 변수를 선언할 수 없지만, 인스턴스 변수와 매개변수의 이름은 같을 수 있습니다.
class Program
{
string str;
Program(string str)
{
str = str;
Console.WriteLine("생성자에서 str: " + str);
}
void PrintStr()
{
Console.WriteLine("PrintStr() 메서드에서 str: " + str);
}
static void Main(string[] args)
{
Program obj = new Program("ABC");
Console.WriteLine("Main() 메서드에서 str: " + obj.str);
obj.PrintStr();
}
}
실행 결과
생성자에서 str: ABC
Main() 메서드에서 str:
PrintStr() 메서드에서 str:
Program 클래스의 생성자에서 인스턴스 변수와 매개변수의 이름은 str로 동일합니다. 생성자에 "ABC"를 전달했지만, 인스턴스 변수가 아닌 매개변수에 값을 할당했으므로 Main문에서 obj.str로 호출하면 빈 값이 호출됩니다.
인스턴스 변수에 값을 할당하고 싶은 경우 this 키워드를 사용하여 위 문제를 해결할 수 있습니다.
class Program
{
string str;
Program(string str)
{
this.str = str;
Console.WriteLine("생성자에서 str: " + str);
}
void PrintStr()
{
Console.WriteLine("PrintStr() 메서드에서 str: " + str);
}
static void Main(string[] args)
{
Program obj = new Program("ABC");
Console.WriteLine("Main() 메서드에서 str: " + obj.str);
obj.PrintStr();
}
}
실행 결과
생성자에서 str: ABC
Main() 메서드에서 str: ABC
PrintStr() 메서드에서 str: ABC
생성자의 this.str은 클래스의 인스턴스 변수를 참조하므로 원하는대로 값이 할당되었습니다.
생성자 호출
생성자에서 다른 생성자를 호출해야하는 경우 this 키워드를 사용할 수 있습니다.
class Program
{
string str;
Program()
{
Console.WriteLine("기본 생성자 호출");
}
Program(string str): this()
{
this.str = str;
Console.WriteLine("매개변수가 존재하는 생성자 호출");
}
static void Main(string[] args)
{
Program obj = new Program("ABC");
}
}
실행 결과
기본 생성자 호출
매개변수가 존재하는 생성자 호출
콜론(:) 다음에 this 키워드를 사용하여 기본 생성자를 호출했습니다. 특정 생성자를 먼저 호출해야 하는 경우 콜론(:) 다음에 this 키워드를 사용하여 기본 생성자 또는 오버로딩된 생성자를 호출할 수 있습니다.
인수로 사용
this 키워드를 사용하여 현재 객체를 인수로 전달할 수 있습니다.
class Program
{
string str;
Program(string str)
{
this.str = str;
}
// this는 Program 클래스의 인스턴스입니다.
void passParameter(Program program)
{
Console.WriteLine("str: " + program.str);
}
void printStr()
{
// this를 인수로 전달합니다.
passParameter(this);
}
static void Main(string[] args)
{
Program obj = new Program("ABC");
obj.printStr();
}
}
실행 결과
str: ABC
passParameter() 메서드에 this를 전달합니다. this는 클래스의 인스턴스이므로 Person 클래스의 인수로 this를 처리합니다.
인덱서 선언
주로 사용되는 방법은 아니지만, 클래스 객체를 배열처럼 사용하기 위해 인덱서를 선언할 수 있습니다.
class StringArray
{
private string[] strArray = new string[5];
public string this[int index]
{
get { return strArray[index]; }
set { strArray[index] = value; }
}
}
class Program
{
static void Main(string[] args)
{
StringArray strArray = new StringArray();
strArray[0] = "A";
strArray[1] = "B";
strArray[2] = "C";
strArray[3] = "D";
strArray[4] = "E";
for (int i = 0; i < 5; i++)
{
Console.WriteLine(strArray[i] + " ");
}
}
}
실행 결과
A
B
C
D
E
StringArray 클래스의 strArray[] 필드는 private로 선언되었으므로 Person 클래스 외부에서 접근할 수 없습니다.
하지만, StringArray 클래스에서 this 키워드를 사용하여 인덱서를 구현했으므로 Person 클래스 외부에서 strArray[] 필드를 배열처럼 접근할 수 있습니다.
결론
- this 키워드는 현재 클래스의 인스턴스 멤버를 참조하기 위해 사용됩니다.
- this 키워드를 사용하여 인스턴스 변수와 매개변수를 구분합니다.
- this 키워드를 사용하여 생성자에서 다른 생성자를 호출할 수 있습니다.
- this 키워드는 인수로 전달할 수 있습니다.
- 클래스를 인덱서로 구현하기 위해 this 키워드를 사용합니다.
- this 키워드는 정적 메서드에서 사용할 수 없습니다.
'C#' 카테고리의 다른 글
[C#]봉인 클래스(Sealed Class) 및 봉인 메서드(Sealed Class) (0) | 2022.05.15 |
---|---|
[C#]구조체(Struct) (0) | 2022.05.15 |
[C#]접근 제한자(Access Modifier) - public, private, protected (0) | 2022.05.08 |
[C#]정적 생성자(Static Constructor) (0) | 2022.05.05 |
[C#]복사 생성자(Copy Constructor) (0) | 2022.05.05 |
댓글