전체 글
-
델리게이트C# 2023. 8. 25. 15:00
I. 델리게이트 : 메서드를 변수처럼 전달하고 호출할 수 있게 하여, 메서드를 참조할 수 있는 형식. : 대리자와 호출할 메서드는 데이터 형식과 매개변수를 통일시켜야함. : 실제로는 접근이 불편한 상황일 때, 메서드를 델리게이트로 연결함. 정적 메서드 (Static Method) : 클래스의 인스턴스 없이 호출이 가능. : 클래스의 인스턴스에서는 호출이 불가능, 반드시 클래스명과 함께 호출. class Methods { public static Method2(string message) { Console.WriteLine("Method2: " + message); } } internal class Program { static void Main(string[] args) { Methods.Method2(..
-
값형과 참조형C# 2023. 8. 24. 21:27
I. 값형 (Value Type) : 변수에 값을 직접 저장하는 형식의 데이터 : 변수가 실제 데이터를 보유함. : 변수를 다른 변수에 할당하거나 전달할 때 값이 복사됨. : 메모리의 stack 영역에 저장됨. 스택 (stack) : 메모리에서 메서드의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역 : 메서드의 호출과 함께 할당되며, 메서드의 호출이 끝나면 소멸됨. 값형 데이터를 할당한 변수를 수정할 경우, 해당 변수의 값만 변경하므로, 다른 변수에 영향을 주지 않는다. static void Main(string[] args) { int a = 1; int b = a; Console.WriteLine($"a : {a} , b : {b}"); // a : 1 , b : 1 b += 1; Consol..
-
예외 처리C# 2023. 8. 24. 20:05
I. 예외 처리 : 예외 상황을 처리하는 메커니즘. try { "실행 코드" } catch ("예외 타입" "예외 타입 객체") { "예외 타입" 에 대한 예외 처리 코드" } finally { "항상 실행되는 코드" } 예외 (Exception) : 프로그램 실행 중에 발생하는 예기치 않은 상황 : 프로그램의 정상적인 흐름을 방해하고 오류를 야기함. 예외처리의 필요성 : 오류 상황을 적절히 처리하고, 프로그램의 실행을 계속할 수 있음. : 프로그램의 안정성을 높이고 디버깅을 용이하게 함. catch 블록 : 위에서부터 순서대로 실행. : 상속 관계에 있는 경우 상위 클래스의 예외 타입의 catch 블록이 먼저 실행. try { int result = 10 / 0; // 실행하려고 하는 코드 Consol..
-
인터페이스와 열거형C# 2023. 8. 24. 19:27
I. 다중 상속 : C# 에서는 이하의 이유로 클래스 간의 다중상속을 지원하지 않는다. 죽음의 다이아몬드 (Diamond Problem) : 왼쪽 그림과 같은 상속관계는 오른쪽 상속관계와도 같다. : D 클래스에서 A 클래스의 메서드를 사용해야 할 때, 이름의 충돌이 일어날 수 있다. A를 상속받은 B의 것을 사용해야하는가? A를 상속받은 C의 것을 사용해야하는가? : 또한 다음과 같이 B와 C가 메서드 Method1()을 오버라이드 한다고 하면, class A { } class B : A { public virtual void Method1() { Console.WriteLine("You are groot"); } } class C : A { public virtual void Method1() { C..
-
텍스트 던전 콘솔로 구현하기 - 작업중 학습(2)C# 2023. 8. 23. 20:34
Case 2. 하나의 스크립트를 다루면 너무 코드가 길어짐. : 같은 네임스페이스를 사용한다면, 다른 폴더에 있어도 해당 클래스를 가져올 수 있다. 네임스페이스 (NameSpace) : 내부 식별자(형식, 함수, 변수 등의 이름)에 범위를 제공하는 선언적 영역 분류 1. 내장된 네임스페이스 : System : 네임스페이스 : Console : 네임스페이스의 클래스. 2. 사용자가 정의하는 네임스페이스 : 고유한 네임스페이스를 선언하면, 클래스 및 메서드 이름의 범위를 제어할 수 있음. namespace SampleNamespace { class SampleClass { public void SampleMethod() { System.Console.WriteLine( "SampleMethod inside ..
-
텍스트 던전 콘솔로 구현하기 - 작업중 학습(1)카테고리 없음 2023. 8. 22. 21:12
Case 1 : 아이템을 정렬할 때, 선택한 기준에 대해서 기준마다 내림차순, 오름차순, 원본의 순서대로 출력하려고 한다. : 다음과 같은 코드를 계속 쓰면, 코드가 너무 지저분해지고, 반복적으로 되므로 수정하려고 함. switch(selectIndex) { case 0: equipped = equipped.Replace(markArray[(clickCount - 1) % 3] + " |", markArray[clickCount % 3] + " |"); // 다른 이름으로 변경시, 초기화 해주는 기능 추가해야함. // 아이템 if (clickCount % 3 == 1) { var isEquippedList = from item in inventoryList orderby item.IsEquiped des..
-
스네이크 게임 만들기 (수정예정)C# 2023. 8. 21. 20:50
I. 예제 코드 및 작업물 namespace SnakeGame { internal class Program { // 뱀은 매턴마다 자신의 앞으로 이동합니다. // 사용자는 방향키를 이용하여 뱀의 이동 방향을 제어할 수 있습니다. // 뱀은 맵에 무작위로 생성되는 음식을 먹을 수 있습니다. // 뱀은 벽이나 자신의 몸에 부딪히면 게임이 끝나고 'Game Over' 메시지가 뜹니다. // Main 함수에서 게임을 제어하는 코드를 작성합니다 : 뱀의 이동, 음식 먹기, 게임 오버 조건 확인 등을 주기적으로 수행합니다. static void Main(string[] args) { } } // Snake 클래스를 만듭니다 : 뱀의 상태와 이동, 음식 먹기, 자신의 몸에 부딪혔는지 확인 등의 기능을 담당합니다. /..
-
제네릭C# 2023. 8. 18. 14:50
I. 제네릭 타입 (Generic Type) : 클래스나 메서드를 일반화시켜 다양한 자료형에 대응할 수 있는 기능. : 데이터 타입을 확정하지 않고, 데이터 타입 자체를 타입 파라미터로 받아들이도록 클래스를 정의함. 메서드 오버로딩을 통하여, 동일한 메서드에 다양한 타입과 수의 매개변수를 추가할 수 있다고 학습했었다.. 매개변수의 수가 고정되어 있다고 했을 때, 메서드 오버로딩을 통해 구현했던 것을 제네릭 타입으로 구현해보겠다. 메서드 오버로딩 public class Calculator { public int Add(int a, int b) // Method OverLoading { return a + b; } public float Add(float a, float b) // Method OverLoa..