typescript

    부모 생성자가 호출하는 함수는 비캡슐적이다.

    참고: 이 일지는 노션으로부터 옮겨진 레거시 게시물입니다. 개요 자식 클래스의 생성자 함수에서 호출하는 super()는 부모 클래스의 생성자에서 실행되지 않습니다. class MotherClass { public constructor() { //여러가지 초기화 과정 this.init(); } //이 함수는 외부에서도 호출됩니다. public init(): void { console.log("init called in mother class"); } } class ChildClass extends MotherClass { private readonly field1; public constructor(field1: string) { super(); //여러가지 초기화 과정 this.field1 = field..

    클래스 타입 강제 변환은 메서드를 보장하지 않는다.

    참고: 이 일지는 노션으로부터 옮겨진 레거시 게시물입니다. 개요 자바나 코틀린, 다트 같은 여타 클래스 기반 언어들은 모두 클래스 형 변환을 하면 변환한 클래스의 메서드 또한 호출할 수 있다. 하지만 자바스크립트는 메서드 또한 속성이자 객체다. 타입스크립트에서 인터페이스나 클래스 따위를 제공한다 해서 메서드를 자바처럼 생각해선 안된다. 하지만 타입스크립트를 갓 접한 나는 클래스와 인터페이스 같은 자바와 유사한 환경에 빠져 자바로 착각하며 코딩을 했었다. 저장 데이터를 JSON파일에 넣고 불러올 때 객체를 그대로 원하는 클래스로 형 변환해 썼던 것이다. 당연히 객체엔 함수가 없었고 결국 에러는 터지고 내 머리도 터졌다.

    Next.js에서 ./와 /는 다르다

    참고: 이 일지는 노션으로부터 옮겨진 레거시 게시물입니다. https://nodejs.org/api/url.html#url_url_strings_and_url_objects Node.js의 url 객체 명시에 따라 절대 경로는 일반적으로 http, https와 같은 프로토콜이 앞에 있다. 또한, 보편적으로 상대 경로는 프로토콜 없이 경로 앞에. 또는.. 을 둠으로써 현재 위치를 중심으로 경로를 구성한다. 하지만 웹사이트에서 네비게이션 바와 같이 라우팅에 쓰이는 컴포넌트들의 경우엔 현재 위치가 어떠하든 동일한 경로를 갖고 있어야 하는 절대 경로의 성질을 갖고 있어야 하나 개발 버전과 배포 버전의 도메인 차이 때문에 직접 입력하기엔 번거로움이 있다. Next.js는. 없이 /로 경로를 시작함으로써 자동으로 ..

    [RPG 개발] 48일차

    참고: 이 일지는 네이버 카페로부터 옮겨진 레거시 게시물입니다. 최근 메시지 접근 구조를 완전히 바꿨습니다. 이제 데이터의 키는 상호작용의 id입니다. 최근 메시지에 대한 의존성을 제거하면서 유닛과의 의존성 역시 많이 제거했습니다. ​ 불필요한 파일들을 대거 정리했습니다. 대개 게임 개발 이전에 테스트 용도로 만들어뒀던 파일들입니다. 이참에 gitignore도 업데이트하고 config.json에서 불필요한 값들을 모조리 제거했습니다. Content.ts의 수많은 클래스들은 content/ 딕셔너리 안에서 모두 모듈이 되었습니다. 게임과 관련된 모듈은 모두 game/ 딕셔너리 안으로 이동되었습니다. ​ 번들 적용 범위를 디스코드 locale에 맞춰 확장했습니다. 해당 프로퍼티 파일이 없을 경우 기본값인 e..

    [RPG 개발] 43일차

    참고: 이 일지는 네이버 카페로부터 옮겨진 레거시 게시물입니다. 저번 달부터 너무 많은 과제양에 피로를 느껴 개발을 중단하고 일지 작성을 멈췄었습니다. 그리고 저번 주부터 개발을 다시 시작하고 있었죠. 문제는 일지 작성으로 카운트하던 개발일을 어떻게 다시 바로잡느냐인데, 이건 깃허브 커밋 날짜와 일지를 기준으로 재정립했습니다. 1월 23일부터 30일에 커밋이 있었으니깐요. ​ 오늘 한 일은 되게 짧으면서도 언젠간 해야 할 일이였습니다. ​ 게임이 안정화 단계에 접어들면서 초대 링크를 일부 서버에 배포하고 있습니다. 하지만 완전히 안정화된 상태도 아니고 릴리즈 봇과 베타 봇이 개별화된 상태도 아니라서 다수의 서버에 배포된 상태로 불안정한 개발 테스트를 시행하는 건 굉장히 위험한 행동입니다. 때문에 정식 릴..

    [RPG 개발] 근황

    참고: 이 일지는 네이버 카페로부터 옮겨진 레거시 게시물입니다. buy 버튼을 누르면 BuyManager에서 임베드를 다시 렌더링 한다. sell 역시 동일하다. ​ ​ 만약 마지막 인자를 생략한다면 "뒤로가기" 버튼이 등장하지 않는다. ​ 고블린은 알루미늄 검을 지닌다.

    [RPG 개발] 디스코드 봇 개발(2)

    참고: 이 일지는 네이버 카페로부터 옮겨진 레거시 게시물입니다. 개선 이전 이후 ​ 사실 코드를 짜고 테스트를 할 때마다, 이 약간의 컴파일 딜레이가 굉장히 거슬렸습니다. 어느 부분에서 얼마나 걸리는지 확인을 했고, 스크립트 초기화 과정만 약 5초가 걸린단 사실을 알아냈습니다. 먼저 불필요한 명령어 초기화를 걷어냈습니다. 이들은 애당초 디코 봇 개발 초기, 게임 기획 이전부터 약간의 연습과 슬래시 커맨드 등록 자동화를 위해 만들었던 일종의 샘플들이었기에 굳이 지금 사용할 필요가 전혀 없기 때문입니다. 두 번째로 명령어 초기화도 최적화를 했습니다. 이 초기화 과정은 게임을 재시작할 때마다 실행되는 초기화 과정과 달리, 디스코드 API 요청을 통해 소스코드에 저장된 명령어들을 디스코드에 업로드하는 과정입니다..

    [RPG 개발] RPG 개발중

    참고: 이 일지는 네이버 카페로부터 옮겨진 레거시 게시물입니다. 구조적 개선. 이를테면.. • 한 아이템 스택에서 모든 아이템이 하나의 내구도를 공유 • 유저와 엔티티가 자체적인 공격 쿨타임을 지녀 공격 책임이 분산 • 자신의 인스턴 스을 인자로 받는 정적 메서드 ​ 게임 개선 • 기존에 존재하던 불규칙적인 런타임 DiscordAPI 에러 • 제대로 적용되지 않는 번들 시스템 • 불필요한 계정 생성 단계(다중 계정) • 매우 불필요한 전투/교환 이벤트 책임 분산 ​ ​ 게임 시스템에서 유저에 대한 의존성을 크게 낮췄습니다. 다중 계정을 깔끔히 포기하고 대신 번들 시스템을 부활시켰습니다. ​ 각 이벤트들을 Manager 클래스로 묶었습니다. 각 Manager 클래스에서 그 이벤트와 관련된 모든 것들이 처리..