컬렉션(Collection)은 자료를 모아놓은 데이터 구조, 자료구조들을 의미하는데 배열과는 다르게 크기가 가변적이에요.
컬렉션을 사용하기 위해서는System.Collections.Generic네임스페이스를 추가해줘야 해요.
몇가지의 컬렉션을 사용예시와 함께 알아봐요.
리스트는 가변적인 크기를 갖는 배열이라고 생각하면 돼요.
리스트를 생성할 때는 리스트에 담을 자료형을 지정해줘요.
배열의 길이는 Length를 사용하지만 리스트는 Count를 사용한답니다.
List<int> numbers = new List<int>(); // 빈 리스트 생성
numbers.Add(1); // 리스트에 데이터 추가
numbers.Add(2);
numbers.Add(3);
numbers.Remove(2); // 리스트에서 데이터 삭제
foreach(int number in numbers) // 리스트 데이터 출력
{
Console.WriteLine(number);
}
foreach 문은 자료구조 내의 자료들을 가지고 반복 작업을 수행하는 함수로 자료구조를 사용할 때 가장 많이 사용되는 반복문이에요.
딕셔너리는 키와 값으로 구성된 데이터를 저장하는데 중복된 키를 가질 수 없으며, 키와 값의 쌍을 이루어 데이터를 저장해요.
using System.Collections.Generic;
Dictionary<string, int> scores = new Dictionary<string, int>(); // 빈 딕셔너리 생성
scores.Add("Alice", 100); // 딕셔너리에 데이터 추가
scores.Add("Bob", 80);
scores.Add("Charlie", 90);
scores.Remove("Bob"); // 딕셔너리에서 데이터 삭제
foreach(KeyValuePair<string, int> pair in scores) // 딕셔너리 데이터 출력
{
Console.WriteLine(pair.Key + ": " + pair.Value);
}
스택은 후입선출 구조를 가진 자료구조에요. 후입선출이란 가장 나중에 들어온 자료가 가장 먼저 반환되는 것을 말합니다.
Stack<int> stack1 = new Stack<int>(); // int형 Stack 선언
// Stack에 요소 추가
stack1.Push(1);
stack1.Push(2);
stack1.Push(3);
// Stack에서 요소 가져오기
int value = stack1.Pop(); // value = 3 (마지막에 추가된 요소)
큐는 선입선출 구조를 가진 자료구조에요. 선입선출은 먼저 들어온 자료가 가장 먼저 반환되는 것을 말합니다.
Queue<int> queue1 = new Queue<int>(); // int형 Queue 선언
// Queue에 요소 추가
queue1.Enqueue(1);
queue1.Enqueue(2);
queue1.Enqueue(3);
// Queue에서 요소 가져오기
int value = queue1.Dequeue(); // value = 1 (가장 먼저 추가된 요소)
해쉬셋은 중복되지 않은 요소들로 이루어진 집합이에요.
HashSet<int> set1 = new HashSet<int>(); // int형 HashSet 선언
// HashSet에 요소 추가
set1.Add(1);
set1.Add(2);
set1.Add(3);
// HashSet에서 요소 가져오기
foreach (int element in set1)
{
Console.WriteLine(element);
}
이 이후에도 컬렉션들이 더 있지만 나중 강의에서 더 자세히 알려주신다고 해요!
오버로딩은 동일한 이름의 메서드를 다양한 매개변수 목록으로 다중 정의하는 개념이에요.
주로 메서드의 기능이나 작업은 동일하지만 입력값에 따라 다르게 동작해야 할 때 사용돼요.
void PrintMessage(string message)
{
Console.WriteLine("Message: " + message);
}
void PrintMessage(int number)
{
Console.WriteLine("Number: " + number);
}
// 메서드 호출
PrintMessage("Hello, World!"); // 문자열 매개변수를 가진 메서드 호출
PrintMessage(10); // 정수 매개변수를 가진 메서드 호출
오버라이딩은 부모 클래스에서 상속받은 메서드를 자식클래스에서 재정의 해서
사용하는 것을 의미해요.
메서드의 이름, 매개변수 및 반환타입이 동일하도록 작성해 주어야 합니다.
오버라이딩을 통해서 자식클래스에서 자신에게 맞는 동작을 구현할 수 있어요.
public class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing a shape.");
}
}
public class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle.");
}
}
public class Rectangle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a rectangle.");
}
}
Shape shape1 = new Circle();
Shape shape2 = new Rectangle();
shape1.Draw(); // Drawing a circle.
shape2.Draw(); // Drawing a rectangle.
오버로딩과 오버라이딩은 서로 다른 개념으로 둘이 자주 헷갈릴 수 있는 기능이므로 잘 기억할 수 있도록 해요!
벽에 가로막혀 버렸어요...
시간도 얼마 없는데 걱정이 큽니다.