본문 바로가기

교육 노트/C# 강의

(38)
[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..
[C# 때려잡기] C# 강의 28. 다중상속 C#에서 안된다. 1. 다중상속 요런것이다. 2. 죽음의 다이아몬드 문제 앗..아앗!이렇게 되면 카메라폰이 만들어질때 메모리에 요런식으로 5개의 객체가 만들어질테고 전자기기에 ON이라는 함수가 있으면 전화기도 상속받아 있을테고 카메라도 있을테고카메라폰에는 ON 이 2개! ON 을 사용하면 어느 ON의 주인이 누구인지 알길이 없어 족보가 꼬여버린다 (모호해진다) 요런 상황이 죽음의 다이아몬드이고요런 상황때문에 개발자를 믿지 못하는 C#은 아예 못하게막아놓았다 아니 근데 이걸 막아버려서여러개의 요것들을 상속받고 싶은데..또는 상위로 사용하고 싶은데.. 그럴떄를 위해서 인터페이스를 만들었다.인터페이스는 추후에 배운다.
[C# 때려잡기] C# 강의 27. base class 저번시간에 자식이 만들어지면 부모도 만들어진다고 했으며해당 부모의 변수를 사용하는것이라고 했는데만약 부모와 변수이름이 곂치면 어떻게 할까? 1. 부모로써의 base class Weapon { protected int power; public Weapon() { power = 10; } } class Gun : Weapon { protected int power; public Gun() { power = 100; Console.WriteLine(power); Console.WriteLine(this.power); Console.WriteLine(base.power); } } class Program { static void Main(string[] args) { Gun g = new Gun(); } } 부..
[C# 때려잡기] C# 강의 26. 클래스의 핵심 상속 이번 강의는 객체지향의 꽃이라고 볼수있는 상속을 알아보도록 하겠다.객체지향의 꽃이 상속이다 (?) 1. 상속 (inheritance) 지금까지 주구장창 마리오만 사용했으니 조금 다르게RPG게임을 만든다고 해보자캐릭터는 마리오 게임에서 만든 클래스를 재사용 하자! (와! 클래스의 재사용성을 알았다) RPG게임이라면 모름지기 무기를 가지고 있어야한다.일단 간단하게 총 칼 활 무기 3개 클래스를 만들었다 근데 생각해보니까 3개다 무기라 공통된점이 너무 많다 그렇다고 같은 클래스로 퉁치기에는 총이랑 칼이랑 활은 너무 다르다. 아 무기를 서너개 더만든다면 또 똑같은 공격함수를 짜고 공격력 변수를 만들고...너무 화가나서 더이상 게임 제작하기 싫을것이다. 프로그래머가 개발도중에 도망가는것을 막기위해 C#은 상속을 ..
[C# 때려잡기] C# 강의 25. indexer 전시간에 C#의 연산자 오버로딩에서 링크에 있는 제약을 보면[]연산자는 오버로딩할수없고인덱서로 사용한다고 되어있다. 인덱서란 무엇일까? 캐릭터클래스에 캐릭터가 가지고있을 아이템들을 관리하기위하여 item배열을 만들었다. class Character { private int?[] items; public Character() { items = new int?[10]; } } 기본적으로 10 개짜리로 만들었다.편의상 item클래스를 안만들고 int?형식으로 했다. 암튼이런 아이템이 있다면 해당 아이템에 접근하기위한 함수가 필요할 것이다. public int? GetItem(int idx) { if( idx
[C# 때려잡기] C# 강의 24. 연산자 오버로딩 함수 오버로딩은 다른 행동을하는(파라미터를 달리하여) 같은 이름을 가진 함수를 만드는것이다. 연산자오버로딩은 여기서 함수가 아닌 연산자를 오버로딩 하는것이다. 1, 연산자 오버로딩말그대로 연산자를 오버로딩하는것 사용자 정의 자료형이기때문에 기존 연산자 (+, -, *, /, %, … 등)을 사용하지 못한다. 그러나 연산자 오버로딩을 통하여 사용가능하게 할수있다 1p 와 2p모두를 지원하는 게임을 제작하는중에보스몬스터를 만났을때 1p,2p 모드 둘다 같은 체력과 스피드의 보스가 나오면 1p로 할때 너무 어렵고 2p로 할때 너무 쉬운 상황이 발생할꺼같아2p로 할때 보스의 체력을 1P + 2P로 하고싶다. using System;using System.Collections.Generic;using System..
[C# 때려잡기] C# 강의 23. static 변수 및 함수 1. static static 키워드는 변수 혹은 함수 혹은 클래스가 객체(인스턴스) 단위가 아니라 클래스 단위로 생성, 사용되게 하는 키워드이다 msdn의설명에 따르면 static 한정자는 특정 개체가 아니라 해당 형식 자체에 속하는 정적 멤버를 선언하는 데 사용됩니다 라고한다. 무슨의미냐하면.. 2. static 변수지금까지 만든 캐릭터 클래스를 이용해서캐릭터들을 계속 만들었다. 그런데 내가지금까지 만든 캐릭터의 숫자를 알고싶으면 어떻게 할까? using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace ConsoleApp3{ class Char..
[C# 때려잡기] C# 강의 22. 복사 생성자와 깊은 복사 이전 강의에서 생성자를 배웠다.특히 생성자에서 파라미터를 받아 객체를 생성하면서 각종 초기화 과정을 진행 해 줄 수 있었는데생성자에서는 복사생성자라는 특수한 생성자가 하나 존재한다. 1. 복사 생성자자기 자신과같은 형태의 객체를 인자로 받는 생성자를 의미한다. public Character(Character c) { }복사 생성자는 같은 클래스를 인자로 받는 생성자이며 대부분 인자로 받은 클래스의 내용을 카피하는데 사용하기 때문에 복사생성자라고 한다. using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace ConsoleApp3{ class Ch..