본문 바로가기

C#

(30)
Event event라는 수식어가 붙은 delegate는 클래스 내부에서만 호출 가능. 제약이 좀 더 걸린 delegate 라 생각하면 됨. 체인으로 묶는 것은 가능하지만 함수를 호출할 수는 없음 물론 클래스 내부에선 뭔 짓을 해도 가능가능 사용 형태 예시 public event Action onAction; ... FindObject... ().onAction += Func();
Delegate - Action, Func using System; ... public Action onReduceHp; //리턴타입이 없고 매개변수가 없는 형태의 delegate public void Progress(Action testDel) { Debug.Log("어쩌고"); } 리턴타입이 없고 매개변수가 없는 형태의 delegate는 하도 많이 쓰다보니까... 앞사람이 틀을 아예 만들어놨음 public Action 이름; 이런 식으로 쓰면 됨 리턴 타입은 없지만 매개변수가 있는 경우 ( public delefate void OnDamage(float damage) public Action onDamage; 이런 식으로 적으면 됨. public Func returnInDel; Func한텐 가 리턴타입. 매개변수가 아님!! public Fun..
Delegate //delegate 리턴타입 델리게이트명(매개변수) public delegate void PrintInfoDel(); void Start() { PrintInfoDel printInfoDel; } public delegate int TestDel(int valueA, int valueB); int Sum(int A, int B) { return A + B; } void Start() { TestDel testDel; testDel = Sum; } public delegate 데이터타입 이름(변수 ... ) 이건 채용 공고같은 것. 조건이다. 함수를 대신 실행해주는 녀석이다! 어떠한 처리 A와 B 사이에 내가 실행하고 싶은 처리가 있을 때 사용해줌. public void TestPrint(PrintInfo..
base.Awake(); 부모 자식 둘 다 awake를 사용하고 싶을 때 자식에 private void Awake() { base.Awake(); } 해주면 부모의 Awake문 먼저 실행시켜준다.
싱글턴 패턴 객체가 하나만 존재하도록 유지시키는 패턴. public class GameManager : MonoBehaviour { public static GameManager instance = null; public int score; public int hp; private void Awake() { if(instance == null) { instance = this; } else { Destroy(gameObject); } } } static으로 했기 떄문에 데이터 영역에 올라와있는 상태. 게임 매니져의 속성같은 느낌임 싱글턴과 일반화를 함께 쓰면 매우 좋다!!
일반화 제네릭은 일반화라고 하며, 공통적으로 사용되는 부분을 추상화한 것을 의미한다. public static T DeepCopy(this T value) where T : class, new() { T clone = new T(); //리플렉션 영역 return clone; } where T : class, new() : T타입이 class이고 new 생성자라는 것을 알려줌 where T : Component : T타입이 Component임. T라는 자격이 가져야 하는 최소 조건. 현재 주석 처리한 리플렉션 영역이 구현되면 T타입으로 웬만한 건 다 확장 메소드로 이용 가능함.
얕은 복사 / 깊은 복사 구조체는 기본적으로 값이 복사되는 깊은 복사 int numA = 10; int numB; numB = numA; numB = 50; Debug.Log(numA); class는 기본적으로 얕은 복사가 일어나 주소를 참조하기 때문에 원본의 값이 변경됨. itemB = itemA 를 했을 경우 itemB에는 itemA의 주소가 들어감. 즉 B의 값을 변경하면 A의 값도 변경됨 이걸 원치 않을 땐 얕은 복사 대신 깊은 복사를 사용해야 함. public Item DeepCopy() { Item temp = new Item(); temp.SetItem(name, price); return temp; } 새로운 Item인 temp를 만들어주고 그걸 리턴 시킴. itemB = itemA.DeepCopy(); 이러면 새..
<T> void PrintValue(T value) { Debug.Log(value); } void Start() { PrintValue((int)3.1415f); PrintValue((float)3.1415f); } 오버로딩 시 간단하게 쓸 수 있음 T Sum(T numA, T numB) { return numA + numB; } 이건 안됨. 현재 T는 미지의 데이터타입이기 때문에 +를 지원할지 어떨지 모르니까 안되는거