C# - 자료구조 실습 - 인벤토리
·
C#
과제 1) 필드 생성, 간단한 메서드UsableItem이라는 클래스를 만들어 이름과 가격, 수량을 프라이빗 필드로 가지게 합니다. 외부와 소통이 가능하게끔 프로퍼티도 각각 만들어 줍니다UsableItem만 사용할 수 있는 특별한 메소드를 하나 자유롭게 만들어 주시기 바랍니다. 인자, 반환 형태 모두 개발자 마음대로 입니다.Player라는 클래스를 만들어, 해당 아이템이 자유롭게 추가될 수 있는 inventory 라는 필드를 추가해주시길 바랍니다. (배열 or List 중 본인 편한것으로)Player 클래스에, 유료결제 여부를 저장할 수 있는 필드를 하나 만듭니다. 해당 참거짓을 전환 가능한 프로퍼티 혹은 메소드도 제작 바랍니다 UsableItem.csusing System;namespace Collect..
C# - record
·
C#
recordC# 9.0 부터 도입된 참조형(reference type) 선언 키워드다.기본적인 형태는 class와 유사하지만, 데이터 저장에 특화된 불변(Immutable) 객체를 간단히 정의할 수 있다는 점이 특징이다.주로 값 자체를 비교해야 하는 경우, 또는 DTO(Data Transfer Object), 모델 클래스, 게임 데이터 등에서 유용하다. 사용 법은 아래와 같다.public record Player(string Name, int Level); 이렇게 정의만 해도생성자, 일기 전용 프로퍼티, 값 기반의 Equals 및 GetHashCode, ToString() 오버라이드 등이 자동으로 제공된다. class vs record classrecord비교 방식참조 비교(Reference Equal..
C# - 인터페이스 문제 풀이
·
C#
과제) 인터페이스 구현RPG 게임에 수많은 NPC가 있습니다. 어떤 NPC는 그냥 아무 기능 없이 가끔 랜덤한 시간에 대사를 뱉기도 하고, 특정 NPC는 플레이어와 G와 같은 키로 상호작용을 하여 강화 혹은 창고와 같은 기능을 수행할 수 있습니다.다음 제작 요구사항에 맞추어 필요한 내용이 있다면 다양한 필드/프로퍼티/메소드를 추가하시면 됩니다. 클래스도 필요하다면 추가해주시기 바랍니다. 너무 이상한 거 있으면 물어봐주시기 바랍니다.NPC 뼈대 클래스 작성모든 NPC들이 상속받을 추상클래스를 하나 만듭니다.모든 NPC는 좌표 x를 가지고 있습니다.모든 NPC는 이름을 가지고 있습니다.플레이어어와 상호작용 할 수 있는 특정 NPC들이 사용할 인터페이스 제작이름은 IInteractable을 추천드립니다.이 인..
C# - 인터페이스 (Interface)
·
C#
인터페이스 (Interface)클래스나 구조체가 반드시 구현해야하는 메서드와 프로퍼티의 규약을 정의하는 요소다.즉 특정 기능 구현을 강제하는 역할이다.얼핏 추상 클래스와 비슷한 역할처럼 보이지만 일반 필드는 가질 수 없고 메서드 시그니쳐와 자동 구현 프로퍼티만 선언할 수 있다는 차이점이 있다. interface IInteractable // 인터페이스 인터페이스명{ void Interact(); // 반드시 구현되어야 할 메서드로 구성 // 필드는 가질 수 없음 int MyNum { get; set; } // 프로퍼티는 됨. 프로퍼티는 메서드 취급} 이렇게 간단하게 구현할 수 있다.이렇게 인터페이스를 구현한 클래스는 Interact() 메서드와 MyNum 프로퍼티를 반드시 정의해야 한다...
C# - 제네릭 (Generic)
·
C#
제네릭 (Generic)클래스나 메서드를 설계할 때 자료형을 구체적으로 지정하지 않고, 형식 매개변수(Type Parameter)로 열어둔 뒤, 실제 사용할 때 원하는 자료형을 지정할 수 있도록 하는 기능이다.쉽게 말해 타입을 나중에 정하는 설계 기법 이라고 이해하면 된다. 예를 들어 Cup이라는 클래스와, Cup에 담을 수 있는 것들을 정의한 Milk, Coffee, Water, PaperClip 이라는 클래스를 정의했다고 가정해보자class Milk{ public string ExpireDate { get; set; }}class Coffee{ public string Type { get; set; }}class Water{ public string Name { get; set; }}..
C# - 추상 클래스 실습 문제 풀이
·
C#
과제 1)Trainer라는 클래스를 하나 만들겠습니다. 해당 클래스는 필드로 획득뱃지 갯수를 저장하는 정수형, 이름을 나타내는 문자열 필드, 그리고 스타팅몬스터를 기입할 수 있는 문자열 필드를 보유하게 합니다.using System;namespace ClassInherit{ class Trainer { public int BadgeCount { get; set; } public string Name { get; set; } public string StartMonster { get; set; } }} 과제 2)트레이너를 생성할 때, 이름과 스타팅몬스터의 이름을 문자열로 입력받아 객체를 만드는 생성자를 하나 만들어 주세요. 또한 스타팅몬스터를 바꿀 수..
C# - 추상 클래스 (Abstract Class)
·
C#
추상 클래스 (Abstract Class)완전한 구현체가 아닌, 객체 지향 프로그래밍에서 공통된 뼈대만 제공하는 클래스를 말한다. 주요 특징은 다음과 같다.인스턴스화 불가능 : 직접 new 키워드로 객체를 만들 수 없다상속 전용 : 다른 클래스가 상속받아 구체적인 기능을 구현하는 용도로만 사용된다.추상 메서드 (Abstract Method) : 자식 클래스에서 반드시 재정의 하도록 강제하는 메서드를 포함할 수 있다.일반 메서드, 필드, 프로퍼티도 포함 가능 : 단순 뼈대만 있는 인터페이스와 달리, 일부 기본 구현을 제공할 수 있다. 즉, 추상 클래스는 부분적으로 구현된 클래스이자 뼈대가 되는 클래스다. abstract class MyClass{ // 추상 메서드 (내용 없음. 자식 클래스에서 반드..
C# - 클래스 상속 (Inheritance)
·
C#
상속 (Inheritance)상속은 객체지향(OOP)의 핵심 특징 중 하나다.이미 만들어진 부모 클래스(base class)의 속성과 기능을 자식 클래스(derived class)가 물려받아 사용할 수 있는 구조를 말한다.상속을 통해 중복 코드를 줄이고 유지 보수성을 크게 높일 수 있으며 계층 구조 설계가 가능해진다. 예시를 통해 상속이 왜 필요한지 알아보자. class Sedan{ float _maxSpeed; string _brand; public void SedanAction() { Console.WriteLine("동승자 태우기"); } public void Drive() { Console.WriteLine("주행"); }}cla..
C# - 클래스와 구조체의 차이
·
C#
이전까지의 글에서 클래스(Class)와 구조체(Struct)에 대해서 다뤘었다.해당 글에서도 둘의 차이에 대해 비교해 보았지만 이번 글에서는 이 차이점만을 다뤄보려 한다. 값 타입 (Value type) vs 참조 타입 (Reference Type) 값 타입 (Value Type)스택(Stack)에 저장되는 데이터데이터를 복사해서 전달독립된 값을 가지므로, 다른 변수에 복사해도 원본과 무관int a = 10;int b = a; // 값 복사b = 20;Console.WriteLine(a); // 10Console.WriteLine(b); // 20 참조 타입 (Reference Type)힙(Heap)에 객체가 저장되고, 스택에는 그 주소(참조)만 저장변수를 복사하면, 참조가 복사되므로 같은 객체를 가리킴..
C# - 클래스 실습 문제 풀이 (생성자)
·
C#
과제1 - 트레이너와 몬스터 제작하기트레이너와 몬스터 클래스를 구현하시오. 각 클래스는 다음과 같은 속성과 기능을 지녀야 한다.Class Trainer이름 : 플레이어 이름, 프로그램 시작 시 입력하도록 구현 몬스터를 보관할 수 있는 크기 6의 배열Add() : 매개변수로 몬스터를 하나 입력받아 배열의 빈 자리에 추가. 빈 자리가 없다면 추가되지 않음Remove() : 매개변수로 몬스터를 하나 입력받아 동일한 이름을 가진 몬스터를 배열에서 삭제.이름에 해당하는 몬스터가 없거나 배열에 몬스터가 한마리도 없는 경우 아무 기능도 수행하지 않음.PrintAll() : 자신이 가지고 있는 모든 포켓몬에 대한 정보를 출력Class Monster 이름, 레벨 : 객체의 인스턴스 생성 시 new할당에서 이름과 레벨을 ..