컴퓨터/정보처리기사 SW 공학

| 니앙팽이 - 객체지향(OOP) | 3-5 | 인터페이스

객체지향

📕 3. 객체지향 상속


📄 5. 인터페이스

1). 인터페이스?

인터페이스는 구성원이 오직 메소드만 있고 모든 메소드가 추상 메소드인 경우입니다

  • 추상메소드보다 더 심각하게..
    • 혼자서 객체도 못만들고
    • 오직 추상 메소드만 있고, 변수를 선언할 수 없다(단 상수는 선언가능)
  • ✨하지만 다중 상속이 가능!!!✨

2). 특징

  1. 인터페이스의 모든 멤버가 public이고,
    모든 메소드는 알아서 abstract가 된다(public abstract 가 붙은것으로 처리).

  2. 다중 상속이 가능

  3. 인터페이스도 다형성이 가능하다.

    interface Idieable {public void Die();}
    interface Imovable {public void Move(int x, int y);}
    interface monster : Unit , Idieable, Imovable{
        ...
        public void Die(){ 으앙쥬금ㅋ; }
        public void Move(int x, int y){ (x,y)로 가보쟤 };
        ...    
    }
    
    static void Main(String[] argv) {
        Idiable     죽는아이    = new monster();
        Imovable    걷는아이    = new monster();
    }
    
  4. 인터페이스를 구현한다는 의미

  • 인터페이스의 추상 매서드(미완성 설계도)를 구현한다는 의미이다.

3). 추상클래스 vs 인터페이스

추상클래스인터페이스
공통점1. 추상매서드를 가지고 있음
2. 미완성임
1. 추상매서드를 가지고 있음
2. 미완성임
완성하기상속을받아서Implement함으로
구성변수 & 생성자 & 추상매서드추상매서드
클래스이긴함그냥 메소드로 이루어진 껍데기임

4). 왜쓰는건가?

함수의 구현을 강제하기 위해서 사용한다
인터페이스는 인터페이스를 상속받는 클래스가 지켜야 할 내용을 정의할 때 사용합니다.
그리고 방식에 대해 입맛에 따라 구현을 다르게 할떄.

5. 구현

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Interface_EX_1
{
    interface IRunable{void Run();}
    interface IFlyable{void Fly();}
    interface IFloatable{void Floating();}

    class FlyingCar : IRunable, IFlyable
    {
        public static int 만든개수 = 0;
        public FlyingCar()
        {
            만든개수++;
        }
        public void Fly() {
            Console.WriteLine("비행 엔진 작동 : 어케했냐? ㅋㅋ");
            Console.WriteLine("난다!");
            //대충 나는 동작
        }
        public void Run() {
            Console.WriteLine("평범한 지상용 엔진 작동");
            Console.WriteLine("달린다");
            //대충 달리는 동작
        }
    }
    class SwimingCar : IRunable, IFloatable
    {
        public static int 만든개수 = 0;
        public SwimingCar() {
            만든개수++;
        }
        public void Run()
        {
            Console.WriteLine("물에 젖지 않는 지상용 엔진 작동");
            Console.WriteLine("달린다");
            //대충 달리는 동작
        }
        public void Floating()
        {
            Console.WriteLine("수륙 양용 엔진 작동");
            Console.WriteLine("물에 뜸!");
            //대충 물에 뜨는 동작
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            ///////////////////////////////////
            Console.WriteLine("--------------인터페이스로 구현한 물에 뜨는 자동차");
            SwimingCar 물에뜨는자동차1 = new SwimingCar();
            물에뜨는자동차1.Floating();
            물에뜨는자동차1.Run();
            ///////////////////////////////////
            Console.WriteLine("--------------인터페이스로 구현한 하늘 나는 자동차");
            FlyingCar 하늘에나는자동차1 = new FlyingCar();
            하늘에나는자동차1.Fly();

            ///////////////////////////////////
            Console.WriteLine("--------------Static으로 검사하는 하늘 나는 자동차 개수");
            Console.WriteLine(FlyingCar.만든개수);
            ArrayList 하늘자동차 = new ArrayList();
            for (int i = 0; i <= 10; i++) {
                하늘자동차.Add(new FlyingCar());
            }
            Console.WriteLine(FlyingCar.만든개수);
        }
    }
}


참고

  1. https://brunch.co.kr/@kd4/6
  2. https://qzqz.tistory.com/193?category=752329