Microsoft MVP성태의 닷넷 이야기
인터페이스에 대해 기초적 질문이 있습니다. [링크 복사], [링크+제목 복사],
조회: 17886
글쓴 사람
김재영 (kjyoffice at empal.com)
홈페이지
첨부 파일

안녕하세요.
최근에(이제서야 ㅎㅎㅎ) 인터페이스에 대해서 보고 있습니다.
이 와중에 개념적인 부분에서 질문이 생겼습니다.

인터페이스는 개념적으로 "반드시 구현해야 하는 메소드"라고 봤으며
클래스 이름 대신에 인터페이스 이름으로 해당 인터페이스를 상속받는 클래스를 new하면
해당 인터페이스에 정의된 메소드를 쓸 수 있다고 봤습니다..

위 개념에 따라서 샘플을 만들었는데, 동작은 합니다.
하지만 이 샘플처럼 쓰는게 맞는지 궁금합니다.

첨부된 파일의 코드를 봐도 됩니다만.

-----------------------------------------
    public interface IBookPage
    {
        void PreviousPage();
        void NextPage();
    }
-----------------------------------------
    public class Book
    {
        protected string sName { get; private set; }

        public Book(string sName)
        {
            this.sName = sName;
        }

        public virtual void Cover()
        {
            Console.Out.WriteLine("Book - " + this.sName + " - Cover");
        }
    }
-----------------------------------------
    public class EnglishBook : Book, IBookPage
    {
        public EnglishBook(string sName)
            : base(sName)
        {
        }

        public void PreviousPage()
        {
            Console.Out.WriteLine("EnglishBook - " + this.sName + " - PreviousPage");
        }

        public void NextPage()
        {
            Console.Out.WriteLine("EnglishBook - " + this.sName + " - NextPage");
        }

        public void SomethingZ()
        {
            Console.Out.WriteLine("EnglishBook - " + this.sName + " - SomethingZ");
        }

        public override void Cover()
        {
            Console.Out.WriteLine("Book - " + this.sName + " - Cover - 하드커버");
        }
    }

    public class ProgramBook : Book, IBookPage { ... }
    public class CookBook : Book, IBookPage { ... }
-----------------------------------------


개념적으로 책은 "영어","요리","프로그램"책이 있고 공통적으로 책 이름과 커버가 있습니다.
그리고 "이전 페이지", "다음 페이지"의 개념이 있습니다.

이 경우 영어책을 쓸려면 아래처럼 EnglishBook클래스를 new하여 쓰면 됩니다.

    EnglishBook eb1 = new EnglishBook("영어1");
    eb1.Cover();
    eb1.PreviousPage();
    eb1.NextPage();
    eb1.SomethingZ();

그리고 프로그램 책이면 ProgramBook클래스를 new하면 되구요.

여기서 책은 상관없고 모든 책에 대해서 "다음 페이지", "이전 페이지"를 쓸려면

    IBookPage bpEB2 = new EnglishBook("영어2");
    bpEB2.PreviousPage();
    bpEB2.NextPage();

이렇게 인터페이스 IBookPage를 대상으로 new하여 쓰면 되겠다 싶은데
이렇게 쓰는게 맞는지 궁금합니다.


또한 샘플에는 virtual 키워드를 써서 override를 구현해서 써봤는데
오버라이드도 이렇게 쓰는게 맞는지 궁금합니다.

질문이 깔끔하지 못하지만 회신 부탁드리겠습니다~
수고하세요~








[최초 등록일: ]
[최종 수정일: 10/8/2013]


비밀번호

댓글 작성자
 



2013-10-08 10시38분
넵 맞습니다. 인터페이스는 "계약"이라는 한 만디로 정리할 수 있지요. ^^
정성태
2013-10-10 12시38분
[김재영] 계약이라!!!
더 만들다 보면 이 단어가 체감이 될거 같습니다. ^^
답글 감사합니다~ :)
[guest]

1  2  3  4  5  6  7  8  9  10  [11]  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5713김기헌8/17/202212801안녕하세요 rgb 계산 오차가 있는데 원인을 모르겠습니다.. [3]
5712하태8/17/202213411안녕하세요 background service에서 user32dll 접근 질문 드리겠습니다.! [2]
5711하태8/16/202212747안녕하세요! 윈도우즈 해상도 관련 질문 드립니다. [1]
5710장성욱8/12/202212644c# 시리얼 통신 관련 질문 [3]
5709초보8/12/202211610WPF 커맨드 관련 질문 [2]
5708민성8/11/202212430안녕하세요 c#에서 화면의 배율 및 레이아웃을 변경할려면 어떻게 해야 할까요? [2]파일 다운로드1
5707민성8/10/202212399WPF 엣지 컨트롤에서 화면이 안보이는 현상 [2]파일 다운로드1
5706종규8/7/202215204WPF 에서 SVG 아이콘 사용 방법 문의 [2]
5705김기헌8/6/202212778안녕하세요 선생님 싱글톤 패턴 간단 질문 [2]
5704따봉이8/4/202212648EventHandler 관련 [1]
5703조민준8/3/202211960안녕하세요 정적 멤버 초기화 관련 간단한 질문 [2]
5702석우8/3/202212186C# WPF Ribbon IsMinimized 프로퍼티 변경 감지 방법문의 [2]파일 다운로드1
5701김기헌8/1/202213167foreach 문으로 컬렉션을 열거할 때 궁금한 점 [2]
5699갓경섭7/29/202213774C# 프로그램 느려짐 현상 [2]
5698kss7/29/202214689ValueTask 질문입니다. [5]
5697스팸7/28/202215747윈도우서버 Port 고갈문제 (Event ID 4227, 4231) [3]파일 다운로드1
5696유석7/27/202215377닷넷 4.X 와 닷넷 6.0 버전 차이 [6]
5695초보코더7/26/202215897[WCF] EndpointNotFoundException 기본 연결이 닫혔습니다. 원격 서버에 연결할 수 없습니다. [1]
5693차가워7/22/202214473socket 종료 시 reveive수신부에서 에러 나는거 처리 문의 [5]
5692도비7/21/202214059Ubuntu LVM 확장 관련 [1]파일 다운로드1
5691따봉이7/21/202214812Task 비동기 UI 크로스 쓰레딩 Err 관련 [1]
5690훈이7/20/202212590wpf질문입니다 [2]
5689질문7/20/202212816비동기 함수를 사용하는 방법에 대한 질문입니다 [1]
5688김정현7/11/202211347소스 디버깅(F5)시 프로그램 켜지지 않고 디버깅 가능한 상태 [1]
5687규철7/6/202212140개발업무 문서 관리 방법 문의 [3]
5686권용완7/5/202211825Linq Entites 에서 string[]에 담긴 데이터를 제외하는 방법 문의 [3]
1  2  3  4  5  6  7  8  9  10  [11]  12  13  14  15  ...