본문 바로가기

씨샵때잡

(37)
[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는 맴버변수로 게임에쓰이는 모든 무기를 다 가지고 있어야한다.메모리를 미친듯이 잡아먹는다. 공격..
[C# 때려잡기] C# 강의 29. 오버라이딩 (overriding) 전에 강의에서 웨폰 클래스를 만들고 각종 무기들이 상속받아 모든 무기가 attack 함수를 사용할수 있었다. 그런데 내 게임에서 나이프는 SSS급 레어 무기라 공격할때 다른 무기들과 다르게 동작하고 싶다. class Weapon { public void Attack() { Console.WriteLine("무기로 공격!"); } } class Knife : Weapon { public void Attack() { Console.WriteLine("칼로 공격!"); } } class Gun : Weapon { } class Program { static void Main(string[] args) { Knife k = new Knife(); Gun g = new Gun(); k.Attack(); g.Att..