목록공부(개발)/c# (8)
Programmer:)
if문을 3개이상 쓴다면 switch문이 가독성 및 성능이 더 좋다는걸 인지하며 사용중이지만작성하며 참 귀찮다고 생각하던 참이였다.switch 표현식은 참 아름답구나!bool updownupdown = mode switch { State.A => !A_updown, State.B => !B_updown, _ => !C_updown }; C#8.0 , .NET Core 3.0 이상 또는 .NET 5 이상에서 지원
Shallow Copy 얕은복사 객체나 데이터 구조를 복사할 때, 원본 데이터의 참조를 복사하는 방식. 복사된 객체와 원본 객체가 같은 메모리 공간을 공유하게 되므로 한 쪽에서의 변경이 다른 쪽에도 영향을 미치게된다. 장점 -복사과정이 간단하고 빠름. -메모리 사용량 적음 -복사하는 데이터의 크기에 상관없이 일정한 시간과 메모리 소비 단점 -원본객채와 복사된 객체가 같은 메모리를 공유하여 하나의 객체를 변경하면 다른 객체에도 영향발생 -데이터 일관성을 유지하기 힘들 수 있음. => 원본데이터를 효율적으로 공유하고, 변경 내역을 모두에게 전파해야 할 때 유용하게 사용된다. 그라나 독립적인 복사본이 필요하거나 데이터의 변경을 제어해야할 경우에는 깊은 복사를 사용해야한다. Deep Copy 깊은복사 객체나 데..
메모리는 한쌍처럼 주소-값을 가지고 있다. Stack (스택) -Value Type(값 형식)이 저장되는 공간 -프로그램을 실행하는데 필요한 메모리 공간으로 지역변수, 매개변수(파라미터) 리턴값 등이 저장된다. -미리 그 크기를 파악할 수 있기에 컴파일 타임에 결정된다. -함수가 종료되는 시점에 자동의 정리됨. -사용할 수 있는 메모리의 크기가 작고 한정적임. -가비지컬렉션의 의해 관리되지 않기 때문에 성능상 많은 장점이 있다. Heap (힙) -Reference Type(참조 형식)이 저장되는 공간 -C#에서 new 예약어로 생성하는 모든 참조형 객체는 힙에 할당됨. -런타임에 할당되는 영역 -스스로 데이터 제거 불가. -delete , 가비지컬렉션등의 메모리 관리가 필요 (할당만 한 후 해제하지 않으..
Value Type (값 형식) : 실질적인 데이터의 값 (ex : int, float, bool) Reference Type (참조 형식) : 값의 데이터 주소를 가지고 있는 값 (ex : array, list..) Value Type를 저장하는 곳은 Stack(스택) Reference Type를 저장하는 곳은 Heap(힙) Boxing (value -> Object) -스택에 있는 데이터가 힙으로 복사되는 작업 (Stack -> Heap) -리소스를 많이 잡아먹는다. Unboxing (Object -> value) -힙에 있는 데이터가 스택으로 복사하는 과정 (Heap -> Stack) -리소스를 많이 잡아먹는다. ArrayList arrayList = new ArrayList(); arrayList..
구조체 -기본적으로 public -스택 영역에 생성 -스택에 할당되기 때문에 가비지컬레션에 관리되지않아 성능면에서 상대적으로 좋음 -하지만 메모리 크기면에서 한정적임 -자신의 크기만큼 스택공간을 할당하게 되므로 크기가 클수도 메모리 사용량도 늘어남 (메모리 크기 제약이 있으므로 과도하게 커지면 스택오버플로우 발생) -일반적으로 함수는 없고 변수 저장으로 사용 (그렇다고 함수를 못만드는것은 아님) -값타입 ( 함수를 호출해서 객체를 전달하면 원본과 다른 복사본이 생성됨) -때문에 이 객체의 멤버변수를 변경해도 해당 함수의 스택 영역에 복사된 객체의 변수만 변경될 뿐 원본은 영향받지 않음. -상속불가 클래스 -기본적으로 private -힙 영역에 생성 -힙에 할당되기 때문에 메모리 크기에서는 좀 더 자유로움..

기본적인 람다식을 선언하는 형식 매개_변수_목록 => 식 ex) delegate int Calcu(int a, int b); static void Main(string[] args) { Calcu calc = (int a, int b) => a + b; //두개의 int 형식의 매개변수를 받아 둘을 더해 반환하는 메소드 } C# 컴파일러는 위 코드를 더 간결하게 만드는 형식유추라는 기능을 제공하고 있다. Calcu clac = (a, b) => a+b; 로 사용가능 하다. delegate int Calcu(int a, int b); static void Main(string[] args) { Calcu calc = delegate(int a, int b) { return a + b; } }..

callback: 이 코드가 실행할 세부 코드는 컴파일 시점이 아닌 실행 시점에 부여함. 선언 한정자 delegate 반환형식 델리게이트이름 (매개_변수_이름); -델리게이트는 메소드에 대한 참조이기 때문에 자신이 참조할 메소드의 반환 형식과 매개 변수를 명시해줘야 한다. ex) delegate int MyDelegate(int a, int b); **델리게이트는 인스턴가 아닌 int, string 과 같은 형식(Type)이다. 델리게이트를 이용하여 콜백을 구현하는 과정 1. 델리게이트를 선언한다. 2.델리게이트의 인스턴스를 생성한다. 인스턴스를 생성할 때는 델리게이트가 참조할 메소드를 매개 변수로 넘긴다. 3. 델리게이트를 호출한다. 델리게이트는 왜 사용하는가? 프로그래밍을 하다 보면..

public static Vector3 Lerp(Vector a, Vector b, float t); Vector a 와 Vector b 사이의 float t를 반환한다. 주로 한 템포 늦게 플레이어를 따라가는 카메라를 구현할 때 사용한다. 위치,숫자,색 등을 부드럽게 변환할 때 유용하다. ex) //Move the gun to the zoom position transform.localPosition= Vector3.Lerp(transform.localPosition, zoomPosition, Time.deltaTime * moveSpeed); //Change the camera field of view gunCamera.fieldOfView = Mathf.Lerp(gunCamera.fieldOfVie..