자동구현 프로퍼티
프로퍼티는 데이터의 오염에 대해선 메소드처럼 안전하고, 데이터를 다룰 때는 필드처럼 간결하다
하지만 그것 또한 중복작업의 느낌이 든다
★ 프로퍼티는 또한 Set이나 Get접근자에 논리를 추가해 접근단계에서 제어가 가능하다
하지만 아무논리도 섞여있지 않은 단순히 필드를 읽고 쓰기만 한다면?
C#은 3.0부터 이런경우에 사용해서 코드를 더 단순하게 만드는 자동 구현 프로퍼티를 지원한다
방법은 그저 get; set;만 쓰면된다
필드를 선언할 필요도 없고 set의 value도 없는 등 많은 것을 생략하게 해줌
자동구현 프로퍼티
using System;
using static System.Console;
namespace Sample
{
class BirthdayInfo
{
public string Name
{ get; set; } = "Unknown"; //프로퍼티 선언과 동시에 초기화
public DateTime BirthDay
{ get; set; } = new DateTime(1, 1, 1);
public int Age
{
get
{
return new DateTime(DateTime.Now.Subtract(BirthDay).Ticks).Year;
}
}
}
class MainClass
{
public static void Main(string[] args)
{
BirthdayInfo birth = new BirthdayInfo();
WriteLine($"{birth.Name}");
WriteLine($"{birth.BirthDay}");
WriteLine($"{birth.Age}");
birth.Name = "지훈";
birth.BirthDay = new DateTime(1999, 09, 22);
WriteLine($"{birth.Name}");
WriteLine($"{birth.BirthDay}");
WriteLine($"{birth.Age}");
}
}
}
c# 7.0이후부턴 { get; set; } = "Unknown" 코드 처럼 프로퍼티를 선언함과 동시에 초기화를 할 수 있어서
자동구현프로퍼티에 초깃값이 필요할 때 생성자에 초기화 코드를 작성하는 수고를 덜 수 있다
프로퍼티와 생성자
클래스 객체를 생성할때 각 필드를 초기화하는 또 다른 방법 = 프로퍼티를 이용한 초기화!
클래스이름 인스턴스 = new 클래스이름()
{
프로퍼티 1 = 값, //세미클론;이 아니라 콤마,
프로퍼티 2 = 값,
프로퍼티 3 = 값
}
이와 같이 객체를 생성할 때 <프로퍼티 = 값> 목록에 객체의 모든 프로퍼티가 올 필요는 없고
초기화하고 싶은 프로퍼티만 넣어서 초기화 하면 된다
프로퍼티와 생성자(프로퍼티를 이용한 객체 초기화)
using System;
using static System.Console;
namespace Sample
{
class BirthdayInfo
{
public string Name
{ get; set; }
public DateTime BirthDay
{ get; set; }
public int Age
{
get
{
return new DateTime(DateTime.Now.Subtract(BirthDay).Ticks).Year;
}
}
}
class MainClass
{
public static void Main(string[] args)
{
BirthdayInfo birth = new BirthdayInfo() //인스턴스 생성과 동시에 초기화(코드블럭으로 초깃값 설정)
{
Name = "지훈", //콤마 사용
BirthDay = new DateTime(1999, 09, 22)
};
WriteLine($"{birth.Name}");
WriteLine($"{birth.BirthDay}");
WriteLine($"{birth.Age}");
}
}
}
이 외에도
초기화 전용(Init-Only) 자동 구현 프로퍼티 (get;init;) -pg 334)
- get접근자만 갖도록 하여 읽기전용의 역할을 하게 했던 것을 편하게 해준다.
- set처럼 외부에서 프로퍼티를 변경할 수 있지만, 객체초기화를 할 때 한번만 가능하고 이후엔 변경불가
=> 책 참고
자동구현 프로퍼티
프로퍼티는 데이터의 오염에 대해선 메소드처럼 안전하고, 데이터를 다룰 때는 필드처럼 간결하다
하지만 그것 또한 중복작업의 느낌이 든다
★ 프로퍼티는 또한 Set이나 Get접근자에 논리를 추가해 접근단계에서 제어가 가능하다
하지만 아무논리도 섞여있지 않은 단순히 필드를 읽고 쓰기만 한다면?
C#은 3.0부터 이런경우에 사용해서 코드를 더 단순하게 만드는 자동 구현 프로퍼티를 지원한다
방법은 그저 get; set;만 쓰면된다
필드를 선언할 필요도 없고 set의 value도 없는 등 많은 것을 생략하게 해줌
자동구현 프로퍼티
using System;
using static System.Console;
namespace Sample
{
class BirthdayInfo
{
public string Name
{ get; set; } = "Unknown"; //프로퍼티 선언과 동시에 초기화
public DateTime BirthDay
{ get; set; } = new DateTime(1, 1, 1);
public int Age
{
get
{
return new DateTime(DateTime.Now.Subtract(BirthDay).Ticks).Year;
}
}
}
class MainClass
{
public static void Main(string[] args)
{
BirthdayInfo birth = new BirthdayInfo();
WriteLine($"{birth.Name}");
WriteLine($"{birth.BirthDay}");
WriteLine($"{birth.Age}");
birth.Name = "지훈";
birth.BirthDay = new DateTime(1999, 09, 22);
WriteLine($"{birth.Name}");
WriteLine($"{birth.BirthDay}");
WriteLine($"{birth.Age}");
}
}
}
c# 7.0이후부턴 { get; set; } = "Unknown" 코드 처럼 프로퍼티를 선언함과 동시에 초기화를 할 수 있어서
자동구현프로퍼티에 초깃값이 필요할 때 생성자에 초기화 코드를 작성하는 수고를 덜 수 있다
프로퍼티와 생성자
클래스 객체를 생성할때 각 필드를 초기화하는 또 다른 방법 = 프로퍼티를 이용한 초기화!
클래스이름 인스턴스 = new 클래스이름()
{
프로퍼티 1 = 값, //세미클론;이 아니라 콤마,
프로퍼티 2 = 값,
프로퍼티 3 = 값
}
이와 같이 객체를 생성할 때 <프로퍼티 = 값> 목록에 객체의 모든 프로퍼티가 올 필요는 없고
초기화하고 싶은 프로퍼티만 넣어서 초기화 하면 된다
프로퍼티와 생성자(프로퍼티를 이용한 객체 초기화)
using System;
using static System.Console;
namespace Sample
{
class BirthdayInfo
{
public string Name
{ get; set; }
public DateTime BirthDay
{ get; set; }
public int Age
{
get
{
return new DateTime(DateTime.Now.Subtract(BirthDay).Ticks).Year;
}
}
}
class MainClass
{
public static void Main(string[] args)
{
BirthdayInfo birth = new BirthdayInfo() //인스턴스 생성과 동시에 초기화(코드블럭으로 초깃값 설정)
{
Name = "지훈", //콤마 사용
BirthDay = new DateTime(1999, 09, 22)
};
WriteLine($"{birth.Name}");
WriteLine($"{birth.BirthDay}");
WriteLine($"{birth.Age}");
}
}
}
이 외에도
초기화 전용(Init-Only) 자동 구현 프로퍼티 (get;init;) -pg 334)
- get접근자만 갖도록 하여 읽기전용의 역할을 하게 했던 것을 편하게 해준다.
- set처럼 외부에서 프로퍼티를 변경할 수 있지만, 객체초기화를 할 때 한번만 가능하고 이후엔 변경불가
=> 책 참고