TypeScript

[실습] 성적표 프로그램

차돌박이츄베릅 2023. 7. 27. 05:28

프로젝트 세팅 및 확인 과정

  1. 프로젝트 디렉토리 새로 만들기
    1. [터미널] mkdir 폴더명 : 폴더 만들기
    2. [터미널] cd 폴더명 : 폴더로 이동
  2. [터미널] npm init -y
  3. [터미널] tsc --init --rootDir ./src --outDir ./dist --esModuleInterop --module commonjs --strict true --allowJS true --checkJS true
    • --rootDir ./src : 프로그램의 소스 파일이 들어가는 경로는 src 디렉토리입니다.
    • --outDir ./dist : 컴파일이 된 파일들이 들어가는 디렉토리는 dist 디렉토리입니다.
    • --esModuleInterop : CommonJS 방식의 모듈을 ES모듈 방식의 import 구문으로 가져올 수 있습니다.
  4. [package.json] 파일의 “scripts” 항목 수정
    "scripts": {
      "start": "tsc && node ./dist/index.js",
      "build": "tsc --build",
      "clean": "tsc --build --clean"
    },
  5. 최상위에서 src 디랙토리 생성
  6. (src/index.ts 코드 작성 후)
  7. [터미널] npm run build : 프로젝트를 빌드. 컴파일 에러 확인 가능
    (dist/index.js) 파일이 생성된 걸 확인할 수 있음
  8. [터미널] npm run start : 결과 확인

 

 


프로젝트 코드

(src/index.ts)

// Student는 type이라고 생각하면 됨
// Student라는 type의 객체를 받아서 평균을 계산하는 calculateAverage라는 함수를 만들거
interface Student {
  name: string;
  age: number;
  scores: {
    korean: number;
    math: number;
    society: number;
    science: number;
    english: number;
  };
}

// 평균점수를 매개 변수로 받고
// 학점을 문자열로 return 해주는 함수
function assignGrade(average: number): string {
  if (average >= 90) {
    return 'A';
  } else if (average >= 80) {
    return 'B';
  } else if (average >= 70) {
    return 'C';
  } else if (average >= 60) {
    return 'D';
  } else {
    return 'F';
  }
}

// function calculateAverage(student: Student) : number {
//     const scoresArr = Object.values(student.scores);
//     return scoresArr.reduce((calc, curr) => calc += curr) / scoresArr.length
// }

function calculateAverage(student: Student): number {
  const sum = student.scores.korean + student.scores.math + student.scores.society + student.scores.science + student.scores.english;
  const average = sum / 5;
  return average;
}

// 아래 인자들이 주어지면 student라는 객체로 변환해주는 함수
function createStudent(name: string, age: number, korean: number, math: number, society: number, science: number, english: number): Student {
  return {
    name, // name : name의 축약표현
    age, // age : age
    scores: {
      korean,
      math,
      society,
      science,
      english,
    },
  };
}

function printResult(student: Student): void {
  const average = calculateAverage(student); // 평균을 계산
  const grade = assignGrade(average); // 계산된 평균을 기준으로 학점을 추출
  console.log(`${student.name} (${student.age}세) - 평균: ${average.toFixed(2)}, 학점: ${grade}`);
}

function main(): void {
  const spartan = createStudent('Spartan', 30, 95, 89, 76, 90, 97);
  printResult(spartan);
}

main();