C#/C# 교과서

[C# 교과서] 38~39. 속성, 인덱서와 반복기

서니션 2023. 1. 17. 22:06
728x90
반응형

속성

  • 클래스의 멤버 중에서 속성은 단어 그대로 클래스 속성을 나타냄
  • 괄호가 없는 메서드와 비슷
  • 개체 필드 중에 외부에 공개하고자 할 때 사용하는 방법
  • 코드에서는 private 성격이 있는 필드를 public 속성으로 외부에 공개할 때 사용
  • 클래스 안에 선언된 필드 내용을 설정(set)하거나 참조(get)할 때 사용하는 코드 블록을 속성
class 클래스이름
{
	public [반환형식] 속성이름 {get; set;}
}
  • 속성 정의 구문의 마지막에는 세미콜론이 붙지 않음
  • 속성을 선언과 동시에 특정한 값으로 초기화할 때는 세미콜론이 붙음
  • static을 붙여 정적인 속성을 만들 수 있음
  • 속성에 값을 설정하는 것을 세터(setter)
  • 값을 읽어오는 것을 게터(getter)
class Person
{
	private string name; // 필드
	public string Name; // 속성
	{
		get { return name; }
		set { name = value; }
	}
}

var person = new Person();
person.Name = "Gilbut"; // set
Console.WriteLine(person.Name); // get

자동 속성 이니셜라이저

자동 속성 이니셜라이저를 사용하면 속성을 선언과 동시에 기본값으로 초기화 가능

public static string Name {get; set;} = "하이";

화살표 연산자로 속성과 메서드를 줄여서 표현

public int Count
{
	get => count;
	set => count = value;
}

개체 이니셜라이저

  • C#은 클래스의 인스턴스를 만들 때 속성을 특정 값으로 바로 초기화 가능
  • 개체를 만들 때 생성자를 의미하는 괄호 기호 생략 가능
class Person
{
	public string Name { get; set; }
	public string City { get; set; }
}

Person person = new Person { Name = "C#", City = "Seoul" };
$"{person.Name} : {person.City}"

개체를 초기화 시키는 세 가지 방법

using System;

public class Person
{
    public string Name { get; set;}
    public int Age { get; set; }

    public Person()
    {

    }

    public Person(string name, int age)
    {
        Name = name; Age =age;
    }
}

class ObjectInitializers
{
    static void Main()
    {
        // 속성 사용
        Person pp = new Person();
        pp.Name = "이재현";
        pp.Age = 27;

        // 생성자 사용
        Person pc = new Person("이주연", 26);

        // 개체 이니셜라이저 사용
        Person pi = new Person { Name = "김영훈", Age = 27};
        Console.WriteLine($"{pi.Name},{pi.Age}");
    }
}

자동 속성을 사용하여 레코드 클래스 구현

  • 자동 속성을 사용하면 표 형태의 데이터, 즉 레코드 단위로 데이터를 저장할 때 유용
  • 속성을 사용하여 레코드 형태로 데이터를 관리하는 클래스를 모델 클래스라고 함
using System;

public class Person
{
    public int Id { get; set; }
    public string Name { get; set;}
    public int Age { get; set; }
}

class ObjectInitializers
{
    static void Main()
    {
        Person pi = new Person { Id = 1,Name = "김영훈", Age = 27};
        Console.WriteLine($"{pi.Id},{pi.Name},{pi.Age}");
    }
}

인덱서

  • C#에서 인덱서는 속성 여러 개를 하나로 표현하거나 개체를 배열 형식으로 표현할 때 사용
public object this[int index]
{
	get {}
	set {}
}
  • 인덱서는 속성과 달리 이름을 따로 지정하지 않고 this 키워드를 사용

반복기와 yield 키워드

  • 반복기(이터레이터)는 배열과 컬렉션 형태의 데이터를 단계별로 실행하는 데 사용할 수 있음
  • 반복기를 구현할 때는 IEnumerable 인터페이스 또는 Ienumerable<T> 인터페이스와 yield 키워드를 사용
  • 반복기는 자신이 만들어 놓은 클래스 및 개체의 멤버를 호출할 때 foreach 문을 사용하여 반복 출력되도록 설정해 놓는 구문
728x90
반응형