공부 기록/C# 17

[C#/TIL] 가비지 컬렉터의 세대(Generation)

.NET의 GC(Garbage Collector, 가비지 컬렉터)에서 메모리 효율을 높이기 위해 객체를 세대로 나눈다. 오래 살아남은 객체일수록 검사를 덜 하고, 자주 생성되고 빨리 사라지는 객체를 집중적으로 검사할 수 있도록 세대 구조로 나누고 있다. Gen 0 - 가장 최근에 생성된 객체 / 가장 자주 검사됨. 빨리 죽는 객체 위주 Gen 1 - Gen 0을 통과한 좀 더 오래된 객체 / 중간 단계, 검사횟수 덜 빈번하게 일어남Gen 2 - Gen 1에서도 계속 살아남은 객체 / 가장 드물게 수거 강제로 GC를 실행해줄 수도 있다. GC.Collect(0); // Gen 0만 수거GC.Collect(1); // Gen 0 + Gen 1 수거GC.Collect(2); // 전체 Full GC (Ge..

공부 기록/C# 2025.04.24

[Unity/TIL] C#에서 클래스 다중 상속을 지원하지 않는 이유

C#에서 클래스 다중 상속을 지원하지 않는 이유=> 다이아몬드 상속 문제 때문.!! 다이아몬드 상속 문제 클래스 A를 상속받는 B와 C 클래스가 있다. 클래스 D가 B와 C를 모두 상속받은 경우, D에서 A의 함수를 호출하면 B와 C 중 어느 쪽의 오버라이딩된 구현을 사용할지 모호해지는 문제가 발생한다. 이걸 다이아몬드 상속 문제라고 한다. 이런 모호성 때문에 C#에서는 근본적으로 막아놨다. C#에서는 클래스 다중 상속을 지원하지 않아서 처음 공부할 때 당황스러웠던 기억이 난다!!! 그럼 클래스 하나만 상속받아가면서 답답해서 어떻게 짜지? 라고 생각했었다. 그대신 인터페이스는 다중 상속이 가능하다. 현재는 꽤 적응해서 abstract과 interface를 사용해가며 잘만 코딩하며 사는 중이다. 그런데 오..

공부 기록/C# 2025.04.17

[C#/TIL] 리스코프 치환 원칙과 abstract, 확장 메서드(유니티에서 유용할 활용 예시)

리스코프의 치환 원칙과 abstract 객체지향 5가지 원칙에 대한 강의를 들었다. 이론으로 설명만 듣는 것이 아니라 코드로 직접 리팩토링해보듯이 체험해보니 이해가 더 잘되었다. 여태 내가 작성한 많은 코드들이 머릿속을 스쳐지나가는 수업이었는데, 개인적으로 충격먹은 원칙이 있다. 그것은 바로 리스코프 치환 원칙!!! 리스코프 치환 원칙은 자식 타입은 언제나 부모 타입으로 교체될 수 있어야 한다는 원칙이다.  오버라이드한 함수에서 base.함수(); 를 지워서 오버라이드된 부분만 실행시키는 행위를 하지 말라는 것이다!! 대신 애초에 그런 함수는 abstract 메서드로 만들어서 추상화를 시키라는 것. 여태 오버라이드하고 base.함수()를 안하고 사용했기 때문에 오늘 내 코딩세상이 무너질뻔했다. 지금 충격..

공부 기록/C# 2025.02.21

[C#/TIL] Git 브랜치 활용법, 깃 컨벤션, 문자열 처리 기능 추가

Git 브랜치브랜치 짤 때 크게 master(main), develop, feature 브랜치들, release, hotfix 로 나누면 충분할 것 같다. 아래 그림에서 전체적인 흐름의 예시를 볼 수 있다.개발은 master에서 직접하지 않고 develop 브랜치로 받아서 한다. 그 중에서도 기능 브랜치를 나누는 것이 좋고, 작업한 사람이 누구인지까지 알 수 있는 것이 편하다. ex ) 작업자이니셜_기능이름, YD_UI, WG_Character, ... 기능 브랜치별로 나눠서 작업하다가 사용자가 버그가 발생했다고 하면 어디서 수정해야할까?-> 배포된 버전에서 버그가 있는 것이기 때문에 master에 버그가 있는 것임, 그래서 master에서 hotfix로 뻗어서 수정해주면 되는 것이다. 버그가 수정된 것..

공부 기록/C# 2025.02.06

[C#] Delegate, Lambda, Func와 Action, LINQ

목차델리게이트 (Delegate)   ㄴ 이벤트 (Event)람다 (Lambda)Func와 ActionLINQ (Langauge Integrated Query) 델리게이트 (Delegate)키워드 : delegate 다른 언어에서의 함수 포인터 개념으로 생각하면 된다.  하나의 델리게이트에 메서드를 여러 개 등록할 수 있다.예제delegate void MyDelegate(string message);static void Method1(string message){ Console.WriteLine("Method1: " + message);}static void Method2(string message){ Console.WriteLine("Method2: " + message);}static vo..

공부 기록/C# 2025.02.05

[C#] 예외 처리, 사용자 정의 예외, 박싱과 언박싱

이 글에서 다루는 내용예외 처리사용자 정의 예외,박싱과 언박싱 예외 처리프로그램 실행 중 예외가 발생하면 정상적인 흐름을 방해하고 오류를 야기할 수 있다. 예외 처리를 통해 프로그램이 멈추지 않게 할 수 있음. + 안정성을 높이고 디버깅을 용이하게 함.try-catch 블록으로 예외 처리를 수행try{ // 예외가 발생할 수 있는 코드}catch (ExceptionType1 ex){ // ExceptionType1에 해당하는 예외 처리}catch (ExceptionType2 ex){ // ExceptionType2에 해당하는 예외 처리}finally{ // 예외 발생 여부와 상관없이 항상 실행되는 코드}catch 블록의 우선순위catch 블록은 위에서부터 순서대로 실행된다.만약 나중..

공부 기록/C# 2025.02.01

[C#/TIL] C# 문법 종합반 중간지점에서 배운 내용 정리

이 글에서 다룬 내용들 컬렉션에 대하여.NET Framework에 대하여틱택토 게임 만들기구조체 VS 클래스프로퍼티다형성(가상 메서드, 추상 메서드, 오버로딩과 오버라이딩)out & ref인터페이스Enum컬렉션에 대하여일단 여기서 컬렉션 = 자료구조임. C#의 컬렉션은 .NET Framework에서 제공하는 데이터 구조들을 포괄하는 개념이고, 자료구조뿐만 아니라 데이터 조작, 탐색, 필터링 등의 부가 기능을 포함하는 개념이라고 함.List가변적인 크기를 갖는 배열. 연결리스트가 아니었다.! 인덱스로 접근도 가능.C#의 List는 노드 기반이 아니고 동적 배열이라고 함. 노드 기반 리스트로는 LinkedList가 따로 있다. (C#의 List와 LinkedList는 각각 C++의 std::vector와 s..

공부 기록/C# 2025.01.31

[C#/TIL] 진입점 Main 메서드에 대한 이해, 문자열 처리 메서드 , C# switch 조건에 문자열 가능

학습한 것들네임스페이스 & 전역 using "using System;" : System 네임스페이스 내부 기능들을 사용하기 위한 코드. 네임스페이스는 클래스들의 묶음, 기능들의 묶음이라고 생각하면 된다. 예를 들어 Console 클래스를 사용하기 위해 System이 필요하다. 그런데 우리가 프로젝트 생성해서 보면 using문이 안 보인다.VS에서 전역 using으로 자주 사용하는 애들을 포함시켜놨기 때문이다. 실제로는 using문을 적은 것과 같다.  C#의 진입점에 대한 이해강의 과제를 한 파일로 완성시키기 위해 문제마다 솔루션을 함수로 나눠서 작성하고 Main함수에서는 솔루션 함수만 실행시키려고 했다. C#은 기본적으로 클래스 아래에 Main함수가 있으니 같은 영역에 함수를 정의하고 사용하려다가 아래..

공부 기록/C# 2025.01.27

[C#] 기초 문법 톺아보기 (2) - 클래스, 상속, 인터페이스, 추상 클래스, 가상 메서드, 인덱서

[ 유니티를 배우기 전, 기초 문법 톺아보기(2) ]내일배움캠프 사전캠프의 과제를 해결하며 C#과 유니티의 예습을 하고 있다. 유니티를 본격적으로 배워나가기 전에 C# 문법에 익숙해지기에 좋은 시간이었다.  이 글은 달리기반을 학습하는 동안 사용하거나 알게 된 기억하고 싶은 문법들을 정리한 글이다.목차1. 클래스2. 상속3. 인터페이스4. 인덱서5. 추상 클래스 6. 가상 메서드 클래스 (Class)클래스는 객체를 정의하는 데 사용되는 청사진이다. 클래스는 필드와 메서드를 포함하며 객체의 속성과 동작을 정의한다.클래스 정의와 사용namespace Example{ class Person { // 필드(속성) public string Name; public i..

공부 기록/C# 2025.01.09

[C#] 기초 문법 톺아보기 (1) - 입력과 출력, 배열, 필드와 프로퍼티

[ 유니티를 배우기 전, 기초 문법 톺아보기(1) ]내일배움캠프 사전캠프의 과제를 해결하며 C#과 유니티의 예습을 하고 있다. 유니티를 본격적으로 배워나가기 전에 C# 문법에 익숙해지기에 좋은 시간이었다. 이 글은 달리기반을 학습하는 동안 사용하거나 알게 된 기억하고 싶은 문법들을 정리한 글이다.  목차1. 입력과 출력2. 배열3. 필드와 속성 차이 (속성 예제)입력과 출력 (Input and Output)입력 받기 & 출력하기Console.Write : 파라미터로 넣어준 string을 출력한다.Console.WriteLine : string을 출력하고 줄바꿈 된다.Console.Read : 한 문자를 읽고 입력된 문자의 유니코드 값을 반환한다. (반환값 int)Console.ReadLine : 한 줄의..

공부 기록/C# 2025.01.08
728x90