튜터님께서 배열과 리스트에 대해 강의를 해주셨습니다. 이해한 내용을 정리해보고자 합니다!
🔷 배열(Array)이란?
▪실행 중 수정 할 수 없는 고정 길이를 가진 동일한 타입의 변수를 모아놓은 데이터 집합
▪System.Array 네임페이스에서 사용
🔸 Array 사용하는 이유
예를 들어 사람들의 나이를 변수에 담는다고 가정하면 아래와 같이 변수를 선언해야한다.
int peopleAge_1 = 20;
int peopleAge_2 = 21;
int peopleAge_3 = 22;
int peopleAge_4 = 23;
int peopleAge_5 = 24;
...
int peopleAge_10 = 30;
확인을 해보면 관리해야하는 사람이 50명이면 50번의 변수를 선언해야하며 변수를 접근하여 값을 얻어올 때 상당히 불편함과 비효율적인 것을 알 수 있습니다.
여기서 위의 코드를 배열을 사용하게 되면 코드의 비효율성을 감소와 변수에 접근하는 문제를 해결 할 수 있습니다.
int[] peopleAges = new int[10]{20,21,22,23...30}
하지만 배열에 접근하기 위해선 index로 접근을 하는데 이때 배열의 index 값은 0부터 시작합니다.
아래는 배열을 접근하는 예제입니다.
Console.WriteLine($"people[0] = {people[0]}"); //people[0] = 20
Console.WriteLine($"people[1] = {people[1]}"); //people[1] = 21
Console.WriteLine($"people[2] = {people[2]}"); //people[2] = 22
...
결과를 확인해보면 일일히 변수를 선언하여 접근을 하는 것보다 배열의 인덱스를 이용하여 접근하는 방법이 매우 간단하고 유용합니다.!
🔸Array 선언 방법
자료형[] 배열명 = new 자료형[크기];
🔸 Array 장점
◾ 하나의 배열내에 여러 자료형의 데이터를 담을 수 있음
◾ 하나의 변수에 여러 데이터를 관리할 수 있음
◾ 코드의 가독성이 높아지고 연산이 편리해짐
◾ 관련성 있는 데이터를 변수에 저장하기 때문에 데이터 찾는데 용이함
🔷 리스트(List)란?
▪index 또는 loop를 통해 액세스할 수 있는 강력한 형식의 개체 컬렉션을 나타나는데 사용되는 제네릭 형식
▪System.Collection.Generic 네임스페이스에서 사용
🔸 List를 사용하는 이유
배열의 문제점을 해결하기 위한 자료구조이다. 데이터의 크기를 알 수 있으면 배열을 쓰는 것이 가장 좋지만 배열 안에 얼마나 들어갈지 모 른다면 List를 사용하는 것이 좋습니다.
List<int> peopleAges = new List<int>() {20,21,22 ... 30}
배열과 동일하게 index로 접근을 할 수 있으며, index 값은 0부터 시작합니다.
Console.WriteLine($"people[0] = {people[0]}"); //people[0] = 20
Console.WriteLine($"people[1] = {people[1]}"); //people[1] = 21
Console.WriteLine($"people[2] = {people[2]}"); //people[2] = 22
...
🔸 List 선언 방법
List<자료형> 변수명 = new List <자료형>();
🔸 List의 장점
◾ 포인터를 통하여 다음 데이터의 위치를 가르켜 삽입, 삭제가 용이함
◾ 메모리 공간의 크기를 동적으로 변경 가능, 크기가 가변이다.
◾ 불연속적으로 메모리 관리가 편함
◾ 메모리의 재사용이 편리
🔷 Array와 List 비교
파라미터 | List | Array |
길이 | 추가되거나 제거 될때 동적으로 사이즈 변경 | 크기가 고정 동일한 데이터 유형의 고정된 개수의 요소만 저장 |
메모리 | 동적이며 무작위 | 정적이며 연속적 메모리 효율적 |
활용 | 데이터를 자주 추가, 제거할 때 유용 | 변경 가능성이 없는 고정된 수의 요소, 비순차적 방식으로 자주 액세스 하는 경우 편리 |
속도 | 실행 속도가 느림 | 실행 속도가 빠름 |
메모리관리 | 메모리 낭비가 없음 | ▪고정 크기의 메모리로 할당 된 후 새 항목이 추가 될 때까지 사용되지 않은 상태로 유지 ▪다른 프로세스에 할당 할 수 없어 메모리 낭비 발생 |
메모리 구조 | ▪비연속 메모리 할당 수행 ▪프로세스를 다양한 블록으로 분리 이후 메모리 공간 가용성에 따라 메모리의 다른 주소 공간에 배치 |
▪연속 메모리 할당 수행 ▪요구사항에 따라 프로세스에 단일 연속 메모리 블록 할당 |
'C# > 개념 공부' 카테고리의 다른 글
[ 내일배움캠프 ] TIL.13 - 인터페이스 ( Interface ) (0) | 2024.05.01 |
---|---|
[ 내일배움캠프 ] TIL.12 - 클래스 ( Class ) (0) | 2024.04.30 |
[ 내일배움캠프 ] TIL.09 - 조건문 & 반복문 (0) | 2024.04.25 |
[ 내일배움캠프 ] TIL.09 - 연산자 (0) | 2024.04.25 |
[ 내일배움캠프 ] TIL.08 - 메소드와 매개변수 (0) | 2024.04.24 |