C# Practicing(Generic Programming1)

2023. 10. 24. 14:59Game Develop/C# Programming

오늘은 10칸 짜리 배열에 원하는 인덱스에 원하는 정수를 삽입하는 코드를 작성해보고자 한다.

 

1 ~ 10이 차례대로 들어있는 10칸 짜리 배열이 있다. 이 배열의 세번째에 99를 삽입하려고 한다.

 

우선 배열을 만들어주자.

 

이제 2와 3 사이에(세번째) 99를 넣으려면 어떻게 해야할까?

 

가장 먼저 드는 생각은 배열의 세번째에(arr[2]) 99를 대입하고 싶지만,  배열은 데이터 공간이 연속적으로 나열 돼어있기 때문에, 데이터 공간을 잘라내서 그 사이에 새로운 공간을 집어넣는 것이 불가능하다.

따라서 배열의 공간을 넣을 숫자의 갯수만큼 늘린 배열을 하나 더 생성하여 주어야 한다.

 

숫자를 집어넣어줄 InsertNum 함수를 작성해보자.

 

 

InsertNum의 매개변수로 변경할 배열과, 삽입하고자 하는 인덱스, 삽입하고자 하는 값을 받게해보았다.

일단 메인에서 만들어준 arr의 길이를 직접 늘려줄 수 없기 때문에 arr의 길이보다 한 칸 더 많은 배열을 만들어준다.

 
이런 다음 for문으로 resultArr 안에 arr의 값을 하나씩 대입해주어야한다. index 전까지는 resultArr에 arr의 값이 차례대로 대입해주어도 되지만, index에는 value가 삽입돼야하고, index 다음에 다시 arr을 차례대로 대입해주면 된다.
 
 
i의 값이 0 부터 resultArr의 길이보다 작을때 까지 1씩 증가할 때, 만약 i가 index보다 작으면 arr을 resultArr에 그대로 대입해주고, i가 index와 같으면 arr[i]의 값 대신 value를 삽입하여준다. 마지막으로 i가 index 보다 클 경우에는 특이하다. resultArr에 i가 증가함에 따라 차례대로 arr를 대입해주었고, i가 index와 같을 경우에는 resultArr에 value를 삽입해주고 i는 1 증가했다. 여기서 arr와 resultArr의 차이가 생긴다. resultArr는 i의 순서에 맞게 꾸준히 값을 넣어줬지만, arr는 arr의 값 대신 value를 집어넣어 줬을때 한 번 멈췄기 때문에, 위와같이 resultArr의 i 번째에 arr의 i - 1 번째를 넣어주었다.
 
마지막으로 메인의 arr를 직접 참조하여 바꿔주고 싶어서, InsertNum 메서드 매개변수에서 int[] arr 부분에 ref를 추가해주었다. 그렇게 마지막 문장으로 arr = reslutArr;를 추가할 수 있었다.

이에 관한 내용은 다음 시간에 설명하겠다.

 

자 이제 마지막으로 메인함수를 완성해서 원하는 결과 값이 나왔나 출력해보자!

 

 
 
실행해보니 원하는 값이 잘 나온것을 확인할 수 있었다.
 
혹시나 싶어 index 값과 value를 바꿔봤지만 여전히 잘 나온것을 확인할 수 있었다.

 

위와 같이 InsertNum 함수는 int 타입의 값만 삽입할 수 있어서 다른 타입의 변수를 넣어줄 때는 사용할 수 없다. 따라서 위와 전반적은 내용은 같지만 데이터 형식만 다른 함수를 다시 선언을 해줘야 하는데, 굉장히 번거로운 작업이다. 따라서 위의 함수를 다시 만들 필요 없이 데이터 타입만 바꿔서 사용할 수 있는 방법으로 돌아오겠다.