목록프로그래밍 (5)
장난감 연구소
최근 Mongoose를 사용하는 프로젝트를 진행하면서 forEach 함수는 비동기(async) 함수를 기다려주지 않는다는 걸 알게 되었다. forEach 함수의 콜백이 비동기 함수일 때 경험한 문제 문제가 생긴 코드는 아래와 같다. 이 코드는 wantedGenres 배열의 각각의 값에 대해 MongoDB에서 일치하는 오브젝트를 찾아 genres 배열에 넣고자 하는 코드이다. 예상하기에는, forEach의 콜백 함수에서 genres에 모두 삽입이 완료된 후 결과가 출력될 것으로 보였다. 그러나 실제 실행 결과에서는, 최종 결과가 먼저 출력된 후 삽입이 일어났다. let genres = []; wantedGenres.forEach(async (value, index) => { const g = await G..
이 글은 C#에서 public 필드(Field)와 자동 구현 프로퍼티(Auto-Implemented Property) 중 무엇을 사용해야 하는가 고민에서 시작하여, 필드와 자동 구현 프로퍼티의 차이점, 성능에 관해 실험해본 내용을 다룬다. 부족한 부분이 많아 계속 수정해나가고 있고, 그다지 유익한 내용을 담고 있는 글은 아닙니다. 필드와 자동 구현 프로퍼티 객체지향 프로그래밍 패러다임에서는 정보 은닉을 위해 private 변수를 선언하고, 이 변수를 읽고 쓰는 get, set 메서드를 만들기도 한다. 아래 코드처럼 말이다. (참고로 이 get, set은 각각 getter, setter 또는 접근자(accessor), 설정자(mutator)라고 불린다.) class Gun { private int bull..
List의 경우 참조 형식이다. 그래서 단순히 list1 = list2;와 같은 형식으로 대입한다면, list2의 주소 값만 list1에 대입되어 list1의 값이 변경되었을 때 list2의 값도 변경된다. using System.Linq; class Program { static void Main(string[] args) { List list = new List { 11, 10, 9, 15 }; List listclone = list.ToList(); } } 위와 같이 ToList()를 사용하면 list 간에도 간단하게 복사할 수 있다. 단, ToList()의 System.Linq에 정의되어 있으므로 using System.Linq;를 지시해주어야 한다.
Array.Sort()를 사용하면 오름차순으로 배열을 정렬할 수 있다. 그런데 프로그래밍하다 보면, 단순히 오름차순으로 정렬하는 것뿐만 아니라, 기준 항목이 같을 경우 두 번째 항목을 비교하는 등 복잡한 조건으로 정렬해야 할 때도 있다. 이 글에서는 이처럼 복잡한 조건으로 Array.Sort()를 사용해 정렬하는 방법을 다룬다. 람다식 사용하기 람다식은 C#에서 익명 메서드를 만드는 방법 중 하나이다. 대리자와 익명 메서드, 람다식에 대해서 알고 싶다면 링크의 두 글을 확인하기 바란다. #대리자 #무명 메서드와 람다식 람다식에 대해 간단하게 설명하자면, "(매개변수 목록) => 식"의 형태로 표현되는 메서드이다. Array.Sort(배열, 람다식)의 형태로 배열 뒤에 적어주면 정렬할 때 사용된다. 아래 ..
Array.Sort 함수(메서드)를 사용해서 2차원 배열 정렬하는 방법을 찾아 헤맸으나 단순 2차원 배열에서 한 열을 기준으로 정렬하는 것은 어려운 것 같다. 그래서 이런저런 방법을 찾아보고 시도하게 되었다. 그리고 잊어버릴까해서 대안으로 사용할 수 있는 방법을 정리하였다. 더 나은 방법을 알고 있다면, 꼭 알려주기 바란다. 추천 : 가변배열 사용하기 (Linq) C#에서 2차원 배열을 정의하는 방법은 두 가지가 있다. 원래 2차원 배열을 int[,] arr = new int[n][m]과 같이 선언하였다면, 가변배열은 아래와 같이 선언한다. int[][] arr = new int[3][]; arr[0] = new int[] { 1, 2, 3 }; //Console.Write(arr[0][0]); : 1 ..