STIKA
Unity 캠프 13일차 TIL < C# 문법 3-2 / 알고리즘 > 본문
24.01.10 Wed
❤️ TIL
Today I Learned
❤️하루에 1%씩만 나아가도 4개월 동안 쌓이면 꽤 덩치가 커진답니다 :)
📌 오늘의 계획
- C# 문법 3주차 강의 듣기
- 알고리즘 강의 듣기
✏️ 작업 내용
✔️ C# 문법 3주차
static으로 만들어진 main(메서드)은 static으로 만들어진 메서드만 쓸수있음
제너릭
- 선언하는 시점이 아니라 사용하는 시점에 자료형 결정
- 클래스나 메서드를 일반화시켜 다양한 자료형에 대응할 수 있는 기능
- 코드의 재사용성이 높아짐
- C#에서는 <T> 형태의 키워드를 이용
// 제너릭 클래스 선언 예시
class Stack<T>
{
private T[] elements;
private int top;
public Stack()
{
elements = new T[100];
top = 0;
}
public void Push(T item)
{
elements[top++] = item;
}
public T Pop()
{
return elements[--top];
}
}
// 제너릭 클래스 사용 예시
Stack<int> intStack = new Stack<int>();
intStack.Push(1);
intStack.Push(2);
intStack.Push(3);
Console.WriteLine(intStack.Pop()); // 출력 결과: 3
제너릭 클래스 선언 및 사용 예시
class Pair<T1, T2>
{
public T1 First { get; set; }
public T2 Second { get; set; }
public Pair(T1 first, T2 second)
{
First = first;
Second = second;
}
public void Display()
{
Console.WriteLine($"First: {First}, Second: {Second}");
}
}
Pair<int, string> pair1 = new Pair<int, string>(1, "One");
pair1.Display();
Pair<double, bool> pair2 = new Pair<double, bool>(3.14, true);
pair2.Display();
제너릭 두개이상 사용 예시
out, ref 키워드
메서드로 값을 반환하는 것이 아니라, 매개변수를 이용하여 값을 전달 가능
out
메서드에서 반환 값을 매개변수로 전달하는 경우에 사용
ref
메서드에서 매개변수를 수정했을 때 원래 값에 영향을 주는 경우에 사용
// out 키워드 사용 예시
void Divide(int a, int b, out int quotient, out int remainder)
{
quotient = a / b;
remainder = a % b;
}
int quotient, remainder;
Divide(7, 3, out quotient, out remainder);
Console.WriteLine($"{quotient}, {remainder}"); // 출력 결과: 2, 1
// ref 키워드 사용 예시
void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
int x = 1, y = 2;
Swap(ref x, ref y);
Console.WriteLine($"{x}, {y}"); // 출력 결과: 2, 1
주의 사항
- 값의 변경 가능성
ref 매개변수를 사용하면 메서드 내에서 해당 변수의 값을 직접 변경 가능
예기치 않은 동작을 초래할 수 있음 - 성능 이슈
ref 매개변수는 값에 대한 복사 없이 메서드 내에서 직접 접근하여 성능상 이점이 있음
너무 많은 매개변수를 ref로 전달하면 코드의 가독성이 떨어지고 유지보수가 어려워짐 - 변수 변경 여부 주의
out 매개변수는 메서드 내에서 반드시 값을 할당해야 한다
out 매개변수를 전달할 때 해당 변수의 이전 값이 유지되지 않음
ref는 쓸지 안쓸지 확실치 않지만
out은 무조건 메서드 내에서 값을 할당하기때문에 어떤방식으로든 쓰였다는 것을 알수있다
✔️ 알고리즘 강의
알고리즘 코드카타
매일 아침 9시~10시
반복되는 연습이라는 뜻을 가진 Kata를 통해 매일 아침 코딩을 훈련해봅시다.
자료구조 = 데이터를 다루기 위해 저장해두는 방식
알고리즘 = 문법을 활용해 저장된 데이터로 문제를 푸는 방법론
코딩테스트
https://school.programmers.co.kr/learn/challenges?order=recent
코딩테스트 GitHub로 자동 Push - 백준 허브
https://github.com/BaekjoonHub/BaekjoonHub
가변배열
//가변 배열
int[][] arr3 =
{
new int[]{1, 2 },
new int[]{3, 4, 5 },
new int[]{6, 7, 8, 9}
};
Console.WriteLine(arr3.Length);
Console.WriteLine(arr3.GetLength(0));
Console.WriteLine(arr3.GetLength(1));
for (int i = 0; i < arr3.Length; i++)
{
for (int j = 0; j < arr3[i].Length; j++)
{
Console.Write(arr3[i][j] + " ");
}
Console.WriteLine();
}
c++인줄
근데 이걸로 가변배열이 가능하다함
그냥 이차원 배열은 [ , ]
List → 동적
할당한 크기가 넘어가면 2배의 크기로 재할당
(얻는게 있으면 잃는게 있지)
그래서아무리 리스트여도 기본크기는 잡고가는게 나음
List<int> list = new List<int>()
()안에 비워두면 약 4개의 원소가 들어갈정도를 만든다고 함
list는 index X count O
list.insert는 원소 추가
list.insert(2,0) 2번째 원소에 0추가
remove는 Remove(5) 5라는 값을 찾아서 삭제
clear는 싹지우기
배열
- 연속된 메모리 공간에 할당되어 접근이 빠름
- 참조를 위한 추가 메모리 할당이 필요 없음
- 삽입, 삭제 시 뒤 요소들을 이동해야 해서 비효율적
- 크기 변경 불가
- 메모리 재할당 불가
리스트
- 삽입 / 삭제 전후 노드의 참조 관계만 수정하면 되기 때문에 배열보다 비교적 효율적
- 메모리 재사용 가능
- 참조를 위한 메모리가 추가로 필요
- 배열보다 실행 속도가 느림
📝 오늘의 마무리
매일 아침 1시간씩 알고리즘 공부
즉 코딩테스트 연습을 하게 되었다.
슬쩍 봤는데 초반은 쉬워보이던데 뒤로 갈 수록 어마무시해지겠지
예전에 c++을 배운적이 있었는데
비슷한 듯 다른 부분이 많아서 헷갈린다
✏️ 스스로 어제보다 한 발 더 나아갔다는 것을 자각하기
✏️ TIL을 쓰기 위해서라도, 오늘 반드시 단 하나라도 배우기
✏️ 꾸준히 기록을 남기는 습관 가지기
📕 오늘의 학습 키워드
📕 공부한 내용 본인의 언어로 정리하기
📕 오늘의 회고
📕 12시간 중 얼마나 몰입했는지
📕 더 나은 미래를 위해 내일 어떤 공부를 진행할 것인지
'프로그래밍 > Unity + C#' 카테고리의 다른 글
Unity 캠프 15일차 TIL < 팀 프로젝트 1-2 > (0) | 2024.01.12 |
---|---|
Unity 캠프 14일차 TIL < 알고리즘 / 팀 프로젝트 1-1 > (0) | 2024.01.11 |
Unity 캠프 12일차 TIL < C# 문법 3-1 / 팀 과제 > (0) | 2024.01.09 |
Unity 캠프 11일차 TIL < TextGame 2차 > (0) | 2024.01.08 |
Unity 캠프 10일차 TIL < TextGame 1차 > (0) | 2024.01.04 |