본문 바로가기
반응형

개발/기본) 기본기75

기본기)c#) 무시 항목 무시 항목 C# 7.0부터 C#에서는 애플리케이션 코드에서 의도적으로 사용되지 않는 자리 표시자 변수인 무시 항목을 지원합니다. 무시 항목은 할당되지 않은 변수에 해당하므로 값을 가지지 않는다고 한다. '_' 의 형태로 선언되는 항목은 무시 항목으로 처리된다고 한다. 예시로 Task를 무시하고 비동기 작업에서 생성되는 모든 오류를 무시하려고 하는 의도로 처리가 된다. private static async Task ExecuteAsyncMethods() { Console.WriteLine("About to launch a task..."); _ = Task.Run(() => { var iterations = 0; for (int ctr = 0; ctr < int.MaxValue; ctr++) iterati.. 2021. 4. 14.
Tip) vi 명령어 정리 vi 명령어 정리 vi 편집기에서 ESC를 를 통해서 여러 가지 상태로 변경하게 되는데 자주 사용하는 명령어들을 정리했다. vi(Visual Editor) 편집기는 Unix 계열 운영체제에서 주로 쓰이는 오픈 소스 문서 편집기이다. 다음과 같다. 명령 모드(Command Mode) esc i 현재 커서 위치에 삽입(입력모드) a 현재 커서 바로 다음위치에 삽입(입력모드) x 커서가 위치한 곳의 글자 1개 삭제 dw 커서가 위치한 곳에서 부터 단어 삭제(커서의 위치를 기준으로 다음 띄어쓰기전까지) dd 커서가 위치한 곳의 한 줄 삭제 p dd의 명령을 복구 u 방금 한 명령 취소(실행취소 Ctrl + z 기능) 0 커서가 줄의 맨 앞으로 이동 $ 커서가 줄의 맨 끝으로 이동 G 파일 끝으로 이동(대문자) .. 2021. 4. 1.
기본기) Seed Random 구현 방식(고정랜덤) Seed Random 구현 방식(고정 랜덤) Random이라는 난수를 발생시키는 과정에서 늘 항상 고정으로 특정 처리를 하고 싶은 경우에 사용한다. 실제 난수발생기 로직으로 볼 수 없고 '선형 합동 생성기'라고 한다. 특정 시드를 기준으로 늘 항상 같은 List를 값을 반환해주는 코드이다. public class SeedRandom { private int seed; private List m_listShuffleData = new List(); public SeedRandom(int nSeed, int _totalCount) { seed = nSeed; ShuffleIntList(_totalCount); } #region Private Method private float Random() { seed+.. 2021. 3. 8.
기본기)c#) is 연산자, as 연산자 is 연산자, as 연산자 is 연산자는 자료형 타입 (형식)과 일치하는지 확인하기 위해서 사용한다. 사용 방식은 다음과 같다. 변수 is 타입으로 선언하게 되면 형식이 맞는지에 대한 return 값 (bool)으로 확인이 가능하다. using System; public class Employee : IComparable { public String Name { get; set; } public int Id { get; set; } public int CompareTo(Object o) { if (o is Employee e) { return Name.CompareTo(e.Name); } throw new ArgumentException("o is not an Employee object."); } } .. 2021. 3. 5.
기본기)빌보드 기법(Bill-Board) 빌보드 기법(Bill-Board) 빌보드 기법이라는 것은 3D 공간상 오브젝트를 카메라의 정면으로 바라보게 하는 기법으로 시점에 대한 처리를 할 때 많이 사용하는 기법이다. 어느 방향으로 이동을 하더라도 항상 같은 면을 보여준다. - 객체의 면의 법선 벡터 n, 근사한 상향 벡터 u가 있을 때, 외적을 통해 수직 벡터 r을 구하고, 위 벡터에 수직인 벡터 u' = n cross r로 구할 수 있음. 위에서의 벡터들로 회전 행렬 Mr = (r, u', n)을 구할 수 있다. 카메라를 바라보는 방식은 Y 축을 기준으로 빌보드를 처리하면 된다. Y축으로 빌보드를 처리하는 공식은 다음과 같다. Unity 에서는 Transform.LookAt으로 처리할 수 있다. Unity Documentation : [링크] .. 2021. 2. 15.
기본기)List Loop in remove elements List Loop in remove elements c#에서 List를 Loop 하는 과정에서 Remove를 하게 되면 인덱스 에러가 발생하는데 List를 ToArray를 사용해서 List를 인스턴스 시킨 상태로 삭제를 하는 것을 보게 되어서 포스팅하게 되었다. foreach (var item in destroyList.ToArray()) { destroyList.Remove(item); } Microsoft ListToArray : [링크] List.ToArray 메서드 (System.Collections.Generic) List의 요소를 새 배열에 복사합니다.Copies the elements of the List to a new array. docs.microsoft.com 개인적으로는 ToArra.. 2021. 2. 6.
기본기)c#) Nullable 값 형식 ( ? 연산자) Nullable 값 형식 프로그래밍을 하다 보면 Null에 대한 예외 처리를 많이 한다. c# 8.0 이상부터 지원하는 기능으로 Nullable이라는 형식은 System.Nullable의 구조체로 기본값이 정의되지 않는 값을 표시해야 하는 경우에 null 허용 값을 사용한다. 사용 방식은 다음과 같다. 자료형 다음에 ? 을 붙이고 사용하게 되면 null을 허용하는 변숫값으로 사용할 수 있다. double? pi = 3.14; char? letter = 'a'; Vector3 ? verctor3 = null; int m2 = 10; int? m = m2; bool? flag = null; // An array of a nullable value type: int?[] arr = new int?[10]; N.. 2021. 2. 2.
기본기)인터페이스(interface) 인터페이스(interface) 인터페이스는 구현에 대한 정의를 표현하는 예약어로 정의에 대한 공통된 구현을 할 때 사용된다. 기능에 대한 추상화를 제공하는것을 목적으로 한다. 비슷한 추상클래스와 인터페이스를 비교 하면 다음과 같다. 인터페이스(interface) 추상클래스(abstract class) 접근지정자 -기본적으로 public -함수에 대한 접근 지정자를 가질수 없다. -함수에 대한 접근 지정자를 가질 수 있다. 구현 -구현에 대한건 기술할수 없다. -구현 제공 가능 속도 -상대적으로 느림 -상대적으로 바름 메소드 -추상메소드만 가능 -추상메소드, 추상메소드 말고도 가능 필드 -필드를 가질수 없음 -필드 및 상수 정의 가능 제약 -선언된 메소드에 필수로 구성 -필수로 구성하지 않아도 됨. 사용방.. 2021. 1. 10.
기본기)Lazy <T> 클래스 Lazy 클래스 쓰레드에서 종종 보이는 클래스로 '지연 생성'을 하는 클래스를 말한다. 지연 생성이라는 건. 이미 생성이 아닌 접근(Acees)하는 순간 생성하는 것을 말한다. 사용하는 곳은 다음과 같다. 1.리소스를 많이 사용해서 실행하는 순간 생성으로 인한 성능 향상이 필요한 경우에 사용 (웹사이트)등에 기술 최적화에 많이 사용된다.) 2.무한 스크롤 같은 부분로딩하는 과정 3.멀티 쓰레드에서 싱글톤의 데이터에 안전하게 생성해야 하는 경우에 사용 예제 코드를 보연 다음과 같다. Doc의 예제 코드이다. using System; using System.Threading; class Program { static Lazy lazyLargeObject = null; static LargeObject Ini.. 2021. 1. 7.
기본기)c#) 문자열 보간 (특수문자$) c#) 문자열 보간 (특수문자) c#에서는 '$'로 보간 된 문자열로 식별이 가능하다. 이 기능은 c# 6부터 사용이 가능하다. 문자열 보간을 하면 가독성이 좋지고 포맷 형식도 좀더 편리하게 사용이 가능하다. 예시는 다음과 같다. string name = "Mark"; var date = DateTime.Now; // Composite formatting: Console.WriteLine("Hello, {0}! Today is {1}, it's {2:HH:mm} now.", name, date.DayOfWeek, date); // String interpolation: Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, i.. 2021. 1. 4.
기본기)DFD(Data Following Diagram) DFD(Data Following Diagram) DFD의 경우는 데이터를 중심으로 각 소프트웨어 내의 각 프로세스를 따라 흐르면서 변화되는 모습을 도식화한 다이아그램이다. DFD는 가장 보편적으로 사용되는 다이아그램 중 하나로써 데이터의 전체적인 흐름을 알 수 있기 때문에 여러모로 활용 가능성이 높다. 특성은 다음과 같다. 도형이 그려지는 그림 중심의 표현이다. 다차원적(Multidimensional) 의 표현이다. 자료(Data)기반이기 때문에 제어(Control)에 대해서는 기술문서가 필요하다. 표현하기 힘든 시스템은 하위 항목으로 DFD를 구성하기도 한다. 말로 표현하기보다는 도식화하면 한눈에 알 수 있다. ★★☆☆☆ 2020. 11. 16.
기본기)c#) WeakReference Class WeakReference Class c#에서의 가비지 수집에 의거해서 수집되는 항목에 포함될 수 있도록 개체의 연관성을 '약한 참조'의 형태로 선언하는 방식이다. 네임스페이스:System 어셈블리:System.Runtime.dll using System; using System.Collections.Generic; public class Program { public static void Main() { // Create the cache. int cacheSize = 50; Random r = new Random(); Cache c = new Cache(cacheSize); string DataName = ""; GC.Collect(0); // Randomly access objects in the c.. 2020. 11. 2.
기본기)코드 난독화(Code Obfuscation) 코드 난독화(Code Obfuscation) 코드 난독화(Code Obfuscation)라는 것은 코드를 바로 직관적으로 알 수 없도록 어떠한 규칙에 의거해서 코드를 변환시켜서 코드를 읽기 힘들게 만들어서 보안적인 측면에서 적용되는 기술이다. 코드 난독화는 코드를 변경시키는 것이고 바이너리 난독화는 컴파일 후에 생성된 바이너리를 역공학(Reverse Engineering)을 통해 분석하기 힘들게 변조하는 기술이다. 난독화된 코드는 다음과 같다. 난독화가 되었다고 보안에 완벽한 것은 아니다. 그러나 기본적으로 개발을 진행하는 과정에서는 포함되어야 할 항목이라고 생각한다. ★★☆☆☆ 2020. 9. 7.
기본기)정렬)c#)퀵 정렬(Quick Sort) 퀵 정렬(Quick Sort) 퀵 정렬은 분할 정복 알고리즘으로 평균적으로 매우 빠른 수행 속도로 정렬을 한다고 해서 Quick이라는 이름이 붙여진 정렬이다. 불안정 정렬에 속하고 분할 정렬(merget sort)과 달리 비 균등하게 분할한다. 피벗(Pivot)이라는 개념으로 정렬을 수행한다. 피벗을 기준으로 피벗보다 작은 요소들은 왼쪽으로 옮겨지고 큰 요소들은 피벗의 오른쪽으로 옮겨진다. 피벗을 제욓나 리스트와 오른쪽 리스트를 다시 정렬한다. 분할된 리스트에 대해서 순환 호출을 이용해서 정렬을 반복한다. 리스트가 0이나 1이 될 때까지 반복한다. 퀵 정렬의 단계에 대한 설명은 다음과 같다. 분할(Divide) : 입력 정렬을 피벗을 기준으로 비 균등하게 분할(피벗을 기준으로 왼쪽, 오른쪽) 정복(Con.. 2020. 9. 3.
기본기)람다식(Lambda Expression) 람다식(Lambda Expression) 람다식은 수학의 알론조(Alonzo Church)가 발표한 계산법인데 이를 존 매카시(John Macarthy)가 프로그래밍 언어에 도입하게 되면서 널리 알려졌다. 람다식(Lamdaba Expressions)은 추상화 익명 메서드(Anonymous functions)로써 함수형 프로그래밍에 적합한 문법적 표현방식이다. 람다식의 특징은 다음과 같다. 코드의 간결성과 필요한 정보만 사용하는 방식으로 퍼포먼스의 향상이 있다. 익명 함수의 특성상 외부 캡처나 시간 제약, 디버깅 시 콜 스택의 추적의 어려움, 코드의 난해함이 있을 수 있다. 람다식의 기본적인 표현방식은 다음과 같다. (타입 매개변수, ...)=>{ 실행문 ;} 실제 사용 코드로 보면 매개 인자 생략해서 표.. 2020. 9. 3.
반응형