본문 바로가기

교육 노트

(99)
[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..
[C# 때려잡기] C# 강의 17.객체지향과 클래스 지금까지 C#의 기본적인 문법들을 배웠다.그러나 지금까지 배운 C# 은 C# 문법을 사용했을뿐이지 사실상 C스타일의 절차지향 코딩과 더 가깝다 즉 class를 배우지 않으면 C#을 배운것이 아니다. 심화 강의부터는 Class, OOP등을 강의하도록 하겠다. 1. 객체 지향 프로그래밍 (object oriented programming), OOP 지금까지 배운 프로그래밍 방식은 절차지향 프로그래밍으로각종 변수와 구조체등을 모듈화된 함수등을 사용하여 특정 절차를 거치도록하여 프로그램을 구성하였다. 그러나 프로그램이 커지면서 해당방식으로 프로그래밍 하는것이 힘들어졌고세상이 구성된 그대로를 가져오다는 컨셉으로 객체지향 개념이 생겨나게 되었다. 그럼 여기서 객체 지향언어란 무엇인가? 세상은 객체와 객체의 상호작용..
[C# 때려잡기] C# 강의 16.객체지향 전에.. 간단한 구조체 1. 구조체구조체란 하나 이상의 변수를 그룹 지어서 만든 사용자 정의 자료형이다사용자 정의 자료형이란 C#에서 기본적으로 제공하는 자료형이 아니지만자료형으로 쓰기위해 우리가 직접 만든 자료형이란 의미이다. 이런 개념이 왜 필요하느냐 하면 예를들어 학생100의 정보 관리 프로그램을 제작할 때 각각의 학생은 이름, 학번, 나이 … 등의 여러 가지 정보를 가지고 있다. 이를 따로따로 관리하려면 string name[100]; int number[100]; int age[100]; ...과 같이 해당 자료를 가지는 정보를 배열로 따로따로 만들것이다.정보가 더 많아지면 더 많은 배열을 만들게 될것이다. 그러나 student의 정보를 하나로 그룹지어서 사용자 정의 자료형을 만들면 Student stu[100]; 과..
[C# 때려잡기] C# 강의 15.킹갓 var C++의 auto 와 비슷한데. 쉽게 말하자면 컴파일러가 형식을 알아서 결정해준다. using System; namespace ConsoleApp1{ class Program { static void Main(string[] args) { int i = 10; var j = 10; Console.WriteLine(i.GetType().ToString()); Console.WriteLine(j.GetType().ToString()); var f = 0.5f; var d = 0.44; Console.WriteLine(f.GetType().ToString()); Console.WriteLine(d.GetType().ToString()); var s = "string"; Console.WriteLine(s.Ge..