C# List, ArrayList, Dictionary
·
C#
List 내부적으로 배열을 사용하여 구현되고 같은 타입만 저장할 수 있습니다. 또 Generic으로 구현되어 박싱 언박싱이 일어나지 않아 타입 안정성 보장됨. 단점으로는 내부적으로 배열을 사용하여 구현되기 떄문에 중간에 데이터를 추가, 삽입, 삭제할 경우 배열을 다시 할당하고 복사를 수행하기 때문에 성능 저하가 있을 수 있습니다. 또, 원하는 데이터를 찾을 때 순차적으로 배열을 전부 돌기 때문에 데이터가 많을 수 록 탐색이 비효율적입니다. ArrayList object 타입으로 구성되어 었어, 서로 다른 타입의 데이터를 배열에 저장할 수 있다는 장점이 있으나 단점으로는 박싱 언박싱이 일어나기 때문에 성능 저하가 일어날 수 있습니다. Dictionary Hashtable을 기반으로 Key-Value Pai..
Unity Interface
·
C#
1. Interface를 사용하는 이유 Interface를 사용하는 가장 큰 이유는 다중 상속을 위해서입니다. Class의 경우 일반적으로 한개의 클래스만 상속을 받을 수 있는데, 이를 보완할 수 있는 방법이 Interface입니다. 상태를 나타내는 Condition이라는 클래스가 있습니다. 이 클래스는 체력, 배고픔, 스태미너와 같은 어떠한 상태를 나타내기 위한 Class로, 어떠한 Value값을 줄이거나 더하거나 할 수 있는 기능이 포함되어 있습니다. Condition의 구조를 가진 체력, 배고픔, 스태미너를 나타내는 health, hunger, stamina을 생성해주었습니다. 여기서 만약 데미지를 입어야하는 함수가 필요하다면, 해당 함수가 필요한 변수는 health 하나 일 것입니다. 따라서, C..
C# BlackJack
·
C#
최근 진행하고 있는 스파르타 부트캠프 과제로 블랙잭 만들기가 주어졌습니다. 따라서 오늘은 C# 콘솔 환경에서 블랙잭 게임을 구현 해보겠습니다. 1. 블랙잭 규칙 블랙잭 게임은 카지노에서 흔히 볼 수 있는 게임으로 카드의 합이 21에 가까운 사람이 승리하는 간단한 규칙의 게임입니다. 게임이 시작되면 딜러와 플레이어는 카드를 2장씩 받게 됩니다. 만약 이때 플레이어의 카드의 합이 21이면 그 즉시 블랙잭으로 승리하게 됩니다. 단, 딜러 카드의 합 또한 21이면 무승부 처리됩니다. 딜러는 무조건 카드의 합이 17이상 되도록 카드를 뽑아야하기 때문에 어떻게 보면 플레이어가 조금 유리한 게임이라고 할 수 있습니다. 하지만, 딜러와 플레이어 모두 21이 넘었을 경우에는 무조건 플레이어의 패배이기 때문에 플레이어는 ..
C# SnakeGame
·
C#
1. 뱀 게임 만들기 최근 진행하고 있는 부트캠프에서 과제로 뱀 게임이 주어졌습니다. 오늘은 뱀 게임을 만들면서 느꼈던 고민들과 구현 내용을 포스팅 하겠습니다. 2. 뱀 게임의 요구사항 1. 뱀은 매 턴마다 자신의 앞으로 이동합니다. 2. 사용자는 방향키를 이용하여 뱀의 이동 방향을 제어할 수 있습니다. 3. 뱀은 맵에 무작위로 생성되는 음식을 먹을 수 있습니다. 4. 뱀이 음식을 먹으면 점수가 올라가고, 길이가 늘어납니다. 5. 뱀이 벽이나 자신의 몸에 부딪히면 게임이 끝나고 'Game Over' 메세지를 출력합니다. 요구사항들을 확인하며 가장 많이 고민 했던 부분들은 아래와 같습니다. 1. 콘솔 환경에서 사용자의 키 입력 받기. - 콘솔 환경에서 Console.Wirte로 문자열 입력은 받아 봤지만,..
C# virtual, override
·
C#
1. virtual을 사용하는 이유 Monster 클래스를 상속 받은 Slime이라는 클래스가 있습니다. Slime 클래스는 슬라임의 종족 특성으로 기존 몬스터 이동속도에서 추가 되야하는 이동속도 값이 존재합니다. 이를 위해 Slime의 GetMoveSpeed라는 프로퍼티를 구현해서 추가 이동속도 값을 더해서 값을 반환해줬습니다. 이후 slime 객체에서 Move()를 실행하게 되는데 문제는 여기서 발생합니다. 슬라임의 이동속도를 더하는 GetMoveSpeed를 만들었지만 사용되지 않았습니다. 이는 Move()안의 매개변수 Monster가 다형성이기 때문입니다. Monster는 Monster 클래스를 가리키지만 동시의 Monster 클래스를 상속 받은 Slime이 될 수도 있습니다. 따라서 위 코드의 _..
C# Partial
·
C#
1. 파티셜을 사용하는 이유 partial은 부분적인이라는 뜻에서 알 수 있듯이 하나의 클래스를 여러개로 나눠서 작업할 수 있게 하는 키워드입니다. 우리가 코딩을 하다보면 하나의 클래스 안에 너무 많은 내용이 담길 때가 있습니다. 이렇게 많은 내용을 담다 보면 프로그램의 줄 수가 늘어나서 가독성도 안좋아지고, 하나의 클래스가 하는 역할을 파악하는데 시간이 오래 걸릴 수 있습니다. 이럴 때 파티셜을 사용하면 하나의 클래스를 쪼개서 여러개로 관리 할 수 있게 됩니다. 2. 파티셜 사용법 Player로 예를들면 Player의 퀘스트, 전투, 이동과 같은 부분으로 기능을 세분화 할 수 있습니다. Class 파일을 생성하여 Player 클래스가 가지고 있던 역할을 분담 해줍니다. 사용 방법은 세분화 시킬 Play..
C# Static
·
C#
static은 고정된이라는 이름 자체에서도 알 수 있듯이, 어떠한 객체에 정적인 속성을 부여하는 키워드 입니다. 1. Static 사용법 - Static을 사용하지 않았을 경우 Monster클래스의 멤버변수 name과 hp는 정적이지 않기 때문에 객체 각각의 값을 가집니다. 그렇기 때문에 실행 결과가 위처럼 Monster객체 monster1과 monster2가 서로 다른 이름을 출력한 것입니다. - Static 활용시 Monster클래스의 멤버변수 name을 static으로 지정해주었습니다. static으로 지정된 name은 스태틱 메모리 영역에 할당되며 단 하나만 존재하게 됩니다. Monster 클래스의 name은 단하나만 존재하기 때문에 monster1에서 생성자로 "슬라임"이라는 이름을 변경해도 처..
C# Class
·
C#
1. 클래스란? 클래스는 쉽게 말하면 객체를 만들기 위한 틀 혹은 설계도라고 할 수 있습니다. 예를 들어 몬스터라는 오브젝트를 만든다고 했을때 몬스터를 만들기 위한 설계도라고 생각하면 됩니다. 몬스터를 만들기 위한 설계도는 어떻게 구성하는 것이 좋을지 생각해보고, 그 생각한 내용을 클래스에 담으면 됩니다. 2. 클래스 생성 클래스의 선언은 위 코드에서도 알 수 있듯이 class 키워드를 통해 만들 수 있습니다. 이후 class안에 객체가 가져야할 요소들을 넣어 주면 됩니다. 3. 클래스 사용 클래스의 생성은 위와 같습니다. 클래스를 보다 잘 활용하기 위해선 반드시 접근제한자라는 개념에 대해 알고 있어야합니다. 접근제한자 public은 아무데서나 접근이 가능하고 private은 클래스 내에서만 접근이 가능..