본문 바로가기
반응형

개발/기본) 기본기70

기본기)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.
기본기)정렬)c#) 셸 정렬(Shell Sort) 셸 정렬(Shell Sort) 가장 오래된 정렬 알고리즘 중 하나로 삽입 정렬의 단점을 보완한 알고리즘이다. 삽입 정렬이 어느 정도 정렬된 배열에 대해서는 빠른 것에 단점을 보안해서 만든 것으로 정렬해야 할 노드의 리스트를 k번째 요소를 추출해서 부분 리스트를 만든다. 이때 간격(Gap)을 기준으로 부분 리스트를 순차적으로 만든다. 간격의 초기값은 정렬할 크기 / 2, 생성된 부분 리스트 개수는 grap과 같다. 각 회전마다 간격 k를 절반으로 줄이면서 회전이 반복될 때마다 부분 리스트에 포함된 값은 증가한다. gap은 홀수로 하는 것이 좋다. gap이 1이 될때까지 반복한다. 배열 10, 8, 6, 20, 4, 3, 22, 1, 0 , 15, 16을 정렬할 때를 예시로 보면 다음과 같다. 코드는 다음과.. 2020. 8. 29.
기본기)정렬)c#) 삽입 정렬(Insert Sort) 삽입 정렬(Insert Sort) 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다. 매 순서마다 해당 노드를 삽입할 수 있는 위치를 찾아 해당 위치에 넣는다. 데이터를 하나씩 저장 이후에 순서를 넣는 방식이다. public void SetInsertSort(List _list){ Logger.LogFormat("[Insert - Sort] Start "); int j, key; for(int i = 1; i =0 && _list[j]> key); j--){ _list[j + 1] = _list[j]; } _list[j + 1 ] =key; thi.. 2020. 8. 29.
기본기)정렬)c#) 선택정렬(Select Sort) 선택정렬(Select Sort) 선택정렬은 첫번째 노드와 두번째 노드부터 마지막 노드까지 차례대로 비교하며 가장 작은 값을 찾아 첫번재에 놓고, 두번째에서 세번째 노드부터 마지막 노드까지의 데이터를 다시 비교하는 방식으로 이 과정을 반복해서 정렬을 수행한다. 1회전을 수행하고 나면 가장 작은 값이 맨 앞에 오기 때문에 그 값을 제외한 나머지 값을 비교한다. 점점 정렬될수록 비교하는 대상이 줄어든다. 배열에 7 4 5 1 3 의 값이 있을 경우는 다음과 같다. 1회전에서는 첫번째 인덱스와 다음인덱스를 비교하며 가장 작은 값을 변경한다. 2회전에서는 두번째 인덱스와 다음 인덱스를 비교하며 가장 작은 값을 변경한다. 마지막 인덱스 전까지 반복한다. public void SetSelectSort(List _li.. 2020. 8. 29.
기본기)정렬)c#) 버블 정렬(Bubble Sort) 버블 정렬(Bubble Sort) 서로 인접한 두 노드를 검사하여 정렬하는 알고리즘 인접한 2개의 노드를 비교해서 크기가 비교 후 정렬 기준에 따라 서로 교환을 한다. 배열에 7 4 5 1 3 의 값이 있을 경우 처음 값인 7을 인접한 노드를 검사한다. 7보다 큰 값이 없으므로 7은 가장 끝에 위치하게 된다. 이런 식으로 모든 인덱스를 비교할 때까지 정렬을 한다. 코드는 다음과 같다. public void SetBubbleSort(List _list){ Logger.LogFormat("[Bubble - Sort] Start "); for(int i =_list.Count-1;i>0 ;i--){ for(int j = 0;j _list[j+1]){ int temp.. 2020. 8. 29.
기본기)Array 와 List 의 차이점 Array 와 List 의 차이점 작업을 하다보면 Array와 List의 차이를 모르고 사용하는 분들이 종종 계신다. 면접문제에서도 간단하게 물어볼수 있는 항목으로 기본적으로 이해하고 가면 좋다고 생각한다. Array 인덱스를 통한 검색이 용의함 연속적인 메모리의 할당 정적인 표현 * 데이터의 크기가 정해져 있고 추가적인 삽입과 삭제가 일어나지 않는 경우에 사용하는 것을 추천한다. List 불연속적인 메모리 공간 할당 포인터를 통한 접근 동적인 표현 *데이터의 크기가 정해져 있지 않고 추가적인 삽입이나 삭제가 빈번히 일어나고 검색이 적은 경우에 추천한다. ArrayList - Object 클래스를 데이터로 받는 Array와 List를 합친 구조 - Reference Type을 넣으면 상관없지만 Value.. 2020. 8. 11.
반응형