정보공유

캔음료 자판기가 어떤 원리와 코딩으로 움직이는 방법

안녕하세요. 오늘은 우리가 일상에서 매일 마주치는 캔음료 자판기가 어떤 원리와 코딩으로 움직이는지 쉽고 재미있게 알아보려고 합니다. 복잡한 프로그래밍 언어 대신, 자판기가 작동하는 전체적인 흐름과 핵심 로직을 친근하게 풀어드릴게요. 워드프레스 블로그에 방문하신 독자분들이 한눈에 이해할 수 있도록 알차게 구성했습니다.


자판기 코딩 시스템 핵심 요약

먼저 전체적인 자판기 시스템의 핵심 기능을 표로 한눈에 살펴보겠습니다. 이 시스템은 크게 금액을 입력받고, 잔액을 계산하며, 음료를 배출하는 세 가지 흐름으로 나뉩니다.

주요 기능 핵심 로직 및 설명 비고 (필요 데이터)
금액 투입 및 누적 사용자가 넣은 동전이나 지폐 금액을 인식하여 전체 현재 잔액 변수에 더해줍니다. 투입 금액, 현재 잔액
메뉴 활성화 및 선택 현재 잔액이 음료 가격보다 크거나 같고 재고가 남아있을 때 버튼에 불이 들어오게 만듭니다. 음료 가격, 재고 수량
음료 배출 및 재고 차감 사용자가 음료를 선택하면 해당 음료의 재고를 1 감소시키고 배출구를 엽니다. 재고 -1
잔돈 계산 및 반환 현재 잔액에서 선택한 음료 가격을 빼고 계산하며, 반환 버튼을 누르면 남은 잔전이 나옵니다. 최종 잔액 (현재 잔액 – 음료 가격)

실제 코딩 구현 영상과 알고리즘 설명이 필요하다면 아래 버튼을 클릭해보세요.

자판기 코딩 관련 유튜브 영상 보러가기


자판기 내부에서는 어떤 코딩이 이루어질까?

우리가 자판기 앞에서 카드를 대거나 돈을 넣을 때, 자판기 내부의 컴퓨터(마이크로컨트롤러)는 쉴 새 없이 일하고 있습니다. 자판기 프로그래밍은 주로 구조체나 클래스라는 개념을 사용해서 개별 음료의 이름, 가격, 재고를 묶어서 관리하게 됩니다.

1. 데이터 구조 설계하기

쉽게 말해서 음료수마다 이름표를 붙여주는 작업입니다. 콜라라는 음료가 있다면 ‘이름: 콜라, 가격: 1200원, 재고: 10개’라는 정보를 하나의 세트로 묶어서 저장합니다. 코딩에서는 이것을 배열이나 리스트 형태로 묶어서 전체 자판기 메뉴판을 구성하게 됩니다.

2. 무한 루프와 조건문

자판기는 사람이 언제 올지 모르기 때문에 24시간 내내 켜져서 대기해야 합니다. 그래서 코딩을 할 때 프로그램이 종료되지 않도록 무한 루프라는 반복문을 사용합니다. 계속 기다리다가 돈이 들어오거나 버튼이 눌리는 신호(이벤트)가 감지되면, 조건문을 통해서 다음 단계로 넘어가게 되는 방식입니다.

예를 들어 ‘만약 투입된 금액이 1000원 이상인가?’라는 조건을 만족하면 1000원짜리 음료수 버튼에 불이 켜지도록 신호를 보내는 것이죠. 조건문이 촘촘하게 짜여 있을수록 자판기가 엉뚱한 오류를 일으키지 않고 똑똑하게 작동합니다.

캔음료 자판기가 어떤 원리와 코딩으로 움직이는 방법

이미지 출처: Unsplash (by Artem Sapegin)


실제 프로그래밍 로직의 3단계 흐름

조금 더 세부적으로 자판기 코딩의 알고리즘 흐름을 쪼개어 설명해 드릴게요. 프로그래밍 공부를 처음 시작하시는 분들이 토이 프로젝트나 연습용 과제로 자판기를 자주 만드는 이유도 이 흐름이 논리적 사고를 기르는 데 아주 좋기 때문입니다.

1단계: 금액 충전 및 예외 처리

돈을 넣는 단계입니다. 사용자에게서 금액을 입력받으면 기존에 들어있던 잔액 변수에 더해줍니다. 이때 프로그래머들이 꼭 신경 쓰는 부분이 바로 예외 처리입니다. 마이너스 금액이 입력되거나, 자판기가 수용할 수 없는 거스름돈 범위를 넘어서면 거부 메시지를 띄우는 코드가 들어가야 안전합니다.

2단계: 재고 확인과 선택 프로세스

잔액이 충분하더라도 재고가 0개라면 음료가 나와서는 안 되겠죠. 그래서 사용자가 버튼을 누르면 컴퓨터는 가장 먼저 재고 변수를 확인합니다. 재고가 1개 이상일 때만 음료 배출 모터를 구동하는 신호를 보내고, 재고를 하나 줄인 뒤, 현재 잔액에서 음료 가격만큼 빼는 연산을 수행합니다.

3단계: 잔돈 반환 로직

모든 과정을 마치고 반환 버튼을 누르면 남은 돈을 돌려주어야 합니다. 거스름돈 코딩의 핵심은 최소한의 동전 개수로 돌려주는 알고리즘입니다. 예를 들어 700원을 돌려줘야 한다면 500원짜리 1개, 100원짜리 2개 순서로 큰 금액의 화폐부터 차감해 나가는 나눗셈과 나머지 연산자를 활용하여 구현합니다.


글을 마치며

우리가 일상에서 무심히 지나치던 캔음료 자판기 안에는 데이터 관리, 무한 반복문, 복잡한 조건문, 그리고 거스름돈 연산 알고리즘까지 프로그래밍의 기초적이면서도 필수적인 개념들이 전부 고스란히 녹아 들어있습니다. 소프트웨어 개발을 공부 중이시라면 오늘 정리해 드린 로직을 바탕으로 가벼운 콘솔 자판기 프로그램부터 직접 코딩해 보시는 것을 추천해 드립니다. 다음에도 더 유익하고 재미있는 IT 정보로 찾아오겠습니다.