[C#] 8.1.4 인터페이스에 캡슐화 가능한 멤버

인터페이스에는 메서드 외에도 속성, 이벤트, 인덱서를 멤버로 캡슐화할 수 있습니다. 속성과 인덱서는 get블록과 set블록은 원하는 블록만 것을 선택적으로 약속할 수 있으며 이벤트에 대해서는 9장 대리자와 이벤트에서 다루기로 하겠습니다.

다음은 인터페이스에 멤버 속성과 멤버 인덱서를 캡슐화하는 예제 코드입니다. 인터페이스 IMemo에서는 기록할 수 있는 메모의 최대 개수를 가져올 수 있는 MaxCount 속성과 원하는 위치에 메모를 설정하거나 가져올 수 있는 인덱스를 약속하였습니다.

▶ 인터페이스에 멤버 속성과 인덱스를 캡슐화

이번에는 IMemo를 구현 약속하는 Note 클래스를 만듭시다. Note 클래스에는 IMemo에서 약속된 멤버들을 구체적으로 구현해야 합니다.

▶ 속성과 인덱스를 캡슐화한 인터페이스를 구현 약속

Note 클래스 생성자에서는 노트의 페이지 수를 입력 인자로 받아 최대 보관할 수 있는 메모의 개수를 정하고 메모를 남길 수 있는 페이지들을 생성합시다. 이를 위해 MaxCount의 set 블록을 추가하고 메모를 남길 수 있는 페이지를 위해 문자열 배열을 멤버로 추가할게요. 물론, set 블록은 노트 내부에서만 접근할 수 있게 private으로 접근 지정해야겠지요. 그리고 인덱서에서는 접근하려고 하는 index가 유효하면 남겨진 메모를 설정하거나 가져오기를 할 수 있게 구현합시다.

▶ Note 클래스 구현

다음은 Note 클래스를 사용하는 간단한 예제입니다.

▶ Note 클래스 사용 예

▶ 실행 결과