본문 바로가기

교육 노트/C# 강의

(38)
[C# 때려잡기] C# 강의 37. 예외처리 예외처리는 예외 상황을 처리하는것이다. static void Main(string[] args) { int a; int b; a = Int32.Parse(Console.ReadLine()); b = Int32.Parse(Console.ReadLine()); Console.WriteLine(a/b); } a,b를 입력받고a/b를하는 프로그램이다. 여기서 b가 0이라면 a/b를 할수없다 static void Main(string[] args) { int a; int b; a = Int32.Parse(Console.ReadLine()); b = Int32.Parse(Console.ReadLine()); if (b != 0) { Console.WriteLine(a / b); } }따라서 이런식으로 if문으로 예..
[C# 때려잡기] C# 강의 36. 제네릭 컬렉션 딱히 설명할것은 없고.. 제네릭으로 만들어진 컬렉션이다. using System.Collections.Generic; 를 필요로하고 ArrayList ->ListStack,Queue -> 뒤에 추가HashTable -> Dictionary 로 변경하면 된다 List l = new List(); Dictionary d = new Dictionary();요런식 앞서 말했듯이모든 클래스는 Object의 자식이므로 ArrayList 는 List 와 사실상 같다 static void Main(string[] args) { List l = new List(); ArrayList a = new ArrayList(); l.Add(10); a.Add(10); l.Add("string"); a.Add("string"); ..
[C# 때려잡기] C# 강의 35. 컬렉션 지금까지 여러변수를 다루기 위하여 배열을 이용하였다.2018/10/03 - [교육 노트/C# 강의] - [C# 때려잡기] C# 강의 8. 배열 foreach그러나 배열만으로 사용하기에는 귀찮은 점이 조금많다.일단 사이즈가 처음 지정되면 변경이 불가능하고FIX 된 데이터가 아니면 배열은 사용하기 귀찮다. 물론 C#의배열은 상당히 강력한 기능을 제공해주기는 한다만.. 아무튼 이러한 데이터들의 모음들을 관리하기위하여 사용하는 것이 자료구조이고 C#에서는 컬렉션이라는 이름으로 각종 클래스를 만들어 두었다. using System.Collections; 를 추가해주어야 사용할수있다. 1. ArrayList배열처럼 사용가능하지만 크기가 동적이다. class Program { static void Main(strin..
[C# 때려잡기] C# 강의 34. 제네릭 1. 제네릭 메소드 저어어어말 예전에Swap함수를 짠적이 있다. class Program { static void MySwap( ref int a,ref int b) { int temp = a; a = b; b = temp; } static void Main(string[] args) { int a = 10; int b = 20; MySwap(ref a, ref b); Console.WriteLine("{0},{1}",a,b); } }요런식으로 짯다.근데 해당 함수는 int만 가능하다.여기에 double이나 기타등등 까지 다 스왑하고 싶다면.. static void MySwap( ref int a,ref int b) { int temp = a; a = b; b = temp; } static void My..
[C# 때려잡기] C# 강의 33. 클래스와 구조체 예전에 구조체는 값을 묶어 관리하는 거고 클래스는 행동까지 (함수까지) 묶어 관리하는거라고 했는데거짓말이다. 구조체도 함수를 가질수있다.C++ 에서는 구조체랑 클래스랑 기본 접근제한자를 제외하고 완전 동일하고 C# 에서 구조체는 좀더 가볍게 관리가능한 클래스로 보면된다. 근데 왜 이런거짓말을 했느냐하면 C에서 전통적인 구조체(struct) 는 값만 묶어 관리 할수있었는데 여기서 발전되어 Class가 나온것이기때문에..전통적으로 이렇게 구분하기 때문이다. 설명하기도 편하고.. 암튼 1, C#에서의 구조체와 클래스https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/structs여기 잘 설명되어있는데 간단하게 ..
[C# 때려잡기] C# 강의 32. 추상클래스와 인터페이스 1. 추상클래스 weapon이놈은 사실 상속을 위해서만 만들어놓은 놈이고 new weapon이나 Weapon w; 이런식으로 웨폰 객체를 만들일은 없다.그런데도 불구하고 attack 함수를 구현할 필요는 없다. 그래서 내용을 지웠다. namespace ConsoleApp4{ class Weapon { public virtual void Attack() { } } class Knife : Weapon { public override void Attack() { Console.WriteLine("칼로 공격!"); } } class Program { static void Main(string[] args) { Weapon w = new Knife(); w.Attack(); } }} 이렇게 코딩을 하고 같이 개..
[C# 때려잡기] C# 강의 31. 가상함수, 정적 바인딩, 동적바인딩 class Weapon { public void Attack() { Console.WriteLine("무기로 공격!"); } } class Knife : Weapon { public void Attack() { Console.WriteLine("칼로 공격!"); } } 출처: https://see-ro-e.tistory.com/133 [SeeRoE 프로그래밍 기록]저번에 이런식으로 오버라이딩 했다. 여기서 이렇게 weapon을 다운캐스팅 하지 않고 그상태로 attack을 호출하게 되면 어택의 부모가 불리게된다. namespace ConsoleApp4{ class Weapon { public void Attack() { Console.WriteLine("무기로 공격!"); } } class Knife : ..
[C# 때려잡기] C# 강의 30. 다형성, 다운 캐스팅 업 캐스팅 기존에 내 캐릭터에 칼을 가지도록 하였다. class Weapon { public void Attack() { Console.WriteLine("무기로 공격!"); } } class Knife : Weapon { public void Attack() { Console.WriteLine("칼로 공격!"); } } class Gun : Weapon { } class Bow : Weapon { } class Character { private Knife k; private Gun g; private Bow b; //... } 아근데 칼만 쓸것은 아니니까총도 넣고 활도 넣고 지팡이도넣고...와 그러면 character는 맴버변수로 게임에쓰이는 모든 무기를 다 가지고 있어야한다.메모리를 미친듯이 잡아먹는다. 공격..