JavaScript 기본
Key와 Value 쌍의 컬렉션
1. 사용자 정의 타입 컬렉션 (Object)let elixirLevels: {[heroLevel: number]: number} = {};elixirLevels[1] = 10;elixirLevels[2] = 20;elixirLevels[3] = 30;가장 간단하게 Key와 Value 쌍으로 이뤄진 컬렉션은 위와 같이 만들 수 있다. 이러한 타입은 Object라고 한다. key값은 string과 number(enum number도 가능)만 사용할 수 있으며 value는 제약이 없다. 컬렉션에 원소 추가, 삭제, 검색 등의 함수들은 본인이 따로 만드는 것이 아닌 이상 존재하지 않으며, 이 Object의 key와 value에 접근할 수 있는 함수들은 ObjectConstructor에 존재한다. let k..
순환 참조
옛날에 C++ 공부할 때 경험했던 순환 참조는 위와 같이 두 개의 헤더 파일이 서로를 include 했을 때 발생하는 문제였다. 이런 경우에는 주로 헤더파일 include 없이 참조하려는 클래스를 전방 선언하는 방법으로 해결했다. 최근에 타입스크립트에서도 비슷한 문제를 겪게 되었다. A-Script.tsimport { B } from "B-Script";export class A {}class Main { nodeA: A; constructor() { this.nodeA = new B(); }} B-Script.tsimport { A } from "A-Script";export class B extends A {} 이러한 구조에서 컴파일을 하니 코코스 크리에이터 에디터에서 ..
Call By Sharing
let array = [0,0,0];array = [];C#에서는 Array와 List에 Clear 함수가 있지만, 자바스크립트와 타입스크립트에는 존재하지 않는다. 그래서 자바스크립트에서는 배열을 빈 배열로 초기화할 때는 위와 같이 빈 배열 []로 덮어 씌우면 된다. 그동안 위와 같은 방법을 계속 사용하다가 흥미로운 점을 발견했다. onLoad() { let array = [0,0,0]; this.Clear(array); console.log(array); // [0,0,0]}Clear(array: Array) { array = [];}Array 타입은 number와 같은 기본 타입이 아닌 객체 타입이기 때문에 Clear 함수의 매개변수로 전달할 때 Call By Refer..
함수 리스트 (Delegate)
유니티에서 옵저버패턴과 delegate를 사용했었던 경험이 몇 번 있었는데, 타입스크립트와 코코스 크리에이터를 사용하는 프로젝트에서도 비슷하게 사용하고 싶은 상황이 생겼다. export class Manager { static delegate1: { [key: string]: any } = {}; // functions 컬렉션 static delegate2: Array = []; // functions 배열}delegate는 이런 식으로 Dictionary 형태 또는 List 형태로 생성할 수 있다. 아무래도 타입스크립트는 함수와 변수를 다루는 데 있어서 차이가 없다시피 하고 any 타입으로 함수를 지칭할 수 있기 때문에 사용하기 더 간편하다. start() { Manager..
Array 함수 #6. 기타
1. toStringlet input = [1,2,3,4];let output = input.toString(); // output = '1,2,3,4'일반적으로 toString은 숫자 하나와 같은 객체 하나를 문자열로 변환할 때도 쓸 수 있지만 배열에 사용했을 때는 배열의 원소들을 연결해서 하나의 문자열로 반환한다. 만약 number 타입이 아닌 string 타입의 배열 ['1', '2', '3', '4']를 만들려면 let input = [1,2,3,4];let output = input.map(String); // output = ['1','2','3','4']map 함수를 써서 변환하려는 타입을 전달하면 된다. 2. joinlet input = [1,2,3,4];let output = i..
Array 함수 #5. sort
1. sort let input = ['a','b','A','ddd','C','a7'];let output = input.sort(); // input = output = ['A','C','a','a7','b','ddd]sort 함수는 정렬한 후의 결과 배열을 리턴하며, 원본 배열도 같이 수정된다. 매개변수를 생략할 경우 ASCII 문자 표 기준 오름차순으로 정렬된다. let input = [8,3,5,0,11,6];let output = input.sort(); // input = output = [0,11,3,5,6,8]위의 배열을 정렬하면 예상과 다르게 11이 3 보다 앞서있다. 그 이유는 내부적으로 배열의 원소들을 string으로 형변환하고, 이후에 첫 번째 문자를 기준으로 정렬..
Array 함수 #4. reduce vs.forEach
1. reduce reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T;reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T;reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;reduce 함수는 배열을 순회하면서 콜백 함수를 반복 실행하고, 모든 반복의 결과를 하나의 값으로 줄이는(..
Array 함수 #3. 배열에 원소 추가,삭제
1. slice 특정 배열을 start 인덱스부터 end 인덱스까지 잘라서 새로운 배열에 넣어 리턴하는 함수다. 함수의 반환 값은 잘라낸 원소들로 이뤄진 새 배열이다. 함수 자체는 두 개의 파라미터를 받는 간단한 형태인데 두 파라미터를 어떻게 넣는지에 따라 아주 다양하게 결과가 나오기 때문에 주의가 필요하다. start와 end 주의점배열의 인덱스를 벗어나는 수를 입력해도 에러가 발생하지는 않음양수인 경우, 배열의 앞에서부터 인덱스를 의미함음수인 경우, 배열의 뒤에서부터 세는 인덱스를 의미함양수이면서 그 절대값이 배열의 길이 이상인 경우, 배열의 길이와 같은 인덱스를 의미함음수이면서 그 절대값이 배열의 길이 이상인 경우, 0을 의미함start가 undefined인 경우, 0을 의미함end를 지정하지 않을..