2024_01_09 TIL
·
TIL
1. 오늘 배운 것 리스트는 배열리스트 방식과 연결 리스트 방식이 있다. 배열리스트의 장점: 연결리스트에 비해 찾기 속도가 빠르다. 연결리스트 장점 : 배열리스트에 비해 삽입, 삭제가 용이하다. 대부분에 언어에서 연결리스트 방식을 사용하지만 특이하게 C#에서는 배열리스트 방식을 사용한다. 2. 앞으로의 일정 오늘부터 팀과제 주간이 시작되었습니다. 다행이도 팀원분들이 전부 실력자 분들이셔서 크게 문제 없이 과제를 진행할 수 있을 것 같고, 많은 것을 배워갈 수 있을 것 같습니다. 팀원 분께 깃허브에서 Main으로 합치기전에 Dev라는 브런치를 만들어서 중간 다리 역할을 나눈다는 사실을 배웠습니다. 또한 feature를 만들어서 조금 더 세분화 시켜 관리할 수 있다는 것도 배웠습니다. 팀 과제에서 제가 맡은..
2024_01_08 TIL + 지난 주 WIL
·
TIL
1. 오늘 배운 것 오늘은 C# 환경에서 블랙잭을 만들어 봤습니다. 다행이도 크게 어려운 과제는 아니였고 과제 시작 점부터 클래스가 짜여있었기 때문에 어렵지 않게 했던 것 같습니다. Class를 설계할 때 세세한 부분까지 설계하고 기능도 해당 객체와 관련된 기능들도 Class에 넣는게 좋겠다는 생각이 들었습니다. 2. 지난주 학습을 하면서 느낀점 그동안 만들었던 프로그램들은 객체지향 언어의 장점을 많이 살리지 못했던 것 같다는 생각이 많이듭니다. 강사분들의 해설 영상이나 과제들의 해결방안을 보면, 객체 하나하나가 짜임새 있고 그런 객체들이 잘 모여서 하나의 게임이 되는 마치 레고같은 느낌인데, 그동안 제가 만든 게임은 마치 3D프린터로 원테이크로 뽑아낸 작품 같았습니다. 부품을 조립해서 만든 게임은 이후..
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은 클래스 내에서만 접근이 가능..