본문 바로가기
[ Unity ]/- 유니티 실습

유니티 Array, List, Dic , Call by Reference, Call by Value

by MRG 2024. 8. 31.
728x90
반응형

 

▣설명: 동일한 타입의 데이터가 연속적으로 메모리에 저장되는 자료구조입니다.
특징:
고정 크기: 배열의 크기는 선언 시 고정됩니다.
빠른 접근: 인덱스를 통해 빠르게 접근할 수 있습니다.
단점: 크기가 고정되어 있어 유연성이 떨어집니다.
예시: int[] numbers = new int[5];

 

https://learn.microsoft.com/en-us/dotnet/api/system.array?view=net-8.0

 

Array Class (System)

Provides methods for creating, manipulating, searching, and sorting arrays, thereby serving as the base class for all arrays in the common language runtime.

learn.microsoft.com

 

 

▣ 설명: 배열과 비슷하지만 크기가 동적으로 조정될 수 있는 자료구조입니다. 내부적으로는 동적 배열로 구현됩니다.
특징:
가변 크기: 요소의 추가와 제거가 용이합니다.
유연성: 배열보다 더 유연한 자료구조입니다.
단점: 배열보다 다소 느릴 수 있습니다.
예시: List<int> numbers = new List<int>();

 

https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1?view=net-8.0

 

List<T> Class (System.Collections.Generic)

Represents a strongly typed list of objects that can be accessed by index. Provides methods to search, sort, and manipulate lists.

learn.microsoft.com

 

 

▣ 설명: 키-값 쌍으로 데이터를 저장하는 자료구조입니다.
특징:
키-값 저장: 고유한 키를 통해 값을 저장하고 검색할 수 있습니다.
빠른 검색: 해시 테이블을 사용하여 빠르게 데이터를 검색할 수 있습니다.
단점: 메모리 사용량이 증가할 수 있습니다.
예시: Dictionary<string, int> ageMap = new Dictionary<string, int>();

 

https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?view=net-8.0

 

Dictionary<TKey,TValue> Class (System.Collections.Generic)

Represents a collection of keys and values.

learn.microsoft.com

 

 

 

 

 

 

▣ Call by Value (값에 의한 호출)
설명: 함수에 인수로 전달된 값이 복사되어 함수 내부에서 사용됩니다. 원본 데이터는 변경되지 않습니다.
특징:
복사본 사용: 함수 내에서 인수로 전달된 값의 복사본이 사용됩니다.
원본 불변: 원본 데이터는 함수 외부에서 변경되지 않습니다.

▣ Call by Reference (참조에 의한 호출)
설명: 함수에 인수로 전달된 변수가 함수 내부에서 참조되어 사용됩니다. 원본 데이터가 변경될 수 있습니다.
특징:
참조 사용: 함수 내에서 인수로 전달된 변수의 참조가 사용됩니다.
원본 변경 가능: 함수 내부에서 원본 데이터가 변경될 수 있습니다.

 

▣ ref 키워드는 C#에서 함수의 매개변수를 참조에 의한 전달(Call by Reference) 방식으로 전달하기 위해 사용됩니다. ref 키워드를 사용하면 해당 변수를 함수에 전달할 때, 그 변수의 참조가 전달되어 함수 내에서 해당 변수의 값을 직접 변경할 수 있게 됩니다.

▣ ref 키워드의 주요 특징:
원본 데이터 변경:

▣ ref를 사용하면 함수 내에서 매개변수로 전달된 변수의 값을 변경할 수 있으며, 이 변경 사항은 함수 호출이 끝난 후에도 원본 변수에 반영됩니다.
초기화된 변수만 전달 가능:

▣ ref로 전달되는 변수는 함수가 호출되기 전에 반드시 초기화되어야 합니다. 이는 함수가 호출되기 전에 변수에 유효한 값이 있어야 한다는 의미입니다.
함수 시그니처의 일관성:
함수의 정의와 호출에서 모두 ref 키워드를 명시해야 합니다. 즉, 함수 선언과 호출 시 모두 ref를 사용해야 합니다.

 

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-types

 

Value types - C# reference

Value types vs reference types, kinds of value types, and the built-in value types in C#

learn.microsoft.com

 

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/reference-types

 

Built-in reference types - C# reference

Learn about reference types that have C# keywords you can use to declare them.

learn.microsoft.com

 

 

▣ 배열(Array) 관련 문제

- 문제 1
배열 int[] numbers = { 5, 8, 12, 15, 20 };가 주어졌을 때, 배열의 모든 요소를 더한 값을 출력하세요.

- 답
int[] numbers = { 5, 8, 12, 15, 20 };
int sum = 0;
foreach (int number in numbers)
{
    sum += number;
}
Debug.Log(sum); // 출력: 60



- 문제 2
배열 int[] numbers = { 2, 4, 6, 8, 10 };가 주어졌을 때, 배열의 모든 요소를 2배로 만드는 코드를 작성하세요.

- 답
int[] numbers = { 2, 4, 6, 8, 10 };
for (int i = 0; i < numbers.Length; i++)
{
    numbers[i] *= 2;
}
Debug.Log(string.Join(", ", numbers)); // 출력: 4, 8, 12, 16, 20



- 문제 3
배열 string[] words = { "apple", "banana", "cherry", "date" };가 주어졌을 때, 배열의 요소 중 문자열 길이가 5 이상인 단어를 출력하세요.

- 답
string[] words = { "apple", "banana", "cherry", "date" };
foreach (string word in words)
{
    if (word.Length >= 5)
    {
        Debug.Log(word);
    }
}
// 출력: apple, banana, cherry





▣ 리스트(List) 관련 문제


- 문제 1
리스트 List<int> numbers = new List<int>() { 3, 7, 11, 18, 25 };가 주어졌을 때, 리스트의 모든 요소를 역순으로 정렬한 후 출력하세요.

- 답
List<int> numbers = new List<int>() { 3, 7, 11, 18, 25 };
numbers.Reverse();
Debug.Log(string.Join(", ", numbers)); // 출력: 25, 18, 11, 7, 3


- 문제 2
리스트 List<string> fruits = new List<string>() { "apple", "banana", "orange" };가 주어졌을 때, "grape"를 리스트의 첫 번째 위치에 추가하는 코드를 작성하세요.

- 답
List<string> fruits = new List<string>() { "apple", "banana", "orange" };
fruits.Insert(0, "grape");
Debug.Log(string.Join(", ", fruits)); // 출력: grape, apple, banana, orange


- 문제 3
리스트 List<int> numbers = new List<int>() { 10, 20, 30, 40, 50 };가 주어졌을 때, 리스트의 짝수 번째 인덱스에 있는 요소들의 합을 구하세요.

- 답
List<int> numbers = new List<int>() { 10, 20, 30, 40, 50 };
int sum = 0;
for (int i = 0; i < numbers.Count; i++)
{
    if (i % 2 == 0)
    {
        sum += numbers[i];
    }
}
Debug.Log(sum); // 출력: 90




▣ 딕셔너리(Dictionary) 관련 문제


- 문제 1
딕셔너리 Dictionary<string, int> ages = new Dictionary<string, int>() { { "Alice", 25 }, { "Bob", 30 }, { "Charlie", 22 } };가 주어졌을 때, 이름 "Bob"의 나이를 출력하세요.

- 답
Dictionary<string, int> ages = new Dictionary<string, int>() { { "Alice", 25 }, { "Bob", 30 }, { "Charlie", 22 } };
Debug.Log(ages["Bob"]); // 출력: 30



- 문제 2
딕셔너리 Dictionary<string, string> capitals = new Dictionary<string, string>() { { "Korea", "Seoul" }, { "Japan", "Tokyo" }, { "USA", "Washington D.C." } };가 주어졌을 때, 모든 키와 값을 출력하세요.

- 답
Dictionary<string, string> capitals = new Dictionary<string, string>() { { "Korea", "Seoul" }, { "Japan", "Tokyo" }, { "USA", "Washington D.C." } };
foreach (var item in capitals)
{
    Debug.Log($"{item.Key}: {item.Value}");
}
// 출력:
// Korea: Seoul
// Japan: Tokyo
// USA: Washington D.C.


- 문제 3
딕셔너리 Dictionary<int, string> studentGrades = new Dictionary<int, string>() { { 1, "A" }, { 2, "B" }, { 3, "A" }, { 4, "C" } };가 주어졌을 때, 값이 "A"인 모든 키를 출력하세요.

- 답
Dictionary<int, string> studentGrades = new Dictionary<int, string>() { { 1, "A" }, { 2, "B" }, { 3, "A" }, { 4, "C" } };
foreach (var item in studentGrades)
{
    if (item.Value == "A")
    {
        Debug.Log(item.Key);
    }
}
// 출력: 1, 3

728x90
반응형

댓글