요새 typeScript 공부중/간단하게 프로젝트 코드 설명하고 공부 기록 남길 예정임
[구현화면]
[typescript 코드]
let calcArray: (number | string)[] = []; // 계산할 값을 저장할 배열
let inOperCheck: boolean = false; // 연산자 체크 (true일 경우, 숫자 입력)
let resultNum: boolean = false; // 계산 완료된 상태 체크
let currentNum: string = ""; // 입력 중인 숫자
let result: number = 0; // 결과 값 저장
// .calc_input
let calcInput: HTMLInputElement | null = null;
document.addEventListener("DOMContentLoaded", () => {
calcInput = document.querySelector(".calc_input") as HTMLInputElement;
});
// 숫자 클릭 시 calcInput으로 값 추가
const inputNum = (event: MouseEvent) => {
let btn = event.target as HTMLButtonElement;
// 계산 완료 후 숫자 클릭 시 초기화
if (resultNum) {
resetCalculator();
}
resultNum = false;
inOperCheck = true;
currentNum += btn.textContent!; // 숫자 입력 시 계속 이어 붙여줌
calcInput!.value = currentNum; // calcInput에 현재 숫자 표시
};
// 연산자 클릭 후 계산을 위한 함수 (연산자별 함수 통합)
const handleOperator = (operator: string) => {
if (resultNum) {
resetCalculator();
currentNum = result.toString(); // 이전 계산된 결과를 currentNum에 할당
calcArray = [result]; // calcArray에 결과값만 추가
calcInput!.value = currentNum; // calcInput에 결과값만 표시
}
if (inOperCheck) {
if (currentNum) {
calcArray.push(Number(currentNum)); // 현재 입력된 숫자를 배열에 추가
}
calcArray.push(operator); // 연산자 추가
currentNum = ""; // 연산자 후에는 currentNum 초기화
calcInput!.value += operator; // calcInput에 연산자 추가
}
inOperCheck = false;
};
// 각 연산자 처리 함수
const calcPlus = () => handleOperator("+");
const calcMinus = () => handleOperator("-");
const calcMultiply = () => handleOperator("*");
const calcDivision = () => handleOperator("/");
// 계산 결과 출력
const inputResult = () => {
if (currentNum) {
calcArray.push(Number(currentNum)); // 마지막 입력된 숫자도 배열에 추가
}
result = calcArray.reduce((acc: number, item: string | number, index: number, array: (string | number)[]) => {
if (index === 0) {
return Number(item); // 첫 번째 값은 숫자로 변환
}
let currentOper: string = array[index - 1] as string; // 연산자
let nextNumber: number = Number(item); // 숫자형으로 변환
// 연산자에 따라 계산
switch (currentOper) {
case "+":
return acc + nextNumber;
case "-":
return acc - nextNumber;
case "*":
return acc * nextNumber;
case "/":
return acc / nextNumber;
default:
return acc;
}
}, 0); // 초기값 0
calcInput!.value = result.toString(); // 결과를 calcInput에 출력
resultNum = true; // 계산 완료 상태
calcArray = [result]; // calcArray를 계산된 결과로 초기화
};
// 계산기 초기화 함수
const resetCalculator = () => {
calcInput!.value = ""; // calcInput 초기화
calcArray = []; // calcArray 초기화
currentNum = ""; // currentNum 초기화
resultNum = false; // 계산 완료 상태 초기화
};
대략 위와 같은 구조로 함수를 설계함.
★★★ 프로젝트하면서 느낀 점(이건 퍼블 실무하면서 느낀점도 포함)
1) 초기화함수 : 제일 첫번째로 넣기(현재 제일 마지막에 한건 잘못된듯)
★★ 그 외 내 생각
1) 나는 프론트앤드 개발자가 되고 싶다라기 보다 이 웹이라는 분야가 재밌고 광범위해서 좋다.
배우면 배울수록 우주같다. 파도파도 끝이 없는 이 분야가 좋을 뿐이다. 아직 내가 알고 있는건 일부분이고 그 일부분에서도 내가 주니어를 조금씩 벗어나고 있다는 사실자체도 흥미롭다.