상세 컨텐츠

본문 제목

[C#] Interface에 대해서

<개인공부>/[C#]

by 데브수달 2024. 10. 27. 10:42

본문

728x90
반응형

 

안녕하세요. 
오늘 오전 아침에는 어제 저녁에 책을 읽으면서 공부했던 내용의 예제를 

구현해보았는데요.

1번째로는 추상클래스와 인터페이스의 공통점과 차이점,사용목적에 대해서 어제 표로 정리한 것을 올려드릴게요.

   추상클래스  인터페이스
공통점 - 선언만 있고, 구현 내용이 없다.
- 객체 생성 불가  ex) [   ]   변수명 = New [   ] ; 와 같이   
차이점 추상 메소드 선택적 사용 가능 추상 메소드만 지님
-> but, 인터페이스 상속한 Class는 메소드 전부 구현해야한다. 
이건, 이따 예제보면 이해하기 쉬워요!!
다중 상속 불가 다중 상속 가능 
사용목적
(공통점)
공통적인 기능을 만든다.
사용목적
(차이점)
- 개념의 확장
- 구체적인 기능 재정의
- 동일한 개념의 기능들을 새롭게 구현에 초점
- 기능 명세를 구현하도록 함.
  abtract class 스마트폰_기본
{
   통화기능, 문자 메시지 기능, 와이파이 기능
   (전부 메소드 ) 
   회사마다  뭔가 다르게 구현하고 싶은 기능들은
  멀티미디어 기능, 블루투스 기능
  (전부 추상 메소드) 선언만 하고 
  이 후에 각 회사 클래스의 추상클래스를 상속받    으면  거기서 해당 추상 메소드를 ->메소드로     구현해주는 것. 
}
class A회사 :스마트폰_기본
{
 통화,문자,와이파이,멀티미디어, 블루투스
 기능(전부 메소드)
}
.
.
.
interface I통화기능{}
interface I문자 메세지기능{}
interface I와이파이기능{}
interface I멀티미디어기능{}
interface I블루투스기능{}

class 스마트폰_기본 : 통화,문자,와이파이,멀티,블루기능
{
      각각의 받아온 기능 명세에 대해서 class에서 
      기능 구현을 함.

}

 

2번째로는 interface를 지정하고, 생성된 interface를 상속한 class는 어떻게 선언하는지! 

 interface를 지정

요기서 interface에 대한 이름을 지정할 때 C#개발자들 사이에서 지켜야 할 이름 규칙이 있어요.
예를들어서 제가 예제에도 나오지만 , Unit 이라는 인터페이스명을 쓰고싶어요.
그럼 이게 인터페이스라는 것을 명시하기 위해서 해당 Unit 앞에 I 라는 대문자를 붙여서
IUnit 과 같이 인터페이스명을 만들어줍니다!!

접근 지정자 interface 이름 : 기반 인터페이스
{
}


interface를 상속한 class
 이 부분에서 아까 표로 말한 인터페이스를 상속한 class이기에 메소드 전부 구현해야합니다.

접근 지정자 class 자식 클래스 이름 : 인터페이스
{
}

 

요기서 잠깐!!! 
접근 지정자가 무엇이냐!! 
보통 초반에 배우는데 
아래의 표를 확인해주시면 되겠습니다!! 

저희가 예제에서 사용할 접근 지정자는 public가 될거에요! 
모든 코드에서 접근 가능한 접근 지정자! 


3번째 이제 실제 구현했던 빌드와 함께 소스를 보여드릴게요.
해당 소스는 C#프로그래밍 정석 -이창현지음 책을 보면서 공부한 내용을 정리한 것입니다.

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

namespace Interface
{

    public interface IUnit
    {
        void Attack();
        void Move();
    }

    public class Zergling : IUnit
    {
        public void Attack()
        {
            Console.WriteLine("저글링 : 공격한다.");
        }
        public void Move()
        {
            Console.WriteLine("저글림 : 이동한다.");
        }
    }
    public class Dragon : IUnit
    {
        public void Attack()
        {
            Console.WriteLine("드라곤 : 공견한다.");
        }
        public void Move()
        {
            Console.WriteLine("드라곤 : 이동한다.");
        }
    }
    // 프로그램 구현 위치 
    internal class Program
    {
        static void Main(string[] args)
        {
            Zergling z = new Zergling();
            z.Attack();
            z.Move();

            Dragon d = new Dragon();
            d.Attack();
            d.Move();
        }
    }
}

 

아마 프로그램 생성할 때 , 꼭 C# 콘솔앱(.NET Framework)로 프로젝트 생성할 것.

그리고, ▷ 이 버튼 클릭 아마 안될거에요 
Form을 생성해서 실행시키는 게 아닌 콘솔 실행이기에 실행 및 빌드할려면
ctrl + F5 + F6을 눌러주세요.

 

그럼 요기까지 Bye Bye 

저는 이어서 책에 나온 컨트롤들을 하나하나 만들어보면서 익숙해져야겠어요...

주말도 시간이 너무 빨리 흘러가요 ㅠㅠ아아아아아...;;

기초 빨리 쌓아야하는데, 

와중에 목표 설정

오늘내로 최소한, C#프로그래밍 정석 끝내기..;;
그래야 SQLD 공부도 하고 JSP,리눅스명령어, 컴퓨터구조, 프로그래밍언어론, 자료구조 등을 빠르게 기초다지기 들어가죵
내일부터는 코테99클럽 파이썬 | 비기너도 시작이라고요 ㅠㅠ 

728x90
반응형

관련글 더보기