본문 바로가기

C#

(44)
[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# 강의 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..
[C# 때려잡기] C# 강의 21. this 캐릭터 클래스에 hp를 설정하는 setHp를 만들었다고 해보자 public void SetHp(int _hp) { hp = _hp; }이런식으로 구현하였다. hp = _hp는 내 클래스의 맴버 변수 hp 를 파라미터로 받은 _hp 로 설정하는것이다.근데 파라미터 의 _hp에서 앞에 _가 너무너무 신경쓰여 미칠지경이라 정말정말 어떻게든 파라미터명으로 _hp가 이날 그냥 hp로 받고싶다. public void SetHp(int hp) { hp = hp; } 이렇게 말이다.하지만 C#에서는 이렇게되면 저 함수에서 hp라는 것은 더 가까이있는 파라미터의 hp만을 의미하게 된다즉 파라미터hp를 파라미터hp로 초기화하는 쓸데없는 함수가 되어버린다. 비주얼 스튜디오가 친절하게 알려준다. 1. this C#에서는 자기..
[C# 때려잡기] C# 강의 20. 생성자와 소멸자 앞선 강의에서 getter setter 또는 프로퍼티를 통하여 public에 있는 hp를 컨트롤 했다. 그런데 hp는 아무리 생각해도 만들어 질때를 제외하고 다시 setter를 사용해서 set할 필요는 없을것 같다. 어차피 아이템을 먹거나 몬스터에게 맞거나하면 obtainItem이나 hit 과같은 함수를 호출하면 알아서 조절될것 이기 때문이다. 처음에 고거 하나 하자고 set을 사용할 필요는 없다고 생각해우선 지워버렸다. 그럼 이제 hp를처음에 어떻게 초기화 시켜줘야 하는가? 1. 생성자와 소멸자 class는 기본적으로 생성자와 소멸자를 가지고 있다.생성자와 소멸자는 다음과 같다. 생성자 : 객체가 생성될때 실행되는 함수 소멸자 : 객체가 소멸할때 실행되는 함수 즉 생성자라는 것을 가지고 있어 생성될때 ..
[C# 때려잡기] C# 강의 19 getter,setter 와 property 데이터를 제한하여 밖에서 못쓰게 하는거까지는 좋았다.hp도 함부로 다루지 못하게 private에 집어넣었는데생각해보니까 hp는 화면에 출력해서 생명력이 얼마나 남았는지 보여주어야한다. 그러면 다시 hp를 public을로 바꾸어야 할까? 그래서 나온것이 getter setter이다. using System; namespace ConsoleApp1{ class Character { private int hp; private int speed; public int GetHp() { return hp; } public void SetHp(int _hp) { hp = _hp; } } class Program { static void Main(string[] args) { Character mario = new C..
[C# 때려잡기] C# 강의 18.접근 지정자 1 접근 한정자클래스내의 변수나 함수에 대한 접근 범위를 설정한다. (접근 제한자, 접근 지정자 라고도 한다) 요것이 무슨의미나 하믄 이전에 만든 캐릭터 클래스를 살펴보자 using System; namespace ConsoleApp1{ class Character { public int hp; public int speed; public string name; public void Move(int dir) { // } public void Jump() { // } public void Hit() { // } } class Program { static void Main(string[] args) { Character mario = new Character(); mario.name = "슈퍼마리오"; m..