배열: 당신이 나눈 말 한마디가 그 안에 있어요
지난 강의에서 약속했어요: 자료구조 = 수납 방식. 첫 번째 수납 방식은 사실 당신이 매일 데이터를 넣고 있는 거예요——당신과 AI의 대화 한 토막은, 프로그램 눈에는 message list이고, message list의 진짜 모습은 가장 소박한 수납 방식이에요: 번호가 매겨진 칸 한 줄, 바로 배열. 이번 강의는 먼저 당신의 대화를 펼쳐 보고, 덤으로 오래된 질문에 답해요: 왜 오래 채팅하면 까먹을까요.
아래가 message list예요: 메시지마다 칸 하나, 칸 위에는 인덱스(번호, 0부터 세요——프로그래머의 오래된 습관). 「메시지 보내기」를 누르면 새 메시지가 어디에 떨어지는지 보고, 「컨텍스트 윈도우」 슬라이더를 끌어 보세요. 어느 칸이 회색이 되는지, 어느 칸은 절대 회색이 안 되는지 눈여겨보세요.
[0]번 칸의 system 프롬프트만 고정돼 있어요: 페르소나와 규칙(「당신은 다정한 어시스턴트예요」)이거든요. 그걸 버리면 AI는 자기가 누군지 잊어요. 그러니 「까먹음」은 신비가 아니라 배열 슬라이스예요: system + 최근 K개를 남기고, 나머지는 모델에 안 넣어요.
배열의 칸은 메모리에서 바짝 붙어 줄 서 있어요. 가운데에 빈칸이 허용되지 않죠. 그래서 골치가 생겨요: 가운데에 새 원소를 넣으려면, 오른쪽 원소가 전부 한 칸씩 오른쪽으로 이사해서 자리를 비워 줘야 해요. 아무 칸이나 눌러 그 자리에 ⭐를 넣고 「이동 횟수」를 보세요. 그다음 「끝에 ⭐ 추가」를 눌러 비교해 보세요.
특기: 번호로 바로 도달
3번째 메시지를 가져오고 싶어요? messages[3], 처음부터 셀 필요 없이 한 번에 도착. 칸이 바짝 붙어 있어서 번호 자체가 주소예요——이게 O(1)이고, 사람 말로 「배열이 아무리 길어도 걸리는 시간은 같아요」. 위치로 데이터를 꺼낼 때, 배열은 모든 수납 방식 중 가장 빨라요. 예외 없어요.
약점: 가운데 삽입이 비싸다
방금 직접 이사시켜 봤죠. 덤으로 친척 하나: 연결 리스트——가운데 삽입은 싸요(「다음이 누구」 포인터 두 개만 고치면 돼요). 대가는 번호로 바로 도달을 잃는 것. 100번째를 찾으려면 맨 앞부터 하나씩 걸어야 해요. 만능 수납 방식은 없고, 취사선택만 있어요. 「추가만 하고, 자주 통째로 읽는」 대화 장면에서는 배열이 완승이라 message list가 그걸 써요.
✅ 이 강의가 전하고 싶은 것
- message list는 곧 배열: 번호 달린 칸 한 줄, 메시지마다 한 칸, 인덱스는 0부터
- 인덱스 직달 O(1): 위치로 데이터를 꺼낼 때, 배열은 가장 빠른 수납 방식
- 컨텍스트 절단 = 배열 슬라이스: system + 최근 K개 남기고 「머리는 자르고 꼬리는 남긴다」——오래 채팅하면 까먹는 진실
- 가운데 삽입은 비싸고, 끝 추가는 싸다: 그래서 대화 이력은 뒤로만 자란다(append-only)
- 수납 방식은 전부 취사선택: 연결 리스트는 가운데 삽입이 빠르지만 직달을 잃어요——장면이 선택을 정해요