Luna
[TIL Day 14] 3주차 강의 완강을 향해 :) 본문

오늘의 학습 키워드
- 2주차 강의 진짜 찐 마무리
- 3주차 강의 진행
공부한 내용 본인의 언어로 정리하기
배열
- 1차원 배열
동일한 데이터 유형을 가지는 데이터 요소들을 한 번에 모아서 다룰 수 있는 구조
인덱스를 사용하여 요소에 접근 가능
선언된 크기만큼의 공간을 메모리에 할당 받음
// 배열 선언
데이터_유형[] 배열_이름;
// 배열 초기화
배열_이름 = new 데이터_유형[크기];
// 배열을 한 줄로 선언 및 초기화
데이터_유형[] 배열_이름 = new 데이터_유형[크기];
// 배열 요소에 접근
배열_이름[인덱스] = 값;
값 = 배열_이름[인덱스];
글로 저렇게 적어놓으니까 정확하게 무슨 소리인지 좀 분간이 어렵다.
int[] array1 = new int[5]; // 크기가 5인 int형 배열 선언
string[] array2 = new string[3]; // 크기가 3인 string형 배열 선언
int num = 0;
// 배열 초기화
array1[0] = 1;
array1[1] = 2;
array1[2] = 3;
array1[3] = 4;
array1[4] = 5;
num = array1[0];
// 다른 방법
int[] itemPrices = { 100, 200, 300, 400, 500 };
int totalPrice = 0;
for (int i = 0; i < itemPrices.Length; i++)
{
totalPrice += itemPrices[i];
}
Console.WriteLine("총 아이템 가격: " + totalPrice + " gold");
- 다차원 배열
여러 개의 배열을 하나로 묶어 놓은 배열
행과 열로 이루어진 표 형태와 같은 구조
2차원, 3차원 등의 형태의 배열을 의미
// 2차원 배열의 선언과 초기화
int[,] array3 = new int[2, 3]; // 2행 3열의 int형 2차원 배열 선언
// 다차원 배열 초기화
array3[0, 0] = 1;
array3[0, 1] = 2;
array3[0, 2] = 3;
array3[1, 0] = 4;
array3[1, 1] = 5;
array3[1, 2] = 6;
// 선언과 함께 초기화
int[,] array2D = new int[3, 4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
2차원 배열
// 3차원 배열의 선언과 초기화
int[,,] array3D = new int[2, 3, 4]
{
{ { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } },
{ { 13, 14, 15, 16 }, { 17, 18, 19, 20 }, { 21, 22, 23, 24 } }
};
3차원 배열
3차원 배열 부터는 잘 쓰지 않는다고 함.
다차원 배열을 이용해 데이터 구조를 효율적으로 관리 할 수 있다.
2차원 배열을 이용해 게임 맵을 많이 구현하기도 함.
컬렉션
- 자료를 모아 놓은 데이터 구조
배열과 비슷한 자료구조이며 배열과 다르게 크기가 가변적임
사용하기 위해서는 System.Collections.Generic 네임스페이스를 추가해야 됨

이런 종류가 있는데 이 부분은 나중에 자료구조에서 더 자세히 적을 예정
배열과 리스트
리스트는 동적으로 크기를 조정할 수 있어 배열과는 다르게 유연한 데이터 구조를 구현할 수 있습니다. 하지만, 리스트를 무분별하게 사용하는 것은 좋지 않은 습관입니다.
1. 메모리 사용량 증가
2. 데이터 접근 시간 증가
3. 코드 복잡도 증가
따라서, 리스트를 무분별하게 사용하는 것은 좋지 않은 습관입니다. 데이터 구조를 선택할 때는, 데이터의 크기와 사용 목적을 고려하여 배열과 리스트 중 적절한 것을 선택해야 합니다.
[메서드]
메서드란?
- 일련의 코드 블록으로, 특정한 작업을 수행하기 위해 사용되는 독립적인 기능 단위
- 코드의 재사용성과 모듈화를 위해 사용, 필요할 때 호출하여 실행됨
메서드의 역할과 중요성
- 코드의 재사용성: 메서드를 사용하면 동일한 작업을 반복해서 구현하지 않아도 됩니다. 필요할 때 메서드를 호출하여 작업을 수행할 수 있습니다.
- 모듈화: 메서드를 사용하여 코드를 작은 단위로 분리하고 관리할 수 있습니다. 각 메서드는 특정한 기능을 수행하므로 코드의 구조가 더욱 명확해집니다.
- 가독성과 유지보수성: 메서드를 사용하면 코드가 간결해지고 가독성이 좋아집니다. 또한, 코드 수정이 필요한 경우 해당 메서드만 수정하면 되므로 유지보수가 용이해집니다.
- 코드의 중복 제거: 반복적인 작업을 메서드로 묶어서 사용하면 코드 중복을 방지할 수 있습니다.
- 코드의 추상화: 메서드를 통해 작업 단위를 추상화하고, 메서드 이름을 통해 해당 작업이 어떤 역할을 하는지 파악할 수 있습니다.
메서드 선언과 호출
1) 메서드 구조와 문법
[접근 제한자] [리턴 타입] [메서드 이름]([매개변수])
{
// 메서드 실행 코드
}
- 접근 제한자(Access Modifier): 메서드에 접근할 수 있는 범위를 지정합니다. 주로 public, private, protected 등을 사용합니다.
- 리턴 타입(Return Type): 메서드가 반환하는 값의 데이터 타입을 지정합니다. 반환 값이 없을 경우 void를 사용합니다.
- 메서드 이름(Method Name): 메서드를 호출하기 위해 사용하는 이름입니다. 호출할 때 이 이름을 사용합니다.
- 매개변수(Parameters): 메서드에 전달되는 입력 값으로, 필요한 경우 0개 이상의 매개변수를 정의할 수 있습니다.
- 메서드 실행에 코드(Method Body): 중괄호({}) 안에 메서드가 수행하는 작업을 구현하는 코드를 작성합니다.
ex
// 예시 1: 반환 값이 없는 메서드
public void SayHello()
{
Console.WriteLine("안녕하세요!");
}
// 예시 2: 매개변수가 있는 메서드
public void GreetPerson(string name)
{
Console.WriteLine("안녕하세요, " + name + "님!");
}
// 예시 3: 반환 값이 있는 메서드
public int AddNumbers(int a, int b)
{
int sum = a + b;
return sum;
}
2) 메서드 호출 방법
- 메서드를 호출하기 위해서는 메서드 이름과 필요한 매개변수를 전달하여 호출
[메서드 이름]([전달할 매개변수]);
ex AddNumbers 라는 이름의 메서드를 호출하고자 할 때는 다음과 같이 호출:
AddNumbers(10, 20);
- 호출 시 전달되는 매개변수는 매서드의 매개변수와 순서와 타입이 일치해야 함
- 메서드는 호출되면 해당 메서드의 실행 코드를 수행, 필요한 경우 리턴 값이 있으면 반환.
매개변수와 반환값
1) 매개변수의 개념과 활용
- 매개변수는 메서드에 전달되는 입력 값으로, 메서드 내에서 이 값을 활용하여 원하는 작업을 수행 O
- 매개변수는 메서드의 선언부에 정의되며, 필요한 경우 0개 이상의 매개변수를 정의 O
- 매개변수는 메서드 호출 시 전달되는 값에 따라 동적으로 결정되며, 호출 시에는 해당 매개변수의 값을 전달해야 함
2) 반환값의 개념과 활용
- 반환값은 메서드가 수행한 작업의 결과를 호출자에게 반환하는 값
- 반환값은 메서드의 리턴 타입에 지정되며, 해당 타입의 값을 반환해야 함
- 메서드 내에서 계산, 조작, 처리한 결과 등을 반환값으로 사용 O
3) void 형식과 반환값이 없는 메서드
- void는 메서드의 리턴 타입으로 사용되며, 해당 메서드가 값을 반환하지 않음을 나타냄
- 반환값이 없는 메서드는 호출되면 메서드의 실행 코드를 수행하고 호출자에게 반환 X
메서드 오버로딩
- 메서드 오버로딩은 동일한 이름의 메서드를 다양한 매개변수 목록으로 다중 정의하는 개념
- 매개변수의 개수, 타입, 순서가 다른 여러 메서드를 동일한 이름으로 정의하여 메서드 호출 시 매개변수의 형태에 따라 적절한 메서드가 선택 가능
- 오버로딩은 메서드의 기능이나 작업은 동일하지만 입력값에 따라 다르게 동작해야 할 때 사용됨
void PrintMessage(string message)
{
Console.WriteLine("Message: " + message);
}
void PrintMessage(int number)
{
Console.WriteLine("Number: " + number);
}
// 메서드 호출
PrintMessage("Hello, World!"); // 문자열 매개변수를 가진 메서드 호출
PrintMessage(10); // 정수 매개변수를 가진 메서드 호출
덧붙이면 우리가 자주썼던 Console.WriteLine(); 도 메서드임
재귀 호출
- 자칫 잘못하면 무한 루프에 빠질 수 있으니 주의
1) 재귀 호출 개념과 동작 원리
- 재귀 호출은 메서드가 자기 자신을 호출하는 것을 의미
- 재귀 호출은 문제를 작은 부분으로 분할하여 해결하는 방법 중 하나로, 작은 부분의 해결 방법이 큰 문제의 해결 방법과 동일한 구조를 갖고 있는 경우에 적합
- 재귀 호출은 호출 스택에 호출된 메서드의 정보를 순차적으로 쌓고, 메서드가 반환되면서 스택에서 순차적으로 제거되는 방식으로 동작
void CountDown(int n)
{
if (n <= 0)
{
Console.WriteLine("Done");
}
else
{
Console.WriteLine(n);
CountDown(n - 1); // 자기 자신을 호출
}
}
// 메서드 호출
CountDown(5);
2) 재귀 호출의 활용 및 주의점
- 재귀 호출은 복잡한 문제를 단순한 방식으로 해결할 수 있는 장점이 있음
- 재귀 호출을 사용할 때 주의해야 할 점은 종료 조건을 명확히 정의해야 함, 종료 조건을 만족하지 못하면 무한히 재귀 호출이 반복되어 스택 오버플로우 등의 오류가 발생할 수 있음
- 재귀 호출은 메모리 사용량이 더 크고 실행 속도가 느릴 수 있으므로, 필요한 경우에만 적절히 사용하는 것이 좋음
메서드 활용 사례
1) 메서드를 사용한 코드의 재사용성
2) 메서드를 활용한 가독성과 유지보수성 개선
구조체
- 사용자 정의 자료형
구조체?
- 여러 개의 데이터를 묶어서 하나의 사용자 정의 형식으로 만들기 위한 방법
- 구조체는 값 형식(Value Type)으로 분류, 데이터를 저장하고 필요한 기능을 제공할 수 있음
- 구조체는 struct 키워드를 사용하여 선언
- 구조체의 멤버는 변수와 메서드로 구성될 수 있음
struct Person
{
public string Name;
public int Age;
public void PrintInfo()
{
Console.WriteLine($"Name: {Name}, Age: {Age}");
}
}
구조체의 사용
- 변수를 선언해서 사용 가능
- 구조체의 멤버에는 접근할 때 . 연산자 사용
Person person1;
person1.Name = "John";
person1.Age = 25;
person1.PrintInfo();
에러사항
오늘은 개념과 이론쪽의 내용이 많아 코딩 자체를 많이 하지 않았다. 그래서 에러사항이 없음
오늘의 회고
오늘은 집중이 잘 되지 않는 날이었다. 머릿속에 근심 걱정이 있어서일까... 사실 잠을 자지 못 하고 밤을 꼴딱 새워서 잠도 오고 집중을 제대로 하지 못 했어서 하루종일 도돌이표였다. 이제 개인 과제 제출날이 얼마 남지 않아서 빠르게 3강을 완강하고 4, 5강까지 완강 한 다음 얼른 개인 과제를 할 예정이다.
점점 내용이 복잡하고 어려워 지는게 느껴진다. 이해가지 않는 부분들을 최대한 혼자 해결하려고 해보다가 안되면 튜터님께 가는것이 좋은 것인가? 아니면 바로바로 즉각적으로 가서 무엇이든 질문하는게 좋은 것인가?
내일 개인 면담이 있으니까 매니저께 여쭤봐야겠다.
(맥북도 얼른 왔으면 좋겠다! 카페가서 공부하고싶다,,)
내일 공부할 것
내일은 속도를 많이 내서 3, 4, 5강을 모두 완강할 것!
개인 프로젝트 완성에 집중할 것
'🎮 Unity_7 TIL WIL' 카테고리의 다른 글
[TIL Day 16] 개인 프로젝트 끝 및 해설보며 복습 & 알고리즘 문제 풀기 (1) | 2025.02.05 |
---|---|
[TIL Day 15] 개인 프로젝트와의 싸움 (0) | 2025.02.04 |
[TIL Day 11] C# 2주차 강의 완강! (1) | 2025.01.31 |
[TIL Day 7] C# 기초 문법 강의 1주차 완! (1) | 2025.01.27 |
[튜터님 피드백] + [미니프로젝트 회고] (0) | 2025.01.24 |