정적 배열 데이터 길이에 대해 질문드립니다.
정적 배열의 길이는 미리 초기화 해야 사용하며 길이를 변경할수 없지만 그래도 억지로 하고 싶으면 기존 배열 내용물을 복사 하고서 다시 자기가 원하는 배열의 크기로 인스턴스를 초기화하고 붙여놓는 것을 알게 되었습니다. 그래서 강의를 보다가 문득 더 알고 싶어서 개인적으로 아래와 같이 코드를 작성 했는데요.
class Board
{
int[] data = new int[5] { 0, 1, 2, 3, 4 };
int[] data2 = new int[2] { 5, 6 };
int[] data3 = new int[10] { 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
public void Initialize()
{
Console.WriteLine($"data의 길이 {data.Length}");
Console.Write("data의 내용물 : ");
foreach (int i in data)
Console.Write($"{i} ");
Console.WriteLine("\n");
data = data2;
Console.WriteLine($"data2를 복사한 data의 길이 {data.Length}");
Console.Write("data의 내용물 : ");
foreach (int i in data)
Console.Write($"{i} ");
Console.WriteLine("\n");
data = data3;
Console.WriteLine($"data3을 복사한 data의 길이 {data.Length}");
Console.Write("data의 내용물 : ");
foreach (int i in data)
Console.Write($"{i} ");
Console.WriteLine("\n");
}
}
빌드 한 결과 아래와 같이 나왔습니다.
data의 길이 5
data의 내용물 : 0 1 2 3 4
data2를 복사한 data의 길이 2
data의 내용물 : 5 6
data3을 복사한 data의 길이 10
data의 내용물 : 7 8 9 10 11 12 13 14 15 16
이를 통해 배열의 내용물은 빼고 단순히 길이 변경 가능하다는 것을 알게 되었는데 그렇다면 data의 주소는 어떻게 되는걸까요?
처음의 data의 길이가 data[0]의 주소번으로 시작해서 data[4]의 주소번으로 끝날턴데 data의 길이를 새롭게 정의하면 data의 첫주소가 바뀌어버리는 것인지, 아니면 data의 첫주소는 그대로 사용되고 그 기점으로 늘리고 줄어드는 것인지 알고 싶습니다.
Answer 2
3
초기상태
data = data2 적용 후
data = data3 적용 후
길이를 빼고 내용물을 복사한 것이 아니라,
정말 가리키는 참조 대상만 교체한 것입니다.
위 그림에서 원래 data가 가리키고 있던 0x100번 메모리는
언젠가 GC에 의해 회수되어 날라가겠고,
data 바구니와 data3 바구니가 같은 데이터를 참조하고 있는 상태가 되겠네요.
정말 억지로 data의 데이터를 새로운 마음으로 다시 만들고 싶다면
data = data2가 아니라 data = new int[10] 식으로 새로 생성해줘야 합니다.
물론 이 경우에도 기존에 가리키던 메모리는 주인을 잃고 날라가겠죠.
게임개발에서 주로 어느부분에 알고리즘들이 쓰이는지 궁금합니다
0
170
2
글꼴 바꿔도 자간이 좁아 찌그러져보이시는 분들
0
86
1
NullReferenceException 예외) 같은 실수하시는분 계실까봐 남겨요
0
66
1
parent를 Pos타입으로 만든 이유
0
74
1
콘솔창에 격자가 안나옴 미로 생성 X
0
133
1
격자 생성 안됨 무한루프
0
113
1
BFS 질문
0
143
2
격자 무한 출력
0
166
2
A* 의 PriorityQueue 관련 질문입니다
0
155
2
vscode에서 원그리기
0
179
1
환결설정 강의 원 그리기
0
122
1
15-17분
0
85
1
3:16초에 근데 이렇게 해가지고 부분에 "{}"를 만들어서 자식 node들을 생성하던데 왜 중괄호로 감싸게 만드는 건가요?
0
140
2
동적 배열 관련 질문입니다!
0
209
1
Big-o 표기법에서 시간 복잡도
0
167
1
7:40에서 언급하신 색상이 날아가는 문제 이해를 못하겠습니다
0
151
1
트리구현연습 강의 질문있어요
0
142
1
창은 뜨는데 맵이 나타나지 않아요.
0
174
1
Ctrl F5 하면 나오는 창은 어디서 설정할까요??
0
271
1
void CalcPathFromParent(Pos[,] parent)에 대해서
0
201
2
NullReferenceException예외가 발생했을때 어떻게 해야하나요?
0
228
1
[해결] 환경설정 강의에서 원이 이상하게 그려지는 문제
3
308
2
오른손 법칙에서 플레이어 점이 안 움직입니다
0
243
2
맵 만들기 오류
0
177
1

