[C#] Thread(1) 스레드의 개념 스레드는 프로세스 내에서 실행되는 여러 흐름의 단위로 하나의 프로세스는 여러 개의 스레드가 독립적으로 실행될 수 있다.도로가 프로세스라면 스레드는 차선 System.Threading namespace주요 기능내용Interlocked멀티스레드 기반에서 스레드 간에 공윧되는 객체를 동기화한다.Monitorlocks, wait, signals를 통해서 스레드 객체를 동기화 한다.Mutex2개 이상의 스레드가 공유자원에 동시에 접근할 때 동기화한다.Thread스레드를 생성, 제어하는 기능을 제공한다.ThreadPool해당 프로세스내의 스레드를 관리하는 기능을 제공한다.Timer설정한 시간 간격으로 메소드를 실행하도록 기능을 제공한다.ThreadStart스레드에서 실행되는 메소드를 등록하는 델리게이트이다.Wait.. 2024. 9. 28. [Computer Science] 프로세스(Process) 메모리에 올라와 실행되고 있는 프로그램의 인스턴스Word.exe라는 프로그램이 있다면 이 프로그램을 실행한 것이 프로세스 여러 프로세스를 함께 돌리는 작업은 동시적, 병렬적 혹은 이 둘의 혼합으로 이루어짐 동시성하나의 프로세서가 여러 작업을 돌아가며 수행ABC라는 작업이 있다면 A 조금하고 B 조금 하고 C조금하고.... 이렇게 돌아가며 일부분씩 진행한다.이렇게 진행중인 작업을 바꾸는 것을 ContextSwitching이라고 함 이 과정이 매우 빠르기 때문에 동시에 작업이 진행되는 것처럼 보임 병렬성프로세서 하나에 여러 코어가 달려 각각 동시에 작업들을 수행듀얼코어, 쿼드코어, 옥타코어와 같은 명칭이 붙는 멀티코어 프로세서가 달린 컴퓨터에서 사용할 수 있는 방법 2024. 9. 28. [C#] event event는 class내에 특정한 이벤트가 일어났음을 외부의 이벤트 가입자들에게 알려주는 기능을 한다. 이벤트 선언 형식접근 지정자 event 델리게이트 이름; event는 delegate와는 달리 할당연산자( = )를 사용할 수 없으며, 오직 이벤트 핸들러 추가 ( += ) 혹은 기존 이벤트 핸들러 삭제( -= )만을 할 수 있다. 또한 delegate와 달리 해당 클래스 외부에서는 직접 이벤트를 호출할 수 없다. EventHandler 델리게이트를 사용한 이벤트 처리c#에서는 이벤트를 처리하기 위한 권장 이벤트 처리기(EventHandler 델리게이트)가 제공이 된다.내부 라이브러리에 선언되어 있는 EventHandler는 다음과 같다.public delegate void EventHandler(ob.. 2024. 9. 28. [C#] Types Value TypeReference Types메모리를 가리키는 방식메모리를 직접 가리킴메모리를 가리키는 참조를 통해 가리킴해당하는 형식intfloatenumboolstructclassobjectarraystring복사 방식Value Type끼리 할당 할 때 값을 그대로 복사Reference Type끼리 할당할 때 참조값만을 복사메모리 생성변수 생성과 동시에 메모리 생성변수의 선언과 메모리 생성이 분리됨 2024. 9. 28. [Unity] Vector의 크기 magnitude VS sqrMagnitude magnitude는 Vector의 크기를 반환한다. √(x*x+y*y+z*z)sqrMagnitude는 Vector의 크기의 제곱을 반환한다. (x*x+y*y+z*z) 제곱근은 곱셈보다 연산속도가 느리기 때문에 비교를 위한 경우 magnitude를 사용하는 것보다 비교를 할 대상을 제곱해 비교하는 것이 더 빠르다. Vector3 target;float distance = 2;if (target.magnitude > distance){ //생략}즉 위의 코드보다 아래와 같이 사용하는것이 더 빠르다.Vector3 target;float distance = 2;if (target.sqrMagnitude > distance * distance){ //생략} 2024. 9. 28. [C#] const보다는 readonly가 좋다 -const ● 컴파일타임 상수. ● 컴파일타임에 변수가 값으로 대체된다.const int a = 100;if(100 == a)때문에 위의 코드는 아래와 정확히 동일한 IL코드로 컴파일된다.if(100 == 100) ● 내장된 숫자형, enum, 문자열, null에 대해서만 사용가능한 한계가 있다. -readonly ● 런타임 상수. ● 컴파일타임에 값으로 대체되는 것이 아닌 상수에 대한 참조로 컴파일된다. 때문에 메서드 내에서 선언이 불가능하다. ● 생성자에서 초기화될 수 있다. ● 어떤타입과도 함께 사용될 수 있다. ● 상수의 값이 런타임에 평가되어 동일클래스의 인스턴스라 하더라도 인스턴스별로 서로 다른 값을 가질 수 있다. readonly 대신 const를 사용하면 성능이 빠르다는 장점이 있지만.. 2024. 9. 28. [Design Patterns] 스트래티지 패턴 (strategy pattern) 스트래티지 패턴에서는● 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.● 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.디자인 원칙 1애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다.바뀌는 부분을 캡슐화하면 바뀌지 않는 부분에 영향을 미치지 않고 그 부분만 고치거나 확장할 수 있다. 디자인 원칙 2구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.Duck의 행동을 DuckClass에서 구현하거나 서브클래스에서 구현하는 것이 아닌 인터페이스로 표현된 행동을 사용하게 된다. 따라서 Duck의 행동을 구현한 것은 Duck서브클래스에 국한되지 않는다. 디자인 원칙 3상속보다는 구성을 활용한다.행동을 상속받는 대.. 2024. 9. 28. [C#] Func 대리자 (지정된 형식의 값을 반환하는 대리자) namespace: System Func delegate는 Action과 유사하다.Action은 반환형식이 없는 경우 사용하는 반면 Func는 반환값이 필요할 때 사용한다. [Func 형식]Func 대리자의 오른쪽 끝(TResult)은 반환값의 타입이다. public delegate TResult Funcout TResult>();public delegate TResult Funcin T,out TResult>(T arg);public delegate TResult Funcin T1,in T2,out TResult>(T1 arg1, T2 arg2); . . .. 2024. 9. 28. [Algorithm] Boids boids는 생물의 집단행동(새 무리의 이동 등)을 시뮬레이션 하는 알고리즘이다. 기본적으로 3개의 규칙을 따른다.1. 응집(Cohesion): 주변 boid들과 평균위치를 향한다.2. 분리(Separation): 주변 boid들과 충돌하지 않도록 방향을 돌린다.3. 정렬(Alignment): 주변 boid들과 같은 방향을 향한다. 응집 - CohesionBoid는 주변의 Boid의 곁으로 가려는 성질이 있다.주변 Boid의 위치의 평균을 구해 해당 방향으로 향한다.Vector3 Cohesion(Transform[] _targets){ Vector3[] targets = Change(_targets, (Transform target) => target.position); return Avera.. 2024. 9. 28. [C#] 확장메서드 기존 코드의 변경 없이 기능을 확장시키는 기능 정적 클래스에서만 정의가 가능하며 확장 메서드의 첫 매개변수는 확장할 타입을 지정한다.//확장 메서드는 정적클래스에서만 정의가 가능하다.public static class ListExtensionMethods{ //확장메서드의 첫 매개변수는 타입을 지정한다. public static List RemoveBack(this List _list, int _count) { if (_count 2024. 9. 28. 이전 1 2 다음 반응형