본문 바로가기
Programming/C#

c# _7 : 프로퍼티

by 공부합시다홍아 2020. 6. 10.

프로퍼티 

프로퍼티 선언 방법


class 클래스명 
{
      데이터 형식 필드 이름;
      접근한정자 데이터형식 프로퍼티이름
      {
             get
             {
                      return 필드이름;
             }
             set
            {
                     필드이름 = value;
            }
       }
}

- get{} 과 set{]을 일컬어 접근자(accessor)라고 한다. 
- get접근자는 필드로부터 값을 읽어오고 set접근자는 필드에 값을 할당합니다.
- set접근자는 필드에 값을 할당합니다. 

 

자동 구현 프로퍼티

- 프로퍼티는 데이터의 오염에 대해선 메소드처럼 안전하고, 데이터를 다룰 떄는 필드처럼 간결하다.
- 많은 경우에 중복된 코드를 작성하고 있다는 기분이 들게합니다.
- 이런 걸 방지하기 위해서 자동 구현 프로퍼티를 작성합니다.
- 자동 구현 프로퍼티는 필드를 선언할 필요도 없고, 그저 get과set 접근자 뒤에 세미콜론(;)을 붙여주면 됩니다. 

 

프로퍼티와 생성자

프로퍼티를 이용한 초기화방법

클래스명 인스턴스 = new 클래스명()
{
     프로퍼티1 = 값,
     프로퍼티2 = 값,
     프로퍼티3 = 값
};

- 위와 같은 객체를 생성할 때 <프로퍼티 = 값> 목록에 객체의 모든 프로퍼티가 올 필요는 ㅇ벗다.
- 초기화하고 싶은 프로퍼티만 넣어서 초기화하면 된다.
- 이전에는 세미콜론(;)을 사용하였다면 지금은 콤마(,)를 사용하여 선언합니다.

 

무명형식

- C#에는 int, double, string, FileStream, MyClass 등 형식에는 이름이 있다. 하지만 이름 없는 형식도 존재합니다.
- 이름 없는 형식, 즉 무명 형식을 설명합니다. 
- 형식에 이름이 필요한 이유 형식의 이름을 이용해서 인스턴스를 만들기 때문입니다. 
- 무명형식은 형식의 선언과 동시에 인스턴스를 할당합니다. 
- 인스턴스를 만들고 다시는 사용하지 않을 때 요긴하다. ( 두 개이상의 인스턴스를 만드려면 class나 struct를 이용해 이름을 가진 형식을 별도로 만들어야 한다.)

- 무명 형식의 프로퍼티에 할당된 값은 변경 불가하다는 사실이다. 한번 무명 형식의 인스턴스가 만들어지고 난 다음에는 읽기만 할 수 있다는 이야기이다. 

 

인터페이스의 프로퍼티 

- 인터페이스는 메소드 뿐만 아니라 프로퍼티와 인덱서도 가질 수 있습니다. 프로퍼티나 인덱서를 가진 인터페이스를 상속하는 클래스가 "반드시" 해당 프로퍼티와 인덱서를 구현해야하는 것은 물론이다. 
- 당연한 이야기지만 인터페이스에 들어가는 프로퍼티는 구현을 갖지 않는다. 
- 인터페이스의 프로퍼티 선언이 클래스의 자동 구현 프로퍼티 선언과 그 모습이 동일하다. 

- 프로퍼티 선언 형식
interface 인터페이스 이름
{
          public 형식 프로퍼티 이름1
          {
               get; set;
          }
          public 형식 프로퍼티 이름2
         {
               get; set;
         }
}

 

추상 클래스와 프로퍼티

추상클래스는 클래스 처럼 구현된 프로퍼티를 가질 수 있는 한편 인터페이스처럼 구현되지 않은 프로퍼티도 가질 수 있다.
이것을 추상 프로퍼티라 한다. 추상 메소드가 그랬던 것처럼, 추상 프로퍼티 역시 인터페이스의 프로퍼티와 다를 것이 없다.
파생 클래스가 해당 프로퍼티를 구현하도록 강제하는 것일 뿐이다. 

추상 프로퍼티의 선언방법

abstract class 추상클래스명
{
         abstract 데이터형식 프로퍼티 이름
         {
         get;
         set;
         }
}

 

728x90

'Programming > C#' 카테고리의 다른 글

c#_9 : Oracle과 C# 연동 방법과 선언  (0) 2020.06.10
c#_8 : 배열과 컬렉션 그리고 인덱서  (0) 2020.06.10
C# _6  (0) 2020.06.09
C# _ 5  (0) 2020.06.08
c# 연습3  (0) 2020.06.05