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

... 16  17  18  19  20  [21]  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
5402민성11/5/20207752안녕하세요 책을 보고 질문하나만 드릴깨요 [2]
5401민성11/3/20206814안녕하세요 이번에도 질문 하나만 드리겠습니다. [2]
5400진우10/29/20206517SQL Server 관련 몇가지 문의 [2]
5399Wpf개...10/21/20206725Binding 된 항목의 갱신 시 간헐적 끊어짐 발생 문제. [2]
5397나그네10/15/20206185.net Core 3.1 에서 Entity Framework 와 ADO.NET 선택에 관해 여쭤봅니다. [2]
5396여정욱10/15/20206283CLR heap 관련 질문 2 [2]
5395여정욱10/14/20208053CLR heap 관련 질문 [2]
5394진우10/12/202011483닷넷코어 (닷넷5) winform wpf는 리눅스/맥에서도 가능한가요? [2]
5393김세용9/23/20207991C#에서 대량의 클래스를 빠르게 생성하는 방법이 없을까요? [6]
5392전경호9/22/20207634WPF에서 WindowsFormsHost의 메모리 누수 문제 때문에 문의드립니다. [1]파일 다운로드1
5391민성9/22/20206945안녕하세요 항상 감사드립니다. 하나 질문 드리겠습니다. [1]
5390alow...9/18/20209827System.AccessViolationException 보호된메모리 부분 예외처리 [1]
5389C# 8...9/18/20208065후위 증감 연산자 오버로딩 방법 좀 알려주세요 [4]
5388영귤9/17/20209019Nullable reference type 에 Non-nullable reference type 을 대입해도 경고가 발생하지 않습니다. [2]
5387하태9/17/20207449안녕하세요! 비동기 통신과 관련하여 질문하나만 드리겠습니다! [3]
5386박민웅9/16/20209228정성태 스승님 안녕하세요 !! [1]
5385영귤9/12/202067133항 연산자에 ref 지원? [1]
5384guest9/10/20206590시작하세요! C# 8.0 프로그래밍 책에 오타가 있는 것 같습니다. [3]
5383민성9/8/20208087안녕하세요 자주 도움을 주셔서 감사드립니다. WPF에서 크롬 브라우저 삽입에 대하여 [1]
5382정씨9/4/20207254[C#] 시리얼통신 수신된 데이터를 그리드뷰에 뿌르는데 일정 시간이 지나면 버벅 거리는 이유가 뭘까요?? [3]
5381질문 있...9/4/20207027웹으로 사용하는 c#과 응용프로그램으로 사용하는 c#이 많이 다른가요?? [2]
5380yeon9/3/20207096winform 의 datagridview는 바인딩이 안 되나요? [1]
5379guest9/2/20209750시작하세요! C# 8.0 프로그래밍 책에 오타가 있습니다. [3]
5378net9/2/20207252mes 응용프로그램을 .net 웹폼으로 만들기도 하나요? [2]
5377net9/2/20206663.net 사용한 웹폼으로 응용프로그램을 만들경우 [1]
5376영귤9/1/20207045nullable 타입간의 비교연산은 그냥 가능한 건가요? [1]
... 16  17  18  19  20  [21]  22  23  24  25  26  27  28  29  30  ...