타입스크립트 TSC

김민준·2023년 8월 1일
0
  1. 타입 스크립트와 컴파일러
  2. 키오스크 개발
    프로그래머스

공부하며 느낀 점
참조한 사이트

1. 타입 스크립트와 컴파일러

타입 스크립트에는 TSC라는 컴파일러가 있다.

컴파일러 란?
컴퓨터 언어를 다른 언어로 변환해주는 도구이다.
정적 언어의 정체성을 유지해주는 도구이다.

  1. 타입검사를 해준다.
    예) 숫자 타입을 문자열로 대입하면, 코드 편집기에서 부터 에러로 내뱉는다.
  2. 소스코드의 어느 레벨, 어느 위치에서 에러가 났는지 알려준다.
    자바스크립트의 경우, 알려주지 않아서 스스로 console.log를 찍어야한다.
  3. 코드변환
    예) 타입 스크립트 > 자바스크립트
    예) C언어 > 기계어
    내가 짠 코드가 어떻게 변환 될 지 예상하고, 디버깅을 수월히 할 수 있다.
  4. 최적화
    비효율적으로 작성 된 코드를 효율적으로 실행 될 수 있도록 내부적으로 바꿔준다.

코드의 실행 주체에 따라서 기계어가 아니어도 된다.
Node.js, Chrome V8엔진, FireFox SpiderMonkey가 코드 해석 실행을 담당하기 때문에, 기계어 변환 없이 순수 자바스크립트로 실행이 가능하다.

자바스크립트는 인터프리터언어이다. 즉, 한 줄씩 실시간 번역을 하기 때문에 오류를 미리 잡기 힘들다.

대표적인 TSC 명령어 네 개

  1. tsc --init
    tscconfig.json 생성
  2. tsc index.ts
    index.ts를 컴파일한다.
  3. tsc src/*.ts
    src 디렉토리 안의 모든 TS파일을 컴파일한다.
  4. tsc index.js --declaration --emitDeclarationOnly
    @types 패키지를 위한 .d.ts 파일을 생성하는 명령어

키오스크 개발

뭔가가 잘못되었다.

마이그레이션은 이렇게 해놨는데 없는 값을 추가하면, DB에서 거르는 것이 아니라 그 이외의 값은 입력이 안되는 것이었다.

제대로 걸러낸다

못걸러낸다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
아니 왜...

매서드 내에서의 if문사용

findAll 매서드 내에서 if문 사용은 불가능하다.

itemInquiryRepository = async (orderFilter, orderSort) => {
    console.log("orderFilter:", typeof orderFilter, orderFilter);

    let whereClause;
    if (orderFilter !== "all") {
      whereClause = { type: orderFilter };
    } else {
      whereClause = {};
    }

    const Inquiry = await Item.findAll({
      where: whereClause,
      attributes: { exclude: ["itemOrderCustomerId"] },
    });

    return Inquiry;
  };

위와같이 밖에서 변수와 if문을 선언하고 안에서 써먹었다.

프로그래머스

나머지가 1이 되는 수 찾기

풀기전에 생각

  1. 항상 소수여야지 자신 -1이어야 1이 남는가?
    아니다. : 31은 소수지만 2나 5로 나누면 1이 남는다.
  2. 그냥 소수-1의 약수를 구하면 되는가?
    2를 제외한 소수는 홀수이며, 홀수-1은 짝수이니 될것같다.
  3. 짝수면 자신-1이어야 하는가?
    예시에 나온 10의 경우 9로 나누면 1이 남긴하지만, 반대로 3으로 나눠도 되기 때문에 아니다.
  4. 소수가 아닌 홀수면 자신-1의 약수... 즉, 2면 된다...

결론 : 홀수인경우면 2에서 끝나고, 짝수인 경우 1씩 올려야한다.
그런데, 홀수인지 확인하는 과정 자체가 2로 나눠서 나머지를 보는 것이기 때문에 따로 조건을 짤 필요는 없을 것같다.

답이 항상 존재한다니까 2부터 시작하면 되겠다.

나의 풀이

function solution(n) {
  var reminder = 0;
  let i = 1;

  while (reminder !== 1) {
    i++;
    reminder = n % i;
  }

  return i;
}

나머지가 1이 될때까지 i를 1씩 증가 시키면서 나머지를 구하게 코드를 짰다. 원래는 i를 2부터 시작했는데 그러면 답을 다 구한다음에 i가 1 증가하는 문제가 생겨서 i를 1부터 시작시키고, 나누기전에 i를 1증가시키는 방법을 선택했다.

다른 사람의 풀이 1.

function solution(n, x = 1) {    
    while (x++) {
        if (n % x === 1) {
            return x;
        }
    }    
}

while문의 조건안에 증감을 넣을 수 도 있다는 것을 배웠다.

다른 사람의 풀이 2.

const solution = function(n) {
    for (let i=0; i<n; i++){
        if (n%i == 1){
            return i
        }
    }
}

제일 무난한 방법인것같다.

공부하며 느낀 점

  1. 조건을 먹일 때 좀 더 자세히 따져야겠다.
    느낌적 느낌으로다가 조건을 지정하니 말도 안되는 조건이 되었다.

  2. 매서드의 안에서는 if문을 사용할 수 없고, 대신 밖에서 적용한뒤 매서드 안에 변수를 넣는 방법을 사용해야한다.

참조한 사이트

나머지 영어로

profile
node 개발자

0개의 댓글

관련 채용 정보