string 강의 + 3주차 팀 프로젝트 시작!
1. string 강의
문자열을 활용하는 새로운 방법들을 많이 배웠습니다.
1) 확장 메서드
Trim() / TrimStart() / TrimEnd() | 앞뒤 공백 제거 / 앞/뒤 공백만 제거 |
Substring(int start, int length) | start에서 length 길이만큼 문자열 자르기 |
Split(char separator) | 구분자를 기준으로 문자열 배열들로 나누기 |
StartsWith() / EndsWith() | 접두, 접미 확인 (Ex) "Item: 포션" => StartsWith("Item:") |
Contain(string find) | find 문자열에 포함되어 있는지 |
Replace(string str1, string str2) | str1을 str2로 문자열 교환 |
Remove(int start, int length) | start에서 length 길이만큼 문자열 제거 |
Insert(int index, string insert) | index 위치에 insert 문자열 삽입 |
PadLeft(총 너비, 패드 문자) or PadRight | 왼쪽/오른쪽에 패드 문자를 채워 표시 |
ToLower() / ToUpper() | 영문 대소문자 통일 |
Length | 글자 수 확인 |
$" " | 문자열 보간 |
string playerName ="YB";
string job = "무직";
int hp = 3;
Console.WriteLine($"{"이름",-10} {"직업",-10} {"HP", 5}");
Console.WriteLine($"{playerName,-10} {job,-10} {hp, 5}");
문자열 보간에 더하여 매번 띄어쓰기를 다 해줬는데 이를 간결히 하는 방법도 배웠습니다.
-10, 5라는 숫자가 들어가 있는 것이 보이는데 이것은 정렬 지정이라고 하였습니다.
음수가 왼쪽에 문자, 양수가 오른쪽에 문자가 옵니다.
하나 주의할 것은 -10이면 이 10칸은 함께 써줄 문자열도 포함하는 숫자라는 것입니다.
이름 2자를 제외한 8칸
_↓_
"이름 "
만약 문자열이 패딩 길이보다 길면 공백은 없어도 문자열은 잘리지 않습니다.
표의 PadRight/Left를 이용하여도 똑같이 할 수 있습니다.
2) nullable 변수
null이 들어올 때 기본값을 출력하게끔
(변수명) ?? (null이 들어올 때 대신 들어갈 값)
Console.WriteLine($"[무기] {(weapon ?? "없음").PadRigth(10)}");
3) Spectre.Console
콘솔에서 표 형태로 목록 출력 가능! 사용할 때 좀 더 알아보기
이걸 알았다면 틱택토 만들 때 구려 보이게 테두리를 하나하나 그릴 필요가 없었는데.....
지식이 늘었습니다!
위의 새로 배운 정보들을 예제와 함께 배우는 시간을 가졌습니다.
2. 팀 프로젝트 회의
초기에는 팀원님 중에 프로그래밍 관련 경력이 있으신 분이 만든 구조가 제일 좋아보여 이를 기반으로 오후 시간 작업을 시작하였습니다.
해야할 일 : 캐릭터 생성 씬 추가. 바로 이어서 직업 선택 씬이 오기에 이를 한번에 작업해보기로 함
1. 추가한 내용
1) 씬 스크립트 추가
(1) Core/UI/CharCreateScene.cs : 캐릭터 생성 씬 추가
(2) Core/UI/JobSelectScene.cs : 직업 선택 씬 추가
2) 추가한 스크립트에 캐릭터 생성, 직업 선택 안내 및 선택지 구현
2. 기존 스크립트 수정 내용 (팀원님들과 조정 필요)
1) SceneManager.cs : 캐릭터 생성, 직업 선택 씬을 추가
(1) SceneType
추가 내용:
[Description("캐릭터생성")]
CharCreate,
[Description("직업선택")]
JobSelect,
(2) public void LoadAllScene()
추가 내용:
AddScene(SceneType.CharCreate, new CharacterCreateScene());
AddScene(SceneType.JobSelect, new JobSelectScene());
2) Global.cs >> PlayerInitial >> NAME, CLASS
캐릭터 생성 때 입력한 이름, 선택한 직업을 바로 데이터에 써줄 수 있도록 구조 변경
(1) 변경전: public const string NAME = "스파르타 전사";
변경후: public static string NAME = "스파르타 전사";
(2) 추가 : public static ClassType CLASS = ClassType.Warrior;
3) IntroScene.cs
씬 이동 구조 변경
NewGame 메뉴를 선택했을 때 기존의 메인 메뉴씬에서 캐릭터 생성 화면으로 씬 이동
위는 오늘 작업하면서 기록한 내용입니다.
다른 팀원님이 작성한 구조를 해석 후 원하는 기능 추가 중이었습니다.
하지만 해당 구조가 아직 난해한 팀원님들이 다수여서
문법부터 시작하는 기본 주간의 팀 프로젝트 취지를 깨뜨릴 수 있다는 의견이 나와
이를 적극 반영하여 방향을 틀었습니다.
아무래도 다 각자 만들어서 합치기엔 합칠 때 시간이 많이 들 것이니
한 팀원님의 개인과제 프로젝트에서 뼈대를 잡고 시작하는 기존의 방향은 유지하되
보다 처음 프로그래밍을 접하는 팀원님들이 손대기 익숙한 구조에
객체 지향적으로 각자 클래스, 스크립트를 독립적으로 작업하기 쉬운 구조로 만들어진 프로젝트가 있어
내일부터 해당 프로젝트로 시작하기로 하고
남은 시간은 각자 해당 코드를 리뷰하고 어디를 작업할지 생각해보는 시간을 가졌습니다.
1) 팀원님과의 소통의 중요성
빨리 의견을 말해주셔서 빠르게 방향을 수정할 수 있었습니다. 정말 좋았습니다.
저도 어려움이 생기면 팀을 의지하여 적극 도움을 요청하는 자세를 가져야겠습니다.
2) 구조를 만들 때 객체 지향적으로 만들기
제가 만들었던 구조는 메인에 대한 종속성이 너무 심했기에 스스로 프로젝트용으로 부적합하다 판단하고 문제 제기를 하였습니다.
다음부터는 이를 분산하여 각각 필요한 곳에서 각자 클래스에 대한 작업만 하도록 만들어 봐야겠습니다.
3) 다른 팀원님이 작성한 코드로부터 처음 보는 구문 배우기
@"줄바꿔도 됩니다.
이렇게 해도 하나의 문자열로 유지"
이렇게 문자열 앞에 @를 붙으면 줄이 바뀌어도 하나의 문자열로 인식할 수 있는 명령어가 있네요.
마치 /* */ 주석과 비슷하다 생각하면 됩니다.