2024/09 33

내일배움캠프 12일차 TIL - 속성(프로퍼티)

프로퍼티라고도 불리는 C#의 속성을 개인적으로 어떻게 사용하는지 정리해보고자 합니다. 속성의 사용이유속성은 한 클래스의 필드의 변수를 외부 클래스에서 다루고 싶을때 사용하게 되는 클래스 멤버입니다.필드의 변수 자체를 public 을 사용하여 외부 클래스에서 사용할경우 객체 지향 프로그래밍의 특징중 하나인 캡슐화에 위배되며, 외부에서의 접근으로부터 데이터를 숨길 수 없게됩니다. 속성은 클래스의 변수를 숨기면서 자신의 필드를 접근자를 통해 공개하여 객체 지향 프로그래밍의 캡슐화 특성을 지키는 역할을 합니다.  접근자속성의 접근자는 get, set이 존재하며, get을 통해 필드의 값을 참조할 수 있고, set 을 통해 내용을 설정할 수 있습니다.접근자는 둘 다 사용하거나 둘중 하나만 사용하는것도 가능합니다...

내일배움캠프 11일차 TIL - GC(가비지 컬렉터)

금일 C# 체크리스트 특강에서 나온 김에 가비지컬렉터에 대해서 정리해보고자 합니다. 개인적으로는 C#의 장점이자 단점으로 생각하고있는 가비지 컬렉터 기능은 메모리에서 더이상 사용하지 않는 객체를  해제하는 기능으로, 이를 지원하지 않는 C, C++ 등에서는 객체를 생성한 뒤, 사용하지 않는 시점에 직접 메모리를 해제해 주어야 합니다. 개발자가 직접 메모리를 해제하지 않아도 스스로 메모리를 해제해주는 기능인데 어째서 단점이 존재하는걸까요?단점프로그램의 성능이 떨어진다필요할 때 즉시 메모리를 해제해줄 수 없다.언제 메모리가 해제될지 모른다.사실 초심자 입장에서는 메모리가 해제되는 시점은 큰 문제가 되지 않습니다.하지만 가장 큰 단점으로 프로그램의 성능이 떨어진다는 문제점이 있습니다. 이는 가비지컬렉터가 작동..

내일배움캠프 10일차 TIL - C# 싱글톤

문제상황텍스트 RPG 팀 프로젝트에서 모든 클래스에서 사용될만한 기능을 Utility 클래스를 만들어서 이 클래스를 통해 기능을 구현할려고 하였습니다.그런데 이 클래스의 객체를 각 클래스마다 생성하는것도 비효율적이라 생각했고, 그렇다고 static으로 구현하여 클래스명을 통해 사용하자니 Utility.Selecter() 형태로 사용하는것이 영 불편하다고 생각하였습니다.이 클래스를 싱글톤화 시키면 인스턴스 이름을 정해서 호출할 수 있다는점이 생각나서 클래스를 싱글톤화 하자는 생각이 들었습니다.internal class Utility{ /// /// Console.RealLine() 입력을 정수형 int 로 변환, 변환에 실패하거나 선택지를 넘은 값 입력시 -1 반환 /// input 콘솔..

내일배움캠프 9일차 TIL - 인터페이스

인터페이스 관련 내용의 활용을 복기하고자 이전에 사용했었던 내용을 가져왔습니다. 인터페이스를 활용할 때, IDamageable 인터페이스를 만들어서 피해를 받을수 있는 오브젝트를 구분해서 데미지를 줄 수 있습니다.IDamageable 인터페이스와 이를 가지고있는 Enemy 클래스입니다.public interface IDamageable{ public void TakeDamage(float damage);}  public class Enemy : MonoBehaviour, IDamageable { //데미지 입기 public void TakeDamage(float damage) { //데미지 계산 currentHealth ..

C# 문법 종합반 - 4주차 : 텍스트 RPG 게임 만들기

4-1 간단한 텍스트 RPG목표: 기본적인 턴 기반 RPG 게임을 만들어 봅니다.과제 요구사항:**ICharacter**라는 인터페이스를 정의하세요. 이 인터페이스는 다음의 프로퍼티를 가져야 합니다:Name: 캐릭터의 이름Health: 캐릭터의 현재 체력Attack: 캐릭터의 공격력IsDead: 캐릭터의 생사 상태 그리고 다음의 메서드를 가져야 합니다:TakeDamage(int damage): 캐릭터가 데미지를 받아 체력이 감소하는 메서드**Warrior**는 플레이어의 캐릭터를 나타내며, **Monster**는 몬스터를 나타냅니다.ICharacter 인터페이스를 구현하는 **Warrior**와 **Monster**라는 두 개의 클래스를 만들어주세요.Monster 클래스에서 파생된 **Goblin**과 ..

내일배움캠프 8일차 TIL - 텍스트 파일을 읽을때 주의할 점

문제 상황게임을 불러오는데 성공한 후, 게임을 저장하려는데 저장이 안되고 프로그램이 멈추는 문제가 발생했습니다. 시도해본 것, 해결방법당시 발생한 문제 상황인데.마지막의 because it is being used by another process 를 보고 무슨 상황인지 이해하였습니다.public bool LoadGame(){ //파일이 없으면 불러오기 실패 if(!File.Exists(txtPath)) { return false; } else { //리스트를 비워서 불러올 준비 saveDataList.Clear(); //줄 불러오기 StreamReader reader = new StreamReader(txtP..

개인프로젝트 - 텍스트 RPG : 저장,불러오기 구현

데이터를 저장하고 불러오는 기능을 구현하였습니다. 새로운 클래스 : GameSaveManager게임 저장과 불러오기를 당담하는 클래스 GameSaveManager를 추가하였습니다.아래는 클래스 전체 코드 입니다.더보기internal class GameSaveManager{ private string folderPath; private DirectoryInfo directoryInfo; private string txtPath; private Character charSave; private Shop shopSave; private List saveDataList = new List(); public List SaveDataList { get { return save..

개인프로젝트 - 텍스트 RPG : 휴식하기 구현

골드를 사용하여 체력을 회복하는 휴식기능을 구현하였습니다. Character 클래스 - 회복기능 구현캐릭터 클래스에 체력 회복을 위한 함수를 구현하였습니다.//체력 얻음, 최대치를 넘지 못함public void HealedHealth(float health){ float temp = HealthPoint + health; HealthPoint = (temp > maxHealth) ? maxHealth : temp;}해당 함수는 회복량을 매개변수로 받으며, 최대체력을 넘는 회복을 시도할경우 체력을 최대체력값으로 변경합니다. 메인함수마지막 케이스인 5번을 구현하였습니다.이외의 입력 시도시 default로 처리하여 아무런 행동을 하지 않고 반복문의 시작점으로 돌아갈 예정입니다.case 5: {..

개인프로젝트 - 텍스트RPG : 던전기능 구현

플레이어의 능력치에 따라 체력을 잃고 골드를 획득하는 던전 기능을 구현하였습니다.해당 기능을 구현하면서 체력을 모두 잃으면 게임이 종료되도록 만들어주었습니다. 변경점 - 게임 진행 판정//본 게임while (playerChar.IsAlive){ TextCreater("마을에 오신것을 환영합니다.\n어떤 행동을 할지 선택해주세요.\n\n"); TextCreater("1.상태창\n2.인벤토리\n3.상점\n4.던전입장\n5.휴식하기\n\n"); TextCreater("행동 입력"); input = InputInt(Console.ReadLine());}게임의 순환을 당담하는 while문의 조건이 playerChar의 IsAlive 프로퍼티로 변경되었습니다. 이에따라 해당 프로퍼티와 관련된 ..

내일배움캠프 7일차 TIL - 개인 프로젝트 진행 상황 돌아보기

금일은 현재 개인프로젝트의 진행 상황에 대한 고찰을 해보겠습니다. 현재 개인프로젝트 : 텍스트RPG의 목표입니다게임 시작화면 - 구현 완료상태보기 - 구현 완료인벤토리 - 구현 완료장착관리 - 구현 완료상점 - 구현 완료아이템구매 - 구현 완료아이템 클래스/구조체를 활용해 구현 - 구현 완료배열을 통해 아이템 정보 관리하기 - 구현 완료아이템 추가 - 구현 완료휴식기능 추가판매하기 기능 추가 - 구현 완료장착 개선 - 구현 완료레벨업 기능 추가던전 입장기능 추가저장 기능 추가여기서 6번까지는 필수 구현 과제이며, 6번까지의 기능은 모두 구현되어있는 상태입니다. 이 외에도 아이템 관리와 장착,상점 관련 기능을 모두 완료한 상태이며 이후 전투 기능을 구현할 예정입니다. 현재 까지 구현한 내용중, 수정이 필요..