인터페이스, Enum(열거형)

정제로·2023년 9월 13일
0

C#

목록 보기
27/30
post-thumbnail

인터페이스

namespace ASD
{
	interface IMethod
    {
    	void Attack(string monsterName, int playerDmg)
        void Defend(string monsterName, int playerDmg)
        ....
    }
}

이런식으로 사용하게 된다.

인터페이스는 객체지향의 꽃(?)이라 한다.. 고수일수록 잘 다뤄야한다!

특징

  1. 인터페이스는 메서드, 이벤트, 인덱서, 프로퍼티만 가질 수 있다
  2. 무조건 접근제한자는 public으로 고정
  3. 인터페이스는 자신을 상속받는 자식클래스에 오버라이딩을 강제
  4. 자식 클래스에서 구현할 메서드는 모두 public접근제한자로 작성
  5. 인터페이스내에서는 구현이 불가
  6. 인터페이스를 인스턴스화 할순 없지만, 상속받는 자식클래스는 인스턴스화 가능
  7. 여러개의 인터페이스 상속가능 (다중상속 가능)
  8. 불문율로 인터페이스 이름 첫글자는 I 로 시작
    ex. interface ILogger, interface INamer...

사용예시

namespace Test
{
    interface ITimer
    {
        void TimeRightNow(string message);
    }

    class Time : ITimer
    {
        public void TimeRightNow(string message)
        {
            Console.WriteLine($"{System.DateTime.Now}, {message}");
        }
    }

    class MainClass
    {
        static ITimer timer = new Time();

        public static void Main()
        {
            timer.TimeRightNow(Console.ReadLine());
        }
    }
}

이런식으로 자식클래스에서 강제를 할때 사용!

여기서 드는 의구심

추상클래스와 인터페이스의 차이는 뭘까??

추상클래스와 메서드도 마찬가지로 자식클래스에서 구현을 강제하는것이 맞다... 다른점을 찾아보자!

interface vs abstract class

분류interfaceAbstract Class
접근 지정자함수에 대한 지정자를 가질수 없고 기본적으로 public이다추상메서드를 제외한 함수에 대한 접근지정자를 가질 수 있다
구현구현 불가, 서명만 가능구현 제공 가능
속도interface가 상대적으로 느림abtract가 상대적으로 빠름
인스턴스화추상적이며 인스턴스화 불가인스턴스화 불가
필드가질 수 없다필드와 상수 정의 가능
메소드추상메소드만 존재비추상 메서드 존재 가능

가장큰 이점은 역시 다중상속이다.

인터페이스는 행동을 요구하고
추상클래스는 개념을 요구한다는 느낌으로 전 받아들여요

인터페이스는 필드가 없고
추상클래스는 필드도 존재할 수 있기 때문이죠


Enum

Enum 은 여러개의 상수를 하나의 컨테이너에서 관리하기 위해 사용하는 자료형

enum의 사용이유중 가장 중요한건 자동완성 기능이다.
우리가 관리해야할 것들이 많다면, 우리 머리로 일일히 기억하기 어렵기때문에 사용을 적극 권장한다.

enum 인덱스번호로 접근

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

namespace Test
{ 
    class MainClass
    {
        enum ANIMALINZOO
        {
            TIGER,
            LION,
            PANDA,
            RABBIT,
            FOX
        }

        public static void Main()
        {
            Console.WriteLine((int)ANIMALINZOO.FOX);
        }
    }
}

이렇게 배열처럼 몇번째 값인지 접근할 수 있게 된다.
index번호로 접근가능~

enum 인덱스번호지정

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

namespace Test
{ 
    class MainClass
    {
        enum ANIMALINZOO
        {
            TIGER = 10,
            LION,
            PANDA,
            RABBIT,
            FOX
        }

        public static void Main()
        {
            Console.WriteLine((int)ANIMALINZOO.FOX);
        }
    }
}

이러면 자동으로 첫번째 인덱스 값이 10으로 설정되어, FOX의 인덱스는 14가 된다

enum 인덱스번호지정은 꼭 1씩증가 안해도 됨

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

namespace Test
{ 
    class MainClass
    {
        enum ANIMALINZOO
        {
            TIGER = 10,
            LION,
            PANDA,
            RABBIT = 123897,
            FOX
        }

        public static void Main()
        {
            Console.WriteLine((int)ANIMALINZOO.FOX);
        }
    }
}

이렇게 인덱스는 자유롭게 변경가능

profile
초보자입니다.. 잘못된 정보, 달게 받겠습니다..

0개의 댓글

관련 채용 정보