독개

[C#] 인터페이스 INTERFACE , Loosely Coupling

by #독개#

[🔥 프로그래밍언어/C#] - [C#] 추상 클래스 Abstract

 

독한 개발자

C++, C#, Autohotkey 의뢰,강의 등을 다룹니다

nanagame2.tistory.com

인스턴스는 모든것이 Abstract 이다.

정의

  • Abstract Method와 같이 선언부만 포함하는 형식
  • 클래스와는 구분됨. 다중 상속 가능
  • 인스턴스화 될 수 없음
  • 인터페이스를 상속한 클래스는 반드시 인터페이스에서 선언된 메서드를 구현해야 한다
  • 속성(property 사실 메서드선언)도 포함될 수 있음
  • only 규격만 정의한다

사용목적

  • 표준화, 규격화, 계약 등등의 의미

응용

  • 인터페이스와 다형성
  • 인터페이스를 이용한 콜백 구현
  • 느슨한 연결(Loosely Coupling)

특징

인터페이스는 대문자 I로 시작하는 것으로 약속

Ixxxalbe 이렇게 쓰기도 한다 (IEnumerable,IComparable,IDisposable등)

 


#실습 - 구성

    public interface IMachinable
    {
        public void Start();
    }

    abstract public class Car : IMachinable
    {
        public string Brand = "BMW";
        abstract public void Start(); //인터페이스의 Start구현
    }

    public class Sonata : Car
    {
        override public void Start()
        {
            Console.WriteLine("소나타의 시동을 킵니다");
        }
    }

    public class Morning : Car
    {
        override public void Start()
        {
            Console.WriteLine("모닝의 시동을 킵니다");
        }
    }

#실습 - 구현

1. Loosely Coupling
        static public void Main(string[] args)
        {
            Sonata sonata = new Sonata();
            Morning morning = new Morning();
            CommandStart(sonata);               //출력: 소나타의 시동을 킵니다
            CommandStart(morning);              //출력: 모닝의 시동을 킵니다
        }

        static public void CommandStart(IMachinable obj)
        {
            obj.Start();
        }

        /*이렇게 해도 사실은 되지 최상위까지 안가도*/
        //public void CommandStart(Car obj)
        //{
        //    obj.Start();
        //}
2. Tightley Coupling
        /* Tightly Coupling 강력한 연결 */
        public void CommandStart(Sonata obj)
        {
            obj.Start();
        }
        public void CommandStart(Morning obj)
        {
            obj.Start();
        }

 

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

[C#] 제네릭 함수, 클래스  (0) 2022.11.28
[C#] 구조체 Struct  (0) 2022.11.28
[C#] 추상 클래스 Abstract  (0) 2022.11.28
[C#] ToString()의 활용  (0) 2022.11.28
[C#] 모든 클래스의 조상 Object클래스  (0) 2022.11.28

블로그의 정보

독한 개발자

#독개#

활동하기