Microsoft MVP성태의 닷넷 이야기
인터페이스에 대해 기초적 질문이 있습니다. [링크 복사], [링크+제목 복사],
조회: 10274
글쓴 사람
김재영 (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]

... 61  62  63  64  65  66  67  68  69  [70]  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
785정성우12/16/200811716Vista 환경에서 VB6로 개발한 어플리케이션이 IE 통해서는 런칭이 안됩니다.. [4]
783서광원11/20/200812463.NET 어셈블리를 COM에서 사용하도록 변경 했을때 배포는 어떻게 해야 하나요? [3]
782김용환10/14/200812764웹서비스에서 캐시를 사용하고 싶습니다. [3]
781이수정9/5/200810989visual studio 2008 관련 질문입니다. [2]
776신현창8/5/200811315VS2005로 실행시 갑자기 COM+ 등록이 안됩니다. [1]
775땡초7/21/200811509조언을 구하고저 합니다. [2]
774남호진7/19/200811903Visual Studio 2005나 2008에서 서버탐색기에연결된 데이터에서 정보를 끌어... [2]
773지워니7/17/200814142웹서비스로 db2의 데이터가 오질 않아요. [1]
984이영구7/16/201114101    답변글 [답변]: 웹서비스로 db2의 데이터가 오질 않아요.
772다자래7/15/200811427스레드와 이벤트를 이용해서 mssql 서버의 저장프로시져의 레코드 진행률을 표현하는 프로그래스바를 구현하려고하는데....막막 [1]
771guest6/26/200811209[WCF] Self host 만드는 방법. [2]파일 다운로드1
770조조5/27/200810959스마트클라이언트에서 stand-alone 형태를 임베디드형태로 변환시 문제.. [1]
769제영한5/20/200810993배포프로젝트에 대한 조언을 구합니다. [2]
767김형중5/6/200812022RMclock 관련 문의 입니다. [1]
766정성태4/28/200812696[데브피아 Q&A 모음] 2008-04-21 ~ 2008-04-24
764정성태4/21/200813502[데브피아 Q&A 모음] 2008-04-14 ~ 2008-04-18 [2]
763단테4/17/200811232COM 객체 생성하는 방법
765정성태4/21/200811923    답변글 [답변]: CreateInstance를 부르시는 것이 추천됩니다.
762이민지4/16/200814970ClickOnce 실행 시 Internet Explorer 7.0에서 에러 메세지 출력 [1]
761이민지4/16/200811493ClickOnce로 배포를 하다가 생긴 문제에 대해 질문드립니다. [1]
760한귀순4/15/200812208DataSet 의 designer.cs [2]
759정성태4/14/200812506[데브피아 Q&A 모음] 2008-04-04 ~ 2008-04-12
7573/28/2008100452008 Server, Vista 에서 RDS 지원? [4]
756손승휘3/24/200813740Microsoft Web Browser OCX 부분이 안전하지 않는 ACTIVEX로 IE에서 인식되어는 점 [1]
754단테3/19/200811026실행파일의 아이콘을 프로그램 적으로 변경할 수 있을까요? [1]
753신동열3/12/200811438비스타의 권한 상승 관련 질문 있습니다. [2]
... 61  62  63  64  65  66  67  68  69  [70]  71  72  73  74  75  ...