본문 바로가기
언어(C, C++, C#)

[C#] this

by 적용1 2024. 11. 5.
728x90

C#에서 this는 클래스나 구조체의 현재 인스턴스를 참고하는 데 사용된다.

this를 사용하면 클래스 내부에서 해당 인스턴스의 멤버 변수나 메소드에 접근할 수 있으며, 코드의 가독성을 높이고 현재 인스턴스의 컨텍스트에서 작업을 명확하게 수행할 수 있다.

this의 주요 용도

1. 현재 인스턴스의 멤버에 접근 : 클래스 내부의 메서드나 생성자에서 클래스의 필드, 프로퍼티, 다른 메서드에 접근할 때 this 키워드를 사용한다.

메서드의 매개변수 이름과 클래스의 필드 이름이 같을 때, 필드와 매개변수를 구분하기 위해 this를 사용할 수 있다.

public class Person
{
	private string name;
    private int age;
    
    public Person(string name, int age) // 클래스의 필드 이름과 생성자의 매개변수의 이름이 같음
    {
    	this.name = name;
        this.age = age;
	}
}

 

2. 생성자 오버로딩 : this 키워드를 사용하여 같은 클래스 내의 다른 생성자를 호출할 수 있다.

이를 통해 코드 중복을 줄이고, 여러 생성자에서 공통적인 초기화 로직을 한 곳에 모을 수 있다.

Public class Rectangle
{
	private double width;
    private double height;
    
    public Rectangle(double length)
    	: this(length, length)	// 정사각형 선언의 경우에는 가로, 세로가 같으므로 하나의 변으로
        						// 다른 생성자 호출
    {
    }
    
    public Rectangle(double width, double height)
    {
    	this.width = width;
        this.height = height;
    }
}

 

3. 메서드 체이닝(Method Chaining) : this를 반환함으로써 클래스의 인스턴스 메서드들을 연속적으로 호출할 수 있다. 이 방식은 빌더 패턴(Builder Pattern)에서 자주 사용된다.

public class Builder
{
	private string data;4
    
    public Builder SetData(string data)
    {
    	this.data = data;
        return this;
    }
    
    public Builder AppendData(string extraData)
    {
    	this.data += extraData;
        return this;
    }
    
    public void Build()
    {
    	Console.WriteLine(this.data);
    }
}

// 사용 예시
Builder builder = new Builder();
builder.SetData("Initial Data").AppendData(" and Extra Data").Build();

 

※ 빌더 패턴(Builder Pattern)이란? : 복잡한 객체의 생성 과정을 단순화하고, 객체를 단계적으로 생성하여 구성하는 패턴.

 

4. 정적 함수에서 this를 사용한 확장 메서드 : C#에서는 정적 클래스와 정적 메서드를 사용하여 확장 메서드를 만들 수 있다. 이 때, 확장 메서드의 첫 번째 매개변수에 this 키워드를 붙이면, 특정 타입의 인스턴스 메서드처럼 호출할 수 있다.

이 방법은 해당 타입을 수정하지 않고도 새 메서드를 추가하는 것처럼 사용할 수 있다.

public static class IntExtensions
{
	// 정적 메서드의 첫 번째 매개변수에 this를 붙임
	public static bool IsEven(this int number)
    {
    	return number % 2 == 0;
    }
}

// 사용 예시
int number = 10;
bool isEven = number.IsEven();

Console.WriteLine($"{number} is even : {isEven}");

 

확장 메서드는 정적 메서드로 정의해야 하고, 일반 인스턴스 메서드처럼 인스턴스를 직접 참조하는 것이 아니므로 클래스나 구조체 외부에서 제공하는 기능을 확장하는 데 유용하다.

 

 

 

참고 : https://velog.io/@corn1200/C-this-%ED%82%A4%EC%9B%8C%EB%93%9C

728x90

'언어(C, C++, C#)' 카테고리의 다른 글

[C#] 깊은 복사 / 얕은 복사 (Deep Copy / Shallow Copy)  (2) 2024.11.06
[C#] Virtual, Abstract, Interface  (0) 2024.11.05
[C#] object와 var  (0) 2024.11.04
[C#] C#의 Collection  (0) 2024.11.04
[C++] C++의 STL  (0) 2024.11.03