이 코드 좀 설명 해줘

오늘 하루 동안 이 말을 몇 번이나 했는지 모른다.

하루 종일 컴퓨터 앞에 앉아 있는데도, 마치 낯선 나라에 여행 온 기분이었다.

길은 보이는데, 표지판이 전부 외계어였다.

그럴 때마다 옆에 있는 ChatGPT에게 물어봤다.

이건 뭐야, 이건 어디로 가는 길이야, 이건 왜 이렇게 써야 해?

단순히 ‘생일까지 며칠 남았는지 알려주는 코드’를 짜고 싶었을 뿐인데,
갑자기 수학 문제 풀 듯 머리를 굴려야 했다.

자바스크립트에서

월이 0부터 시작한다

는 걸 처음 알았을 땐,

진짜 농담인 줄 알았다.

12월을 11이라고 써야 한다니, 생일 계산 하나 하려다가

숫자에 -1을 붙이고 +1을 붙이고…

머릿속에서 날짜가 마구잡이로 왔다 갔다 하기 시작했다.

어릴 때만 쓰던 손가락 계산을 다시 사용하는 날이 올 줄 생각 못했다.

처음 변수 선언을 봤을 땐 이게 도대체 뭘 하자는 건지 감도 안 잡혔다.

let daysLeft = 0;

0이라는 숫자가 왜 여기에 들어있는지,

왜 굳이 저걸 먼저 선언해놔야 하는지,

"그냥 마지막에 계산하면 되는 거 아냐?"

미래의 내가 다시 생각을 해보면

나는 프라이팬도 안 꺼내고 계란을 깨고 있었던 거다.

ChatGPT는 자기 주특기 나왔다고 신이 난 모양이다.

난 아직 이거 하나도 버거운데…

for (let i = currentMonth; i < birthMonth - 1; i++) {
daysLeft += daysInMonth[i];
}

이 반복문은 내 시간을 통째로 삼켜버렸다.

이 세 줄 때문에 두 시간이 날아갔다.

나한텐 i는 복소수 말고는 없다.

i++는 숫자 하나씩 올라가면서 달마다 일수를 더해주는 ‘반복문’이라는데,

나는 그걸 이해 못 해서

달력을 손으로 한 장 한 장 넘기면서 직접 계산을 해야만 했다.

ChatGPT는 내 옆에서 초고속 계산기로 알려주는데,

나는 연필로 끄적끄적 써가며

계산기 말이 맞는지 확인하고 또 확인했다.

1번 째 줄을 너무 열심히 집중을 한 나머지 더하는 걸 까먹을뻔 했다.

  // 3. 생일 월의 일수를 더한다
  dayleft += birthday;

열심히 시험지 앞 장을 다 풀었지만 알고보니 뒤에도 문제가 있는 느낌이다.

if (dayleft < 0) {
  console.log("이미 생일이 지났어요! 🎉");
} else if (dayleft === 0) {
  console.log("🎂 오늘은 생일입니다! 축하합니다, " + username + "님! 🎉");
} else {
  console.log (username + "님의 생일까지" + dayleft + "일 남았습니다!" )
}

이제 실행시킬 코드만 적은 뒤

약간의 뿌듯함을 뒤로 하고 실행할 준비를 했다.

let username = "콰르텟";
let birthmonth = 12;
let birthday = 5;

//현재 날짜
let today = new Date();
let currentday = today.getDate();
let currentmonth = today.getMonth() + 1;

//각 날짜 (2월 윤달은 신경안씀)
let yearmonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

//날짜 객체
let birthdate = new Date(today.getFullYear(), birthmonth - 1, birthday);

//남은 날짜 저장하는 거
let dayleft = 0;

//현재 월 = 생일 월
if (currentmonth === birthmonth) { 
  dayleft = birthday - currentday;
} else {
  // 다른 월인 경우
  // 1. 이번 달의 남은 일수
  dayleft = yearmonth[currentmonth - 1] - currentday;

  // 2. 생일까지 남은 일수를 더하기
  for (let i = currentmonth; i < birthmonth - 1; i++) {
      dayleft += yearmonth[i];
  }

  // 3. 생일 월의 일수를 더한다
  dayleft += birthday;
}

if (dayleft < 0) {
  console.log("이미 생일이 지났어요! 🎉");
} else if (dayleft === 0) {
  console.log("🎂 오늘은 생일입니다! 축하합니다, " + username + "님! 🎉");
} else {
  console.log (username + "님의 생일까지" + dayleft + "일 남았습니다!" )
}

6시간을 끙끙대며 만든 첫 코드였다.

밤을 새웠고, 눈은 침침했지만 마음만은 뿌듯했다.

드디어 이걸 돌려볼 수 있다는 기대감에, 나는 VSCode를 켜고 Node.js를 설치했다.

ChatGPT가 시키는 대로 .js 파일을 만들고, 터미널을 열었다.

node birthday.js

순간 머릿속엔 멋지게 “OO님의 생일까지 00일 남았습니다!” 같은 문장이 뜨는 장면이 떠올랐다.

하지만 그런 장면은 오지 않았다.

뭔가… 일이 너무 술술 풀린다 싶었다.

에러 메시지는 가차 없었다.

검은 배경에 붉은 글씨.

그것은 “네가 뭔가 틀렸어”라는 세상에서 가장 무표정한 선언이었다.

ChatGPT가 시키는데로 입력했고, 똑같이 복붙까지 했는데?

“왜 나는 ChatGPT가 밥상까지 차려줬는데 숟가락을 들 줄도 모를까…”

그래도 빨리 문제점을 찾았다.

나는 컴퓨터한테 “물어와!”라며 공을 던지는 시늉만 한 사람이 됬다.

당연히 공을 물고오지 못했지만 나는 화를 냈다.

이렇게 내 첫 번째 코드가 ‘실행’은 됐다.

콘솔에 숫자가 뜨는 걸 보는 순간

마치 요리를 처음 해봤는데 생각보다 그럴싸하게 완성된 느낌.

겉보기엔 괜찮았고, 냄새도 났고, 맛도 볼 수 있었다.

하지만 기쁨은 금방 끝났다.

테스트를 위해 날짜를 이리저리 바꿔봤는데

갑자기 코드가 이상한 소리를 하기 시작했기 때문이다.

1월 5일을 적었지만 27일이 남았다고 한다.

참고로 지금은 4월이다.

일단 지난 날짜일 경우에 해당하는 코드를 다시 손봐야 할 것 같다.

원래 오류를 만들자고 목표를 잡았지만

막상 직접 보니까 별로 달갑지는 않았다.

나는 다시 ChatGPT한테 질문했다.

이 코드 좀 설명해줘

profile
기술이 만들어내는 사회 변화를 믿습니다. 성장하려는 사람들을 응원합니다.

0개의 댓글