🔴 오늘의 내용 .
- 튜터 님의 강의(배열과 List의 차이 및 장단점) .
- 기획(코드 순서도, 맵 구조도, 공용 클래스 정리)
- 후기 및 내일 일정 .
1) 튜터 님의 강의(배열과 List의 차이 및 장단점)
배열과 리스트의 비교
배열 | 리스트 | |
크기 | 고정 | 동적 |
메모리 할당 | 연속적 할당 | 필요 시 확장 |
삽입/삭제 | 비효율적 (O(n)) | 유연 (O(1) ~ O(n)) |
데이터 접근 | 빠름 (O(1)) | 빠름 (O(1)) |
적합한 상황 | 데이터 크기가 고정적일 때 | 데이터 크기가 변동될 때 |
배열의 메모리 구조
배열은 연속적인 메모리 공간에 저장됩니다. 각 인덱스는 메모리 주소를 참조하며, 인덱스 0부터 시작하는 이유는 배열의 첫 번째 요소가 메모리의 시작 주소를 가리키기 때문입니다. 배열은 크기가 고정되며, 미리 할당된 메모리 공간을 사용합니다.
메모리 주소: [0x1000][0x1004][0x1008][0x100C]
배열 요소 : [ 10 ][ 20 ][ 30 ][ 40 ]
배열과 리스트 속도 비교 코드
var watch = new System.Diagnostics.Stopwatch();
int[] array = new int[1000000];
// 배열에 데이터 추가
watch.Start();
for (int i = 0; i < array.Length; i++)
{
array[i] = i;
}
watch.Stop();
Console.WriteLine($"배열 데이터 삽입 시간: {watch.ElapsedMilliseconds}ms");
List<int> list = new List<int>();
watch.Restart();
// 리스트에 데이터 추가
for (int i = 0; i < 1000000; i++)
{
list.Add(i);
}
watch.Stop();
Console.WriteLine($"리스트 데이터 삽입 시간: {watch.ElapsedMilliseconds}ms");
성능 결과 비교
위 테스트는 대용량 데이터를 배열과 리스트에 각각 추가할 때의 성능을 측정합니다. 배열은 크기가 고정되어 있어 데이터 접근이 빠르지만, 리스트는 크기가 자동으로 조절되므로 메모리 재할당이 발생할 때 성능이 저하될 수 있습니다. 리스트의 초기 크기를 예상하여 설정하는 것이 성능을 향상시킬 수 있습니다.
리스트의 초기 용량 설정
리스트는 동적으로 확장되지만, 성능을 최적화하려면 예상되는 데이터 크기에 맞춰 초기 용량을 설정하는 것이 좋습니다.
List<int> list = new List<int>(100); // 초기 용량 100 설정
추가로 알아두면 좋은 내용
메모리 관리와 가비지 컬렉션
- 배열: 고정 크기이므로 메모리 낭비가 발생할 수 있습니다.
- 리스트: 동적 크기이므로 TrimExcess() 메서드를 사용하여 필요 없는 메모리를 해제할 수 있습니다.
2. 기획(코드 순서도, 맵 순서 및 구조, 공용 클래스 구분)
3. 후기 및 내일 일정
오늘은 어제 저녁 다른 팀들의 기획을 본받아 열심히 기획을 했습니다. 가볍게 짜보려고 시작한 기획이 뿌리와 같이 뻗어나가 하루 사이에 수많은 기획을 할 수 있었습니다. 어제 한 기획으로도 충분히 코드 제작에 좋았지만, 오늘 기획은 주로 클래스들끼리의 구조를 한 눈에 이해하기 쉬운 그림을 그렸고 또한 아이템, 스킬 등과 같이 예제로 있던 것을 실제 값을 넣어주기 위해 제작해보았습니다.
내일은 초기 계획에 필요했던 기획은 다 되어있기에 추가적인 코드가 필요하지 않은 이상, 코드의 부족한 부분을 마저 완성하고 전부 연결하는 과정을 통해 구현하고자 했던 부분에서 아쉬운 부분을 수정하는 기회가 되면 좋겠습니다.
'유니티 스파르타 캠프 3주차' 카테고리의 다른 글
2025-04-25 프로젝트 마무리(PPT 정리, 1~2차 밸런스패치, 버그패치) (0) | 2025.04.25 |
---|---|
25-04-23 팀프로젝트 3일차 (2) | 2025.04.23 |
25-04-21 드디어 팀프로젝트 시작! (2) | 2025.04.21 |