C#/C# 교과서
[C# 교과서] 38~39. 속성, 인덱서와 반복기
서니션
2023. 1. 17. 22:06
속성
- 클래스의 멤버 중에서 속성은 단어 그대로 클래스 속성을 나타냄
- 괄호가 없는 메서드와 비슷
- 개체 필드 중에 외부에 공개하고자 할 때 사용하는 방법
- 코드에서는 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 문을 사용하여 반복 출력되도록 설정해 놓는 구문