전체 글 (59) 썸네일형 리스트형 28. 정렬 알고리즘 알고리즘이란, 컴퓨터가 문제를 해결하는 방식을 설명하는 일련의 과정이라고 한다. 즉, 우리가 지금까지 코딩을 해오면서 만들었던 여러 기능들이 사실은 알고리즘이었던 것이다. 이래도 아직 알고리즘이라는 단어 자체가 이해가 안 될 수 있다. 많은 곳에서 알고리즘이라는 단어를 접할 수 있는데, 유튜브 알고리즘이 대표적인 것 같다. 그래서 많은 사람들이 알고리즘 하면 유튜브만 떠올리는 경우도 있는데, 유튜브 알고리즘은 극히 일부일 뿐이다. 여러 종류의 알고리즘이 있고, 그 중에 유튜브의 영상노출 알고리즘도 있고, 오늘 알아볼 정렬 알고리즘도 있다. 정렬 알고리즘은 우리가 인터넷에서 사용해봤던 내림차순, 오름차순 등, 순서대로 데이터들을 나열해주는 알고리즘이다. 정렬 알고리즘의 종류와 수는 굉장히 다양하지만, 우선.. 27. 반복기(Iterator) 이전에 IEnumerable과 yield를 다룰 때 잠깐 설명했었던 반복기의 개념을 알아보고자 한다. 우리가 자료구조를 관리함에 있어서, 배열이나 컬렉션을 순차적으로 순회하며 각각의 값에 접근할 수 있는 반복문인 Foreach문이 있는데, 이 기능은 IEnumerable 인터페이스를 상속받은 배열이 필요하다고 설명했었다. 그리고 이 foreach문을, 반복기라는 것이 해당 컬렉션을 순회하며 값을참조한다고 했었다. 반복기 Iterator는 자료구조에 저장되어있는 요소들을 순차적으로 접근하는 기능을 한다. c#의 자료구조들은 대부분 반복기를 포함하고 있어 순회가 가능하고, 따라서 foreach문을 사용할 수 있다. 따라서 foreach문을 통한 순회검사는 자료구조의 종류나, 자료구조 내부의 구조가 어떻던지와.. 26. List와 Linked List 자료구조를 배우면서, 그리고 다루면서, 지금 시점에서 가장 자주 사용하는 자료구조를 고르라고 하면 나는 List를 고를 것 같다. c#의 List는 배열 기반의 자료구조로써, 자료구조 이전에 사용하던 배열들을 다룰 때와 유사하게 관리할 수 있기 때문에 그런 것 같다. 오늘은 이 List에 대해 알아보고, Linked List와 비교하면서 Linked List는 무엇인지, List와 다른 점은 어떤 것인지 알아보도록 하겠다. 먼저, c#의 List에 대해 알아보자. List는 앞서 말했듯 배열 기반의 자료구조이다. 따라서 각 항목별로 index가 부여되어있으며, 그 index를 통해 자료에 접근할 수 있다. 또한, 배열과 마찬가지로 index에 접근하여 해당 데이터를 초기화하여 수정하는 것도 가능하다. L.. 25. Queue 지난 시간에는 Stack에 대해 알아보았다. 이번에는 Stack과 같이 배열 기반의 자료구조 중 하나인 Queue에 대해 알아보자. Queue역시 Stack과 마찬가지로 배열구조의 자료구조이다. 그러나, Queue는 Stack과는 다르게 먼저 넣으면 가장 먼저 나오게 되는 선입선출(First in First out)구조로 되어있다. 선입선출 구조는 가장먼저 넣은 값이 가장 먼저 나오게 되는 구조다. 우리가 은행에서 업무를 보기 위해 번호표를 뽑고 기다리는데, 나중에 번호표를 뽑은 사람이 나보다 먼저 업무를 보는 것은 굉장히 불합리하지 않은가? Queue도 이와 같다. 몇몇 멀티플레이 게임에서 매칭 대기열을 얘기할 때, 큐를 돌린다. 큐를 잡는다. 라는 말을 쓰곤 하는데, 이를 떠올리면 좋을 것 같다. 그.. 24. Stack 우리가 다수의 데이터를 한번에 다루고자 했을 때엔, 배열을 사용했었다. 그러나 기존에 사용하던 배열은, 배열의 크기를 상수로 지정해야 했으며, 런타임 중 능동적인 배열의 크기 변화를 필요로 할 경우에 불리하였다. 물론, 14. Array 클래스의 기능을 다루었을 때, Resize라는 빌트인 메서드를 통해 배열의 크기를 변경할 수 있으나, 배열에 값을 추가하거나 삭제할 때 마다 해당 메서드를 호출해야하므로 연산상의 부담이 더해진다. 이를 더 편리하고 효율적으로 관리하기위해, c#에서는 여러가지 자료구조들을 제공하는데, 오늘 다루어볼 것은 Stack이다. Stack은 배열 기반의 자료구조로 가장 큰 특징으로는 후입선출(Last in First out)이 있다. 후입선출은 말 그대로, 나중에 나온 것이 맨 처.. 23. IEnumerable과 yield 메서드를 통해 반환한 값을 전달받을 때, 한번에 전달받을 수 없을만큼 많은 양을 분할해서 전달받거나, 호출받을 때 마다 다른 값을 전달받고싶을 때가 있다. IEnumerable과 yield를 통해 이러한 기능을 구현할 수 있다. 우선, IEnumerable은 배열을 순회할 수 있도록 만들어주는 인터페이스이다. 우리가 foreach를 사용하여 해당하는 배열의 값을 순회하며 접근할 수 있는 것은, foreach문에 넣은 배열이 IEnumerable이라는 인터페이스를 상속받았기 때문이다. 이는 우리가 foreach문을 자주 사용했기 때문에 와닿는, 그러나 조금은 어폐가 있는 예시이기는 하다. 본래의 IEnumerable은, 어떠한 객체를 반복할 수 있도록 만들어주는 것이다. foreach의 배열 순회 역시, .. 22. this와 this생성자 this() 클래스의 내용을 작성할 때. 특히, 생성자를 작성할 때, this라는 키워드를 사용해서 아래와 같이 매개와 멤버를 구분하곤 한다. class Favor { private string name; public Favor(string name) { this.name = name; } } 위와 같이 매개변수로 설정한 변수의 이름과, 멤버변수의 이름이 같을 때, 이를 구분짓기 위해 멤버변수의 이름 앞에 this한정자를 붙여 매개변수의 이름과 구분할 수 있다. 생성자도 오버라이딩이 가능하다. 클래스를 객체화할 때, 생성자의 매개변수를 서로 다르게 하여, 아래와 같이 같은 클래스에서 다형성을 갖춘 객체를 생성할 수 있다. class MyClass { int a, b, c; public MyClass() { a = 1.. 21. 일반화 대리자 Func VS Action 대리자를 사용할 때, 여러 자료형을 다루는 대리자가 필요할 수 있는데, 이를 위해, 일반화한 대리자를 제공한다 이에 해당하는 일반화된 대리자가 바로 Func과 Action이다. 간단히 설명하자면, 반환값이 없는 모든 대리자를 만들 수 있는 것이 Action, 반환값이 있는 모든 대리자를 만들 수 있는 것이 Func이다. Func과 Action의 사용법에 대해 알아보자. class Methods { public void Print() { Console.WriteLine("Void 메서드"); } public void PrintNum(int a, int b) { Console.WriteLine(a + b); } public int Ten() { return 10; } public int Num(float a.. 이전 1 2 3 4 ··· 8 다음