속성과 인덱서

냐옹·2024년 4월 10일
0

.NET

목록 보기
22/31

속성과 인덱서

속성과 인덱스는 C#에서 데이터에 접근하는 방식을 캡슐화하는 메커니즘이다.

  • 클래스나 구조체의 멤버로 정의될 수 있다.
  • 데이터를 안전하게 읽거나 쓸 수 있도록 한다.
  • 개체의 상태를 관리하는 방법을 제공하며, 필드 ( 클래스 또는 구조체의 변수 )에 대한 접근을 제어한다.

속성 Properties

속성은 클래스, 구조체, 인터페이스 내에서 사용되며, 필드에 대한 읽기와 쓰기 액세스를 제어하는 방법을 제공한다.

  • 메서드처럼 동작하지만, 필드처럼 접근된다.
  • 속성은 get 및 set 접근자를 사용하여 정의된다.
public class Person{
	private string name;
    
    public string Name{
    	get{ return name; }
        set{ name = value; }
    }
}

기존 C#은 이런식으로 속성을 작성한다. 그리고 C# 6.0부터 속성을 자동구현된 속성 초기화를 쓸 수 있다.

public class Person{
	public string Name { get; set; } = "Unknown"
    // 자동구현된 속성과 초기화
}

인덱서 Indexer

인덱서는 클래스나 구조체가 배열처럼 인덱스를 사용하여 내부 컬렉션의 요소에 접근할 수 있게 해주는 기능이다.

  • 인덱서를 사용함으로써, 개체의 인스턴스를 바치 배열처럼 다룰 수 있다.
  • 인덱서의 주요 목적은 개체 내부에 저장된 데이터에 대한 간결하고 직관적인 접근방법을 제공하는 것이다.

인덱서의 기본구문

public 반환타입 this[인덱스형 인덱스]{
	get{
    	// 인덱스를 사용하여 값을 반환
    }
    set{
    	// 인덱스를 사용하여 값을 설정
    }
}
  • 반환타입 : 인덱서를 통해서 접근할 때 반환되는 요소의 타입이다.
  • 인덱스타입: 인덱스의 자료형이다. 일반적으로 int를 쓰지만, 다른 타입도 사용가능하다.
  • 인덱스 : 인덱스 파라미터의 이름이다. 이는 컬렉션 내의 특정 요소를 참조하는데 사용된다.

사용예시

int 배열을 감싸는 간단한 클래스에 인덱서를 구현한 예제

public class IntArrayWrapper{
	private int[] array = new Int[100];
    
    // 인덱서 구현
    public int this[int i]{
    	get{ return array[i]; }
        set{ array[i] = value; }
    }
}

위의 IntArrayWrapper는 내부배열 array에 대한 인덱서를 제공한다. 이를 통해서 클래스의 인스턴스를 배열처럼 사용할 수 있다.

var wrapper = new IntArrayWrapper();
wrapper[0] = 1; // set 접근자 호출
Console.WriteLine(wrapper[0]);
// get 접근자 호출, 1을 출력

기타고급 사용

인덱서는 다음과 같은 고급기능도 제공한다.
1. 다중 인덱스
인덱서는 하나 이상의 인덱스를 지원할 수 있다.
예를 들어서 2차원 배열이나 매트릭스에 대한 접근을 제공할 수 있다.

  1. 다양한 인덱스 타입
    int 외에 다른 타입의 인덱스를 사용할 수 있다. 이를 통해서 string이나 사용자정의타입으로 인덱싱할 수 있다.
public class Matrix{
	private double[,] data = new double[10,10];
    
    public double this[int x, int y]{
    	get{ return data[x,y]; }
        set{ data[x,y] = value; } 
    }
}

인덱서는 개체의 내부 컬렉션 또는 배열에 대한 접근을 제어하고 캡슐화하는 강력한 방법을 제공한다. 이를 통해서 사용자에게 간단하고 직관적인 방식으로 데이터에 접근할 수 있는 인터페이스를 제공할 수 있다.

0개의 댓글