Archive

0906 10-인터페이스

피곤핑 2019. 9. 6. 18:07

 - foreach (모든 컬렉션을 순회할 수 있도록)

 - hashset 같은 경우엔 for문으로 돌리기가 힘들다

 - foreach (각 원소의 타입~~) -> 파이썬 같음

 

 - 이런식으로 고칠 수가 있음

 

 

 - 유닛을 돌면서 cloaking 이 가능하면 cloaking 을 하려고 함!

 - 강제 캐스팅은 부모타입으로만 할 수 있음

   ex) ((Wrath)unit).Cloak(); 하려면 마린이 Wrath가 절대 될 수없음 

 

 - is/as 연산자 -> 완전 객체 지향적인 코드!!! 

-> 면접시 어떤 상황에서 is/as 를 써보았냐 - 정말 코딩 해본 사람만이 답할 수 있는 질문,,, ㄷㄷ

 

 - c# 7.0에서만 사용가능함 - 이렇게 되면 as 안써도 됨

 

 - FlyBy랑 Cloak을 사용하기위해서 이제 interface를 사용해야함


interface 

 - 파이썬은 동적언어라 이러한 기능이 없음

 - 동적언어는 실행될때 타입체크를 안하기 때문에 실행시 검사하기떄문에,,,,,,,, "duck typing"

 - Fly라는 계약만 가지고 있다면 어떤것을 가져와도 상관 x

 - interface는 fly를 가지고 있다는 어떤 보장을 하는 것

 - 인터페이스는 관습적으로 앞에 i를 붙여줌

 

1. IFlyable.cs 만들어주기

2. interface는 접근지정자가 없다

3. Icloakable.cs 만들기 

   - 인터페이스는 오직 메서드, 프로퍼티, 만 넣을 수 있음 (1개더있는데 못들음 ㅠ)

4. 

 * 생기는 문제

-> 타입을 검사해 주어야 함

 - 아래와 같이 검사하고 캐스팅 해주어야 함 ! 

 

 - 결과 -> 하지만 코드는 여전히 맞지 않음!

 

 * 마린이 cloak을 갖도록 해줘보자

 - 인터페이스는 상속하는 클래스가 있으면 그뒤에 ,찍고 써주면 됨!

 - 다이아몬드 상속 :  좀 위험함 문제가 있음 하위 클래스가 둘중 어느쪽을 상속받는지 명확하지 않기떄문에

 

* 인터페이스 안에 함수들이 구현이 안되있으면 컴파일 에러가 뜸

 

 ->이렇게 추가해주면 컴파일 에러가 사라진 것을 볼 수있다. 하지만 마린은 cloaking 을 구현할 필요가 없기 때문에 지우고 다크템플러에게 인터페이스 상속을 해주러 갑시다~~~~~

 

-> 캐리어에게 인터페이스를 상속시켜 플라이를 동작시켜준 모습

 

 * 클래스를 두개 다 상속 받지 못하기 때문에 생겨난 개념이 interface

파이썬 같은경우는 다중상속이 가능하기때문에 interface가 없음!

이해를 쉽게하려면 ~~할수있는, ~able로 받아들이는 것이 좋음 ~~의계약, ~~의 보장이라고 이해하면 됨.

-> 여기까지가 객체지향의 기본 개념 ,, ,ㅎ ㅎㅎ,ㅎ,ㅎ, ㅎ

 

 * 인터페이스는 상속이 아닌 구현이다!!!!!! 

 - 다크템플러는 Icloakable 인터페이스를 상속한다 (X) -> 부채를 물려받는 개념!

 

 * 인터페이스가 다른 인터페이스를 상속할 수도 있음 -> 이건 상속 -> 그러나 보통 이렇게까지 복잡하게 쓰진 않음

 

 * 메멘토패턴