갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 프로그래밍 (146)
      • 자바 (9)
      • 안드로이드 (2)
      • 유니티 (20)
      • C++ (38)
      • C# (56)
      • HTML (2)
      • 파이썬 (3)
      • 자료구조 (2)
      • 알고리즘 (0)
      • 문제풀이 (4)
      • 디자인 패턴 (7)
      • 카카오톡 봇 (1)
      • 엑셀 (1)
      • 기타 (1)
    • 게임 (21)
      • 테일즈위버 (0)
      • 카이로소프트 (1)
      • 순위 (19)
      • 기타 (1)
    • 일상 (13)
      • 카페 (1)
      • 방탈출 (12)
    • 기타 (6)
      • 웃긴자료 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 2020년 게임 매출
  • 모바일 게임 순위
  • 게임 디자인 패턴
  • c# Thread
  • 자바
  • 알고리즘
  • 유니티 그래프
  • 롤 골드그래프
  • c# 코루틴
  • 전세계게임매출순위
  • c# coroutine
  • Unity Graph
  • 유니티 그래프 그리기
  • 글로벌게임매출
  • 게임 매출 순위
  • c# delegate
  • pc 게임 순위
  • c# unboxing
  • 게임매출순위
  • C++ virtual
  • 강남 방탈출
  • C# 예외 처리
  • c# collection
  • C++
  • C++ 상속
  • pc게임 순위
  • 전세계 게임 매출
  • 유니티 골드그래프
  • C++ 소멸자
  • C# boxing

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥

나는야 프로그래머

[C#] 인터페이스 (interface)
프로그래밍/C#

[C#] 인터페이스 (interface)

2020. 1. 17. 17:41
728x90
반응형

1. 핵심 정리

using System;

class Stack {
    public void Clear() { }
}

class Queue {
    public void Clear() { }
    // public void clear() { }
}

class Program {
    static void Main() {
    }
}

 

위와 같은 코드가 있다고 해보자.
Stack 과 Queue 클래스가 있고 그 안에는 Clear라는 동일한 이름의 함수가 있다.
이렇게 된다면 가져다 쓰는 입장에서는 Stack이나 Queue나 Clear를 부르면 되기에 편하게 쓸 수 있다.
하지만 실수로 Queue클래스 내부에 clear로 대소문자를 틀린 함수를 선언했다고 생각해보자.
이렇게 되면 일관성도 없고 가져다 쓰는 입장에서도 혼란이 생길 수 있다.

 ① 일관된 형태의 라이브러리를 만들기 위해 클래스들이 사용하는 메소드의 이름을 약속 할 수없을까?

    => 인터페이스(interface) 문법 사용

 

 ② interface

    => 클래스를 만드는 사람과 사용하는 사람 사이의 규칙(메소드 이름)을 정의 하는 것

 

using System;

interface IList {
    void Clear();
}

// 모든 컬렉션은 반드시 IList 를 구현해야 한다.
class Stack : IList { 
    public void Clear() { }
}

class Queue : IList {
    public void Clear() { }  // ok
    // public void clear() { } - error
}

class Program {
    static void Main() {
    }
}

 ③ C# 언어의 핵심

    => 다양한 인터페이스를 먼저 설계하고(제공하고)

    => 대부분의 클래스를 특정 인터페이스를 구현하는 방식으로 메소드를 제공한다.

    => Ex) 대부분의 Collection 클래스를 ICollection인터페이스를 구현한다. => List에는 Clear() 메소드가 있다는 의미

 


2. interface 문법

using System;

interface ICamera {
    void Take();
}

class MP3 {
    public virtual void Play() { }
}

class SmartPhone : MP3, ICamera {
    public override void Play() { }
    public void Take() { }
    // public virtual void Take() { } - 가능
}

class Program {
    static void Main() {
    }
}

 ① Interface 선언

    => 메소드 앞에 public 등의 접근 지정자를 표기 하지 않는다.

    => C# 8.0 부터는 표기 가능

 

 ② Interface 구현

    => 메소드 구현시 override를 표기 하지 않는다.

    => 가상 메소드 또는 비 가상 메소드로 구현할 수 있다.

728x90
반응형

'프로그래밍 > C#' 카테고리의 다른 글

[C#] System.Object  (0) 2020.01.21
[C#] 타입과 변수의 특징  (0) 2020.01.20
[C#] 클래스 기본 문법  (1) 2020.01.13
[C#] 표준 입력  (0) 2020.01.13
[C#] 표준 출력  (0) 2019.12.14
    '프로그래밍/C#' 카테고리의 다른 글
    • [C#] System.Object
    • [C#] 타입과 변수의 특징
    • [C#] 클래스 기본 문법
    • [C#] 표준 입력
    갓똥
    갓똥
    공부하며 알아가는 내용을 정리해 봅니다.

    티스토리툴바