박민혁의 개발

인터페이스 참조,값형식 람다 복습 본문

카테고리 없음

인터페이스 참조,값형식 람다 복습

박민혁_kog 2023. 8. 24. 20:55

int.Parse();

ㄴ 오늘 알고리즘 문제로 문자열을 인트로 변화 시키는 문제를 풀었는데 atoi를 쓰며 뭐임 ?? 왜 안댐? c#은 atoi 지원안함? 아니 문자열을 인트로 바꿀경우가 얼마나 많은데!! 이랬는데 검색해보니까 바로 이게 나오더라 불과 하루전에도 고친 코드에 parse가 들어갔는데 이걸 기억을 못했다니 c >> c++로 올때는 향상 된 기능이 대다수 였고 쓰던 기능을 거의 전부 쓸수 있어 몰랐는데 심오한 언어의 세계였다

 

 

인터페이스에서는 변수선언이 안되는데 왜 get set으로는 쓸수 있을까? 

ㄴ인터페이스는 추상적이라 할당이 불가능함

인터페이스에서 필드를 선언 할 수없는 이유는 변수가 있다는 것은 특정 상태를 기억한다는 것이기에 이런 '상태'는 구현 영역에서 처리하는거라 필드는 선언 할 수 없지만 프로퍼티는 get,set 메서드 이므로 상태를 기억하지 않고 가져오거나 변경하는 메서드라서 선언 할 수있다!

 


짧지만 중요해서 한번더 적는다
클래스는 참조형식
구조체는 값형식

 

 

 

람다식 

ㄴ 난 이런게 있다 정도로 넘어갔는데 4주차 과제 코드에 사용 되어서 해석 하는데 애를 먹었다

public bool IsDead => Health <= 0;

이 한줄의 코드 였는데 이즈데스가 헬스라는건 이해했는데 0도 헬스임??? 뭔 소리지? 이해를 못했었는데 답은 이거였다.

 public bool IsDead => (Health <= 0);

즉 IsDead 는 헬스가 0보다 작거나 같은가 or 이상인가 에 따라 트루 펄스로 바뀌는것!! 

즉 피가 0보다 작나요? 네=트루 아니요=펄스

난 지금까지 죽음 판정을 함수로 만들어서 피가 감소하는 구간이 발생할때마다 hecheck를 해줬는데 이런식으로도 가능하다고 배움

람다식 처음 봤을땐? 굳이 이런걸 왜 쓰지? 위대한 선조들이 필요한 함수들을 만들어 놨을텐데? 이런생각이였는데 생각보다 앞으로 큰 영향을 받을거 같다

 

OnCharacterDeath?.Invoke(player);

 

 

델리게이트

대리자

  • 함수를 담을수 있는 변수     = 한번에 여러개를 할 수 있음 A안에 a, b, c 를 담아두고 a만 발동시킬시 abc다 작동
  • 코드를 수정하지 않고 확장할수 있다   - 공격이란 이벤트에  데미지 종류가 물리 데미지에 조건시 속성 뎀 추가 및 제거 등
  • 접근할수 없는 함수를 작동시킬수 있다!!!!!!  -  다른 클래스에 함수 발동가능 ex 내가 때렸을때 맞은에 hp감소 
  • 메소드 주소를 할당시 델리게이트가 대신해줌!   - 중요하다고 적어놓은거 같은데 생각해보니 위에가 더 중요한거같음

값이 아닌 코드 자체를 넘기고 싶을 때 사용 

event 는 프로그래밍에 어떤 일이 생겼을 때 실행되는 객체 (델리게이트를 event 한정자로 수식해서 만듬)

이벤트는 델리게이트에 event를 수식해서 선언한 것.

가장 큰 차이점 : 이벤트는 인터페이스 내부에 선언할 수 있지만, 델리게이트는 선언할 수 없음

이벤트는 public으로 선언되어 있어도, 자신이 선언되어 있는 클래스 외부에서 호출할 수 없다 이는 이벤트 기반 프로그래밍에서 안정성을 추구하는 것으로, 클래스 외부에서 이벤트에 변화를 줄 수 없게 하기 위함

델리게이트 = 콜백 용도 기본 베이스: 떤 함수를 등록 해놓어고 사용하면 등록한 함수가 실행된다 추가로 다른 함수도 등록을 해놓으면 처음 순서대로 등록한 함수가 실행된다 OnAttack = Attack // 함수 저장