[C#] - 인터페이스 : interface
C#2019. 4. 11. 13:26
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
○ 인터페이스 : interface |
- 인터페이스 : interface 메소드의 선언만으로 구성(함수의 원형), 선언만으로 구성된 메소드의 묶음이다 클래스가 다중 상속이 불가능하기 때문에 추가적인 메소드 기능들을 넣기 위해 사용한다 관례적으로 인터페이스명 이름 앞에 I 를 붙인다 인터페이스 사용하여 자식클래스에서 매소드 구현 시 public 을 붙여줘야 한다 새로운 인스턴스(객체)를 생성할 수 없다(new 불가)
- 인터페이스 사용 이유 : 하나의 부모로 뼈대를 상속 받고 필요한 기능들은 여러 인터페이스를 사용해서 구현함으로써 기능들을 쉽게 추가할 수 있으며, 클래스간 결합도를 낮추고 확장성, 다형성을 높일 수 있다 인터페이스명과 메소드명만 알고 있으면 개발할 수 있어서 개발 시간을 단축시킬 수 있다 - abstract 와 차이 : abstract는 메소드의 선언뿐만 아니라 구현할 수 있다, interface는 메소드의 선언만 가능 interface는 다중 상속이 가능하다 interface의 변수는 public static final 만 지정가능하고 모든 메소드는 public인 반면 abstract는 static final 아닌 것 가능하고, 메소드도 public private protected 다 사용 가능하다
|
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | namespace ConsoleApp7 { class Program { static void Main(string[] args) { Mammal m1 = new Mammal(); m1.Move(); Lion l1 = new Lion(); l1.Move(); Whale w1 = new Whale(); w1.Move(); w1.Play(); Console.WriteLine("=============================="); m1.Height = 172; m1.Weight = 284; m1.Name = "매머드1"; m1.Age = 4; m1.Stat = "메머드 건강 안좋음"; l1.Height = 400; l1.Weight = 794; l1.Name = "라이온1"; l1.Age = 2; l1.Stat = "사자 건강 좋음"; w1.Height = 1025; w1.Weight = 2004; w1.Name = "고래1"; w1.Age = 8; w1.Stat = "고래 건강이 좀...그래"; m1.Print(); l1.Print(); w1.Print(); } } // ㅡㅡ this 키워드는 클래스 인스턴스 자체를 가리키고 base 키워드는 부모 클래스를 가리킴 ㅡㅡ class Mammal : ISee { // property 속성을 이용 private float height; private int age; private float weight; public float Height { get { return height; } set { height = value; } } public float Weight { get { return weight; } set { weight = value; } } public int Age { get { return age; } set { age = value; } } public string Name { get; set; } public string Stat { get; set; } // 자식클래스에서 재정의 할 메소드 앞에 virtual 붙인다(부모쪽) virtual public void Move() { Console.WriteLine("이동한다"); } // 상속받은 인터페이스의 메소드를 구현(public 써줘야한다) public void See(string s) { Console.WriteLine(s); } public void Print() { // 인터페이스는 인스턴스, 객체를 생성못함(new 사용 x) Console.WriteLine($"{this.GetType().Name} 종의 이름 : {Name}, 나이 : {age}, 키 : {height}, 몸무게 : {weight}"); See(Stat); } } class Lion : Mammal, ISee // 클래스 상속과 인터페이스 상속(다중상속) { override public void Move() { // base 키워드는 부모클래스를 가리킴 base.Move(); } } class Whale : Mammal, ISee { // 오버라이딩 할 자식 클래스 앞에 override 를 붙인다(자식쪽) override public void Move() { Console.WriteLine("물속에서 다닌다"); } public void Play() { Console.WriteLine("물을 내뿜는다"); } } // 인터페이스 선언(인터페이스명에 I 를 붙임) interface ISee { // 선언한 함수의 원형, 각각의 상속받은 곳에서 각기 다르게 구현 후 사용 void See(string s); } } | cs |
'C#' 카테고리의 다른 글
[C#] - 입력받은 것이 숫자인지 판별 : int.TryParse(), 가변 길이 매개변수 : params (0) | 2019.04.11 |
---|---|
[C#] - 다중 인터페이스 사용 시 같은 이름을 가진 메소드 처리 (0) | 2019.04.11 |
[C#] - string.Format 보다 보간법 $ 사용하기 (0) | 2019.04.11 |
[C#] - 오버라이딩 : overriding, 오버로딩 : overloading (0) | 2019.04.10 |
[C#] - 2개의 작업을 병렬로, 비동기 처리 WhenAll vs WaitAll (0) | 2019.04.09 |
댓글()