코딩초보가 바라본 우리집 엘레베이터

저건 어떻게 작동할까?

by 한동엽
화면 캡처 2024-04-23 004229.png

프로그래밍을 조금씩 배워나가기 시작하면, 기계가 동작할 때 이것은 어떻게 쓰였는지 생각할 수 있는 힘이 생긴다.

일상생활을 하다보며 문득 들게 되는 그런 생각들이다.

고층에 사는지라 밖에 나가려면 꼭 엘레베이터를 사용하게 되는데, 이용하면서 문득 드는 생각은...

'그러면 우리집에 있는 아파트 엘레베이터는 어떨까?'

먼저 사용자의 환경을 파악해야 한다.

살펴보면 우리집 아파트의 환경은 복도형 아파트로 1층 당 12호씩 입주가 가능하다.


스크린샷 2024-04-23 012912.png


거의 1, 2층을 제외한 나머지 3~15층 세대원들이 엘레베이터를 두 개를 쓰는 방식이다.

요즘 많이 쓰이는 두 세대가 마주보는 계단식 아파트와 달리 엘레베이터 사용량이 혼잡한 편이다.

이 사용량이 많은 엘레베이터는 어떻게 효율적으로 움직이는 것일까?


뇌피셜 가동...


과거에는 저 두 개의 엘레베이터가 홀수층 전용, 짝수층 전용으로 나뉘어져 있었다.

허나 승강기는 연식이 오래되면 교체를 해야하는 과정을 거쳐야 하기 때문에 몇 년 전부터 신식 승강기가 교체됐었다.


그에 따라 엘레베이터가 운영되는 방식이 달라졌다.

두 엘레베이터 중 버튼을 누르면, 두 개의 승강기 호출 버튼이 눌리고 그 중 층수가 가까운 엘레베이터가 작동되는 방식이다.


처음에는 당황했다.

누르면 어느 엘레베이터 문이 열릴지 헷갈렸으니 말이다.


주민들도 한 엘레베이터 문 앞에 서있다가 다른 엘레베이터 문이 열리는 것을 눈치 못채는 해프닝이 다수 발생한다.

그래서 그런지 아직도 배달라이더 분들이나 이사를 얼마 온 지 안된 세대원 분들과 손님분들은 적잖이 당황하시는 듯하다.

고층 빌딩에서도 이러한 엘레베이터 호출 방식을 사용하는 듯 하다.


그런 당황한 와중 속 이 엘레베이터는 어떻게 동작할까? 기계치로 바라본 나는 엘레베이터의 마음을 헤아리기 시작했다.


CASE 1

나는 1층에 있고 두 개의 승강기가 전부 1층인 경우?

-> 왼쪽의 승강기가 우선적으로 열리는 거 같다.


CASE 2

나는 8층에 있고 하나의 승강기는 10층, 하나의 승강기는 1층에 있다.

-> 이런 경우 10층의 승강기가 열린다.


이 두 개의 케이스는 쉽지만 당황하는 경우도 많다.


CASE 3

나는 8층에 있고 사용중인 승강기가 9층이며 1층을 향해 내려가고 있으며, 하나의 승강기는 1층에 있다.

-> 이런 경우 9층을 향해 내려가고 있으면 8층을 이미 지나가고 있기 때문에 8층으로 멈추지 않고 쭈욱 목적지인 1층에 도달하게 된다. 그리고 나머지 승강기가 호출된다.


CASE 3번 같은 경우 중간에 인터럽트 끼어들기를 하면, 처리하는 과정에 시간이 걸려서 인지, 아니면 운영의 효율성을 위해서인지는 잘 모르겠다.


CASE 4

10층에 있는 한 승강기가 장시간 미사용된다.

-> 1층으로 내려오게 된다


그래서 새벽시간에 보면 엘레베이터 두 개가 종종 1층에 있는 경우를 발견할 수 있으며, 주간에도 어떤 상세한 조건인지는 파악을 못했지만, 사람이 없어도 승강기가 자연스럽게 1층으로 내려오는 경우도 생긴다.


이러한 조건부 방식으로 생각한다면, 컴퓨터의 마음을 어느정도 알 수 있다.

CASE 2번을 예시로 들자면

int me = 8 # 현재 내가 있는 층
int one, two = 10, 1 # 첫 번째 승강기, 두 번째 승강기


이렇게 변수식으로 생각할 수 있겠으며, 논리식으로 호출을 하면?


btnPush() # 엘레베이터 버튼 누르기 함수 호출


그리고 버튼을 누르는 함수 안에는...

def btnPush():
a1 = abs(one - me) # 절대값을 적용하고 현재 층수와 첫 번째 승강기 층수를 뺀다.
a2 = abs(two - me)

if a1 < a2: # 첫 번째 승강기가 현재 층과 가까운 경우
oneCall() # 첫 번째 승강기가 불려진다.
else if a1 > a2:
twoCall() # 두 번째 승강기가 불려진다.
else: # 층수가 같은 경우
oneCall() # 첫 번째 승강기가 우선적으로 열린다.


oneCall()과 twoCall() 같은 경우 생략하고 대충 작동 방식은 이렇게 생각할 수 있겠다.

엘레베이터의 작동 원리나 전원 방식은 직접 코드를 까봐야 아는 것이기 때문에 내가 이해한 간단한 동작 방식을 머리 속으로 생각해 본 결과이다.


이러한 자동 방식이 효율성을 추구해주기도 한다. 하지만, 뜻밖의 상황이 발생했을때는 예외적으로 처리해주기에 아직은 기계가 융통성이 없다.

허나 이러한 방식이 결국 쌓이고 쌓이다 보면 AI가 된다고 나는 생각한다.


이러한 사고 방식을 가지는 것도 나쁘지 않을 수도 있겠다.


https://youtu.be/GSm4BQe1OQI

keyword
작가의 이전글언어, 생각의 틀