본문 바로가기
TIL&WIL

241112 TIL- async, 개인과제01

by 나노다 2024. 11. 12.

async 추가 내용

async로 비동기 처리가 된 함수는 자동으로 Promise를 반환함!! await를 맥일 수 있다는 뜻!!

 

개인과제 LoveLike

[ 오늘 한 작업 ]

[update]

1. Classmate 클래스 변경점

- 생성자 함수에 stage 매개변수로 받게 함

- 이름 속성 배열 형태로 추가

- 스테이지 속성 추가

- isTalk 메서드 기능 추가(스테이지 별 분기 나눠야함, 아직 기본형)

2. Player 클래스 변경점

- 훈련 별 메서드 기능 추가

- 상호작용 메서드 Classmate 클래스로 이동

3. 스테이터스 함수 세분화

- 내방 장면과 교실 장면으로 세분화 혹시 리팩토링 과정에서 다시 합쳐질 수 있음

4. battle 함수 삭제 및 세분화

- 훈련을 위한 myRoomScene 함수와 상호작용 위한 SchoolScene 함수로 세분화

 

[add]

1. text.js 추가

- 대사 및 이벤트 씬 설명 모아 놓을 예정

2. test.js 추가

- 실험해볼 기능 바로 실행하기 위함

3. ASCII.js 추가

- 장면 별 활용할 아스키 이미지 보관

 

[del]

1. func.js 파일 삭제

- 클래스 메서드나 game.js 파일 내 함수 선에서 해결이 되는 중. 이후 리팩토링 과정에서 부활할 수 있음

 

[fix]

1. 타이틀 텍스트 양식 변경

- 이름과 색, 폰트 변경

- 게임 소개 텍스트 변경

2. 로비와 게임 화면 사이 이벤트씬 추가

- startGame 함수 대신 eventScene 함수 삽입

3. Readme 설명 추가

- 훈련 하루 최대 네 번 설명 추가

4. import 수정

- 파일 삭제 및 클래스 내용 변동 등에 따른 수정 5. 과제가이드 오타 수정

 

[ 오늘 마주한 문제 상황 ]

1) 스켈레톤 코드에 대한 이해도 부족

 chalk, figlet, readline-sync 등의 모듈이 친숙하지 않다보니, 스켈레톤 코드 자체를 이해하는 데에 어려움을 겪었다. 단순 과제 수행만을 위해선 굳이 세세하게 알 필요가 없었지만, 그래도 이왕 하는 거 내가 해보고 싶은 대로 최대한 구현을 하기 위해선 얘네를 어느 정도는 정복할 필요가 있어보였다.

 하지만 각각을 공식 정보를 통해 완벽히 공부하기엔 시간도 시간이고, 부족한 지식 상태에선 더 급히 공부해야할 것들이 산더미였기에, AI의 힘을 빌어보기로 했다. 전 주차에 협업하면서 놀랐던 점이 코딩을 시작한지 3일 된 팀원이 나는 상상도 못할 함수들을 막 구현했던 경우였다. 비법은 AI. 구현하고 싶은 코드를 풀어 설명하면 어느 정도 적합한 코드를 뱉어준다는 것이었다. 뿐만 아니라 이해가 잘 안 가는 코드를 들이밀면 또 말로 풀어 설명을 해준단다.

 일단 AI에 대한 감정이 썩 좋지 않을 뿐더러, 내 실력 향상을 위해선 최대한 기피하고 싶었기에, 그 동안 아무리 어려워도 최대한 검색과 공부를 통해 해결을 해왔다. 하지만 이번 과제를 위해서 구현할 게 산더미인데 같은 방식으로 문제를 해결하려 하니 시간을 효율적으로 쓰지 못 한다는 체감이 엄청났고, 결국 손을 대봤다. 

 딱 스켈레톤 코드만 도움을 받기로 했다. 설명을 기깔나게 잘하더라. 큰 도움이 됐고, 이를 바탕으로 공부가 필요한 내용을 쏙쏙 찾을 수도 있었다. 사전캠프 때 조원 분이 항상 해답을 주기 보단 힌트를 주셨다. 답을 알려주는 건 쉽지만 공부가 안 된다는 의도였고, 백번천번 공감하고 여전히 감사하게 생각한다. 하지만 그 분은 이제 없고... 이 놈의 AI를 그렇게 활용해보기로 했다. 힌트를 얻기 위한 고성능의 도구!

 

2) 커밋 습관 미흡

필요한 기능 구상은 다 했지만 작업 순서도 제대로 설정하지 않은 채 작업을 시작했다. 당연히 생각나는대로 만들고,  그러다 문제되는 부분이 생기면 꼬리 물고 하다 보니 작업 내용이 혼재된 엄청난 덩어리의 커밋이 발생했다. 

 그렇게 한꺼번에 커밋을 하려고 보니, 우선 스스로도 무슨 작업을 했는지 명확하게 떠오르지 않았고, 정리를 해서 올리긴 했지만, 나중에 커밋을 재확인할 때 절대 친절할 거 같지 않다는 생각이 들었다. 작업 내용에 통일성도 없고, 코드도 중구난방에 지저분하고, 책갈피가 필요하다는 생각이 들었다.

 오늘 이렇게 좋은 경험을 하고 나니 그래도 갈피가 잡힌다. 앞으로는 3보 이상 커밋을 모토로 작업을 해버릴 거다. 꼭꼭꼭 작업 내용 및 순서를 체계화한 후 작업을 시작하도록 하자!! 지금의 나를 위해, 앞으로의 나를 위해서도 이게 맞다.

 

3) chalk로 인한 console.log 미출력 오류?

이벤트씬 함수 구현 초기 버전

 

 장면 전환 및 특정 상황을 위한 이벤트씬 함수를 기획하고 구현해보았다. 상황별로 출력할 텍스트가 다르기 때문에, 전개구문을 통한 나머지 매개변수를 활용했는데, 일단 지금은 수정됐지만 저기도 매개변수는 그냥 전개구문 없이 그냥 받아야하는데 잘못했었고, 진짜 문제는 setInterval이 정상작동하지 않는다는 거였다!!

 내부에서 console도 찍어보고 한 결과 setInterval 자체가 작동을 안했다. async await를 활용해 저 부분에서 await가 걸리게도 시도해보고, setInterval을 변수에 담아서 실행해보기도 했는데 역시 작동하지 않았다. 튜터님께서는 아래쪽 console에 사용된 chalk 모듈이 다른 console을 잡아먹는 그런 현상인 거 같다고 하셨는데, 정확한 문제 발생 원인을 스스로 체감하지 못 하는 상황이 답답했다. 실제로 저 부분을 다른 테스트 스크립트 파일에 옮겨서 실행해보니 정상적으로 작동했다! 

 현 지식 상태에서 해결하지 못하는 문제를 만나는 경우가 왕왕 있다. 다른 동료들은 보통 AI를 활용해 문제를 해결해보던데, 영 AI에 대한 감정이 좋지 않아서 문제다. 그래도 오늘 시간 절약을 위해 활용해보니 꽤 성능이 좋았다! 경계하지만 말고 적절히 활용해보기로 했다. 칼은 누구 손에 쥐이느냐에 따라 쓸모가 다르다고 했다! 최고의 도구로 만들어주겠음...