일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 인덱서
- 배열초기화
- 일반화 클래스
- 인터페이스의 프로퍼티
- 분할 클래스
- 클래스
- 프로퍼티
- 이것이C#이다
- 중첩클래스
- 인터페이스 상속
- 형식변환
- c#
- 오버라이딩
- 자동구현프로퍼티
- base()
- 클래스 연습문제
- 튜플
- 무명형식
- this 키워드
- 가변배열
- 추상 프로퍼티
- 컬렉션 초기화
- 프로퍼티와 생성자
- 인터페이스 예제
- 배열
- System.Array
- 메소드숨기기
- as
- 접근 한정자
- is
- Today
- Total
제로의영역
9장 프로퍼티- 2.메소드보다 프로퍼티 본문
* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.
* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 저같은 왕초보가 보기 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.
프로퍼티 선언 문법을 알아보겠습니다.
1. 프로퍼티 구성 키워드
(1) get{...}과 set{...}을 접근자(accessor)라고 함.
1) get 접근자: 필드로부터 값을 읽어 옴.
2) set 접근자: 필드에 값을 할당
(2) value 키워드: 선언하지 않아도 C# 컴파일러가 set 접근자의 암묵적 매개 변수로 간주
2. 사용법
class 클래스 이름
{
데이터 형식 필드이름;
접근한정자 데이터형식 프로퍼티이름
{
get
{
return 필드이름;
}
set
{
필드이름 = value;
}
}
}
사용예)
class MyClass
{
private int myField; //객체 선언
public int GetMyField() //메소드
{
return myField; //호출자에게 반환
}
public void SetMyField( int NewValue ) //int NewValue값을 매개변수로 갖는 메소드
{
myField = NewValue; //myField에 NewValue값을 대입
}
이 메소드를 프로퍼티로 바꿔 보겠습니다.
class MyClass
{
private int myField; //필드 선언
public int MyField //프로퍼티: 접근 한정자 + 데이터형식 + 프로퍼티명
{
get //get 접근자: 필드로부터 값을 읽어옴
{
retrun myField; //호출자에게 myfield값 반환
}
set //set 접근자: 필드에 값을 할당
{
myField = value; //value와 '='할당 연산자를 통해 myFeild 필드에 데이터를 저장
}
}
}
( 메소드와 프로퍼티를 어떻게 구분하는지 언급이 없습니다만 '( )'의 유무로 구분을 할 수 있나 생각이 됩니다.
메소드는 필드(객체)에 접근하기위해 두 개의 메소드를 만들어서 메소드2에서 변수를 받아 선언한 객체로 넘기고 메소드1에서 반환하고 있습니다.
프로퍼티는 set에서 value값으로 받아서 객체로 넘기고 get으로 반환하고 있네요.
소스가 짧아져서 좋아하는 초보 입니다. ^^)
그리고 set 접근자를 구현하지 않으면 프로퍼티는 쓰기 불가, 읽기 전용이 됩니다.
예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ex8._5
{
class BirthdayInfo //클래스 생성
{
private string name; //문자열 name 필드 생성
private DateTime birthday; //DateTime형 birthday 필드 생성
public string Name //프로퍼티1 생성: 한정자+데이터형식+프로퍼티명
{
get //get접근자: 필드로부터 값을 읽어옴
{
return name; //name 필드를 호출자에게 반환
}
set //set접근자: 필드에 값을 할당
{
name = value; //name 필드에 입력값을 대입
}
}
public DateTime Birthday //프로퍼티2 생성: 한정자+데이터형식+프로퍼티명
{
get //get 접근자: 필드로부터 값을 읽어옴
{
return birthday; //birthday 필드를 호출자에게 반환
}
set //set접근자: 필드에 값을 할당
{
birthday = value; //birthday 필드에 입력값을 대입
}
}
public int Age //프로퍼티3 생성: 한정자+데이터형식+프로퍼티명
{
get //get접근자: 필드로부터 값을 읽어옴
{
return new DateTime(DateTime.Now.Subtract(birthday).Ticks).Year;
//DateTime(DateTime.Now.Subtract(birthday).Ticks).Year를 호출자에게 반환(나이계산하는 것 같음)
}
}
}
class MainProgram
{
static void Main(string[] args)
{
BirthdayInfo birth = new BirthdayInfo(); //Birthday형식 birth생성
birth.Name = "서현"; //name에 서현 입력
birth.Birthday = new DateTime(1991, 6, 28); //birthday에 1991, 6, 28 입력
Console.WriteLine($"Name:{birth.Name}"); //서현 출력
Console.WriteLine($"Brithday:{birth.Brithday.ToShortDateString()}");
//1991-06-28 출력
Console.WriteLine($"Age:{birth.Age}");
//DateTime(DateTime.Now.Subtract(birthday).Ticks).Year 결과를 출력
}
}
}
출력결과
Name:서현
Brithday:1991-06-28
Age:29