Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- js
- asp.net core
- c# delegate
- Asp Net Core
- asp.net core mvc
- javascript
- 도커 이미지
- asp core 권한
- docker container
- 리덕스
- C#
- 리액트 타입스크립트
- Docker
- React Redux
- 리액트
- 도커 컨테이너
- asp core mvc
- 도커
- docker layer
- Docker image
- Git
- react typescript
- redux
- 리액트 리덕스
- react ts
- react
- vscode extension
- 리액트 타입스크립트 적용하기
- ASP Core
- 도커 레이어
Archives
- Today
- Total
기초 메모지
C# - 인터페이스(Interface) 본문
인터페이스?
- 객체지향에서 하위 타입(클래스)은 상위 타입(클래스)으로 형변환이 가능하다는 원리를 이용합니다.
- 추상적인 메서드 구현(재정의)을 강제하여 상속받는 클래스에서 구체화를 유도합니다.
- 느슨한 결합(특정 타입에 종속되지 않는 코드)을 유도하여 코드의 유연성을 높입니다.
추상적인 것을 구체적으로
인터페이스에서 추상(범주)화한 메서드를 상속한 클래스에 맞게 구체화합니다.
interface ITransportation
{
// 각 클래스의 공통된 행위(메서드), 특성을 정의하고 구현할 것을 강제.
// 반환 형식, 메서드명, 시그니처만 선언.
// 인터페이스는 내용이 아닌 외형.
// 구체적인 기능 구현은 인터페이스를 상속받는 클래스에서 작성.
// 이동수단의 특성인 움직인다는 것을 Move 메서드로 추상화.
void Move();
// 이동수단의 특성인 짐을 싣는다는 것을 Load 메서드로 추상화.
void Load();
}
class Car : ITransportation
{
// 추상적이었던 메서드를 각 클래스에 맞게 구체화
public void Load()
{
Console.WriteLine("차에 짐을 싣고 갑니다.");
}
public void Move()
{
Console.WriteLine("차로 집에 갑니다.");
}
}
강한 결합을 약한 결합으로
매계변수 타입을 특정 클래스 타입이 아닌 인터페이스 타입으로 받아 상속한 클래스에서 구현(재정의)한 메서드를 실행 합니다.
interface IPower
{
void TurnOn();
void TurnOff();
}
// 각 클래스 별로 추상적인 메서드를 구체화합니다.
class Monitor : IPower
{
public void TurnOn()
{
Console.WriteLine("Monitor : On");
}
public void TurnOff()
{
Console.WriteLine("Monitor : Off");
}
}
class Computer : IPower
{
public void TurnOn()
{
Console.WriteLine("Computer : On");
}
public void TurnOff()
{
Console.WriteLine("Computer : Off");
}
}
class Switch
{
// Switch - 인터페이스 사용
// 상위 클래스(인터페이스)를 상속한 하위 클래스는 상위 클래스(인터페이스) 타입(Type)으로 변환이 가능하다.
/// <summary>
/// /// IPower의 PowerOn를 구현(재정의)한 메소드를 출력
/// </summary>
/// <param name="Device"></param>
public void PowerOn(IPower Device)
{
// IPower 타입의 TurnOn 메서드를 실행한다.
// IPower의 타입을 가져야 하므로 IPower를 상속한 클래스여야한다.
Device.TurnOn();
}
/// <summary>
/// IPower의 PowerOff를 구현(재정의)한 메소드를 출력
/// </summary>
/// <param name="Device">IPower를 상속한 클래스의 인스턴스(Instance)</param>
public void PowerOff(IPower Device)
{
// IPower 타입의 TurnOff 메서드를 실행한다.
// IPower의 타입을 가져야 하므로 IPower를 상속한 클래스여야한다.
Device.TurnOff();
}
// Switch - 클래스 사용
// 타입 별로 PowerOn, PowerOff 메소드가 있어야 한다.
public void PowerOn(Computer Device)
{
// 무조건 Computer 타입(Type)만 매계변수로 받을 수 있다
Device.TurnOn();
}
public void PowerOff(Computer Device)
{
// 무조건 Computer 타입(Type)만 매계변수로 받을 수 있다
Device.TurnOn();
}
}
정리
인터페이스는 도형 놀이와 같습니다.
도형 틀에 모양은 다르지만 도형이라는 범주에 속한 삼각형, 사각형, 육각형 등이 포함할 수 있습니다.
마찬가지로 '인터페이스' 라는 개념도 서로 형태가 다른 타입(클래스)들을 하나의 범주로 묶어 중복된 코드를 제거하는데 목적을 두고 있습니다.
반응형
'Languages > C#' 카테고리의 다른 글
C# - 상수(Constant), 변수(Variable) (0) | 2022.07.07 |
---|---|
C# - 분할 클래스(Partial Class) (0) | 2022.07.05 |
C# - 비동기 처리(async, await) (0) | 2022.07.05 |
C# - 오버라이드(Overrid), 오버로딩(Overloading) (0) | 2022.07.04 |
C# - 델리게이트(Delegate)와 Action<T>, Func<T> (0) | 2022.07.04 |
Comments