공부 기록/C# 16

[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

[C#] 숫자 야구 게임 만들기 (달리기반 Lv3)

[내일배움캠프 사전캠프 과제 - Stage3. 각자 속도에 맞춰 나아가기]달리기반 Lv3의 마지막 과제이다!! (25/01/15) 팀원들과 서로의 코드를 피드백한 내용을 추가하였다. 진행 후에 추가할 것이다. - 숫자 야구 게임 설명- 나의 풀이 - 플레이 모습- 나의 코드 피드백 & 후기- 피드백 반영한 코드  8. 숫자 야구 게임 ⚾숫자 야구 게임을 작성하세요. 컴퓨터가 3자리의 숫자를 선택하면 사용자가 그 숫자를 맞추는 게임을 구현하세요. 각 자리의 숫자를 비교하여 스트라이크와 볼의 개수를 출력합니다. 숫자 야구 게임 설명숫자 야구 게임은 3자리의 숫자를 맞추는 게임입니다.컴퓨터가 고른 3자리 숫자는 모두 다른 숫자로 이루어져 있습니다.사용자는 3자리 숫자를 입력하고, 컴퓨터는 입력한 숫자와 자릿수..

공부 기록/C# 2025.01.07
반응형