js
Readline에서 clear구현

readline을 통해서 반복적으로 입력을 받을때, 출력문이 입력창을 침범하는 문제를 해결하는 방법

function clearConsole() {
	process.stdout.write("\x1B[2J\x1B[0f");
}

을 내가 원하는 시점에 선언하여 console을 모두 지울 수 잇습니다.

" \x1B[2J\x1B[0f "는 ANSI Escape Code 중 하나로, 콘솔 화면을 지우는 명령입니다. 이를 통해 이전 출력을 지우고 새로운 내용을 출력할 수 있습니다.

구체적으로 각 제어 문자들의 역할은 다음과 같습니다:

\x1B: 이스케이프 문자(ESC)
[: 제어 시퀀스의 시작을 나타냄
2J: 화면을 지우는 제어 시퀀스. 콘솔의 내용을 완전히 지웁니다.
\x1B: 이스케이프 문자(ESC)
[: 제어 시퀀스의 시작을 나타냄
0f: 커서를 화면의 시작 위치(1행 1열)로 이동시키는 제어 시퀀스.

이렇게 사용하면 콘솔 화면을 완전히 지우고, 커서를 다시 첫 번째 행의 첫 번째 열로 이동시켜서 새로운 출력을 시작할 수 있습니다. 즉, 새로운 내용이 출력되는 위치가 이전 출력의 위치에 덮어씌워지게 됩니다.

참고로, ANSI Escape Code는 다양한 터미널에서 색상, 스타일, 위치 등을 제어하기 위해 사용되는 특수한 문자열입니다. 이 코드들은 터미널에서 동작하며, 모든 터미널에서 지원되지는 않을 수 있습니다. 따라서, 위의 코드가 모든 환경에서 작동하는 것을 보장할 수는 없습니다. 특히, 일부 플랫폼이나 터미널 환경에서는 제대로 동작하지 않을 수 있으니 참고하시기 바랍니다.

따라서,

const readline = require("readline");
 
const rl = readline.createInterface({
	input: process.stdin,
	output: process.stdout,
});
 
let sum = 0;
function clearConsole() {
	process.stdout.write("\x1B[2J\x1B[0f");
}
 
function main() {
	rl.question('숫자를 입력하세요 (종료하려면 "q"를 입력하세요): ', (input) => {
		if (input.toLowerCase() === "q") {
			console.log(`총합: ${sum}`);
			rl.close();
		} else {
			clearConsole();
			const number = parseInt(input);
			if (!isNaN(number)) {
				sum += number;
				console.log(`현재 총합: ${sum}`);
			} else {
				console.log("유효한 숫자를 입력하세요.");
			}
			main();
		}
	});
}
main();

다음과 같이 입력하면, 내가 원하는 시점에서 다시 console을 지워 보다 명확하게 출력을 진행할 수 있습니다.