최근, 이직을 결정하게 됐다. 22년 8월부터 약 1년 6개월간 Computer Vision에 관련된 Task들을 해결하는 Data Scientist로써 근무를 해왔지만, 주된 관심사가 NLP와 추천 시스템이다보니 이직이라는 큰 결심을 하게 되었다. 나의 지식들을 점검하고 빈 공백을 채우기 위해 자료구조부터 다시 학습을 시작하려 한다. 게시물은 다음의 책을 참고하여 공부하며 작성됐다. 정리를 위한 자료는 직접 만들었다(사용 Tool : Excalidarw).
제목 : 자료구조와 알고리즘 with 파이썬
지은이 : 최영규
출판사 : 생능북스

1. 스택(Stack)이란?

 스택(Stack)은 기본적으로 후입선출(LIFO - Last In, First Out)의 원리를 가지고 있는 자료구조다. 자료의 입출력이 단방향으로 이루어진다. 스택의 자료의 입출력이 이루어지는 부분을 스택의 "상단(Top)"이라고 부른다.

[그림 1] 스택의 구조

스택에 저장된 자료들은 "요소"라고 부른다. 가장 먼저 들어온 요소는 가장 나중에 나오기 때문에 가장 하단에 위치한다.

 스택은 활용 예시는 다음과 같다.

  • 웹 브라우저의 "이전 페이지로 이동"
  • 한글, 파워포인트 등의 "되돌리기(Undo)"

[그림 2] 이전 페이지로 이동 되돌리기(Undo)

 여기서 스택이 어떻게 활용되는 지 궁금할 수 있다. 웹 브라우저에서 "이전 페이지로 이동" 기능의 동작 예시를 보면서 이해해보자.

먼저, 'Main' 페이지에서 다른 페이지로 이동할 때, 'Main' 페이지의 URL이 스택에 저장된다.

[그림 3] 웹 페이지 이동 시, 스택의 변화

이제 '이전 페이지로 이동' 버튼을 클릭하면, 스택에 저장된 'Main' 페이지의 URL이 반환되면서 'Main' 페이지로 이동한다. 이 때, 스택에 저장되어 있던 'Main' 페이지의 URL은 반환과 동시에 삭제된다.

[그림 4] '이전 페이지로 이동' 버튼 클릭 시, 스택의 변화

※ 짚고 넘어가기 ※
기본 자료형(Primitive Data Type) vs 참조 자료형(Reference Data Type) vs 추상자료형(Abstract Data Type)

 본격적으로 스택을 구현해보기에 앞서서 자료형에 대한 개념을 짚고 넘어가보자.

보통 프로그래밍을 배울 때, 모든 변수나 상숫값에 대해 정해진 자료형(Data Type)이 있으며, 대부분의 프로그래밍 언어에서 별다른 처리없이 사용할 수 있는 기본 자료형(Primitive Data Type)을 제공한다고 배운다.

e.g. Python's Primitive Data Type > int→정수, float→실수, str→문자열 ... etc

하지만, 기본 자료형만으로는 문제 해결을 위한 프로그램에 있어서 한계가 있다. 앞서 예시로 들었던 "이전 페이지로 이동"기능을 구현한다고 할 때, 스택을 기본 자료형으로 제공한다면 훨씬 수월하게 기능 구현이 가능할 것이다. 대신, 대부분의 프로그래밍 언어는 이러한 경우를 대비하기 위해 사용자가 새로운 자료형을 정의해 사용할 수 있도록 지원한다.

이 때, 새로운 자료형을 정의하가 위해 자료형에 대한 내용을 중요하고 필수적인 특징들만 골라서 단순화 하는 작업이 필요하다. 이 작업을 "추상화(Abstraction)"라고 한다. 이런 추상화를 거쳐 정의한 자료형을 "추상 자료형(ADT - Abstraction Data Type)"이라고 한다.

ADT는 데이터의 모델을 정의하기 위해 사용되며, 해당 데이터 모델의 구현 방법에 대해서는 관심을 두지 않는다. ADT는 데이터의 타입(어떤 자료들을 자룰 수 있는지)과 그 타입에 적용할 수 있는 연산을 정의한다.

e.g. 추상 자료형의 예시
- 자바에서의 예시 : 추상 클래스, 인터페이스 등
  > 'ArrayList', 'HashSet', 'HashMap' 을 통해 구현되는 인터페이스 'List', 'Set', 'Map'
- 파이썬에서의 예시 : 사용자 정의 추상 클래스, 기본 추상 클래스(ABCs) 등
  > 'List', 'Tuple', 'Dictionary' 등을 통해 구현되는 'Iterable', 'Sequence', 'Mapping' 클래스 등(3가지 모두 'collections' 모듈을 통해 제공

 예시를 보고 더 헷갈릴 수 있다. 하지만 예시를 보기보다 단순하게 "ADT는 데이터의 타입과 그 타입에 적용할 수 있는 연산이 정의된 클래스"라고만 이해해도 괜찮다. 잠시 후에 스택을 클래스로 구현해본다면 '아! 이게 추상 자료형이구나!'할 수 있기 때문이다.

그렇다면 참조 자료형(Reference Data Type)은 무엇일까? 사실, Python에서는 명시적인 참조 자료형 구분이 없기 때문(굳이 따진다면 List, Dictionary, Class Instace 등이 참조 자료형에 속한다.) 굳이 알 필요는 없다. 가볍게 읽고 넘어가고, 이해가 되지 않는다면 무시해도 괜찮다.

참조 자료형(Reference Data Type)객체의 메모리 주소를 참조하는데 사용되는 데이터 타입이다. 이는 기본 자료형(Primitive Data Type)과 대비되며, 객체(Object)나 인스턴스(Instance)를 가리키는 용도로 사용된다.

e.g. 참조 자료형의 예시
- 자바에서의 예시 : 클래스, 인터페이스, 배열 등
  > 'String', 'Array', 사용자 정의 클래스 등의 객체들은 모두 참조 자료형을 사용하여 메모리의 객체를 참조

이제 요약해보자.

참조 자료형메모리 상의 객체를 가리키는데 사용되는 반면, 추상 자료형데이터의 타입과 해당 데이터에 적용할 수 있는 연산의 추상적인 정의를 제공한다. 자바와 파이썬 모두 이 두 가지 개념을 사용하긴 하지만, 구체적인 사용 방법과 명칭에 있어서 차이가 있다. 타입 시스템적 측면에서 참조 자료형과 기본 자료형의 구분이 명확한 자바와 달리, 파이썬에서는 모든 것이 객체이기 때문에 더 동적으로 다루어져 참조 자료형을 명시적으로 제공하지는 않는다. 추상 자료형은 두 언어 모두에서 중요한 역할을 하며, 프로그래머가 데이터 구조를 더 추상적으로 다룰 수 있게 하는 도구다.

 

다음 게시물에서는 스택의 연산과 구현에 대해서 다루겠다.

By. Xilver

2024.01.05(土)의 기록

평소 디즈니의 팬까지는 아니더라도 디즈니 영화를 좋아하는 입장에서 100주년 기념 영화가 나왔다는 소식을 듣고 Wish를 챙겨봤다. 개인적으로는 대만족이었지만, 추천하냐고 물어본다면... 솔직히 잘 모르겠다.

광교 CGV에서 4DX로 관람

4DX로 볼 지, 그냥 볼 지 고민하다가 '그래, 100주년 영화인데 그래도 4DX로 보자!'하는 마인드로 4DX 관람을 했다.

개인적으로 4DX로 본 후회는 없지만 자신있게 추천하지는 못할것 같다. 타 4DX에 비해 역동성도 덜 하고, 드라마틱한 몰입도를 제공하냐고 물어본다면 그 정도는 아닌것 같아서다.

본격적인 감상평 - 이 이후부터 스포일러가 포함되어 있습니다.

디즈니 100주년을 함께한 느낌에 벅차올랐다

먼저, 개인적으로 매우 만족한 영화였다.

네이버나 다음에 검색해보면 영화의 평점이 처참한데, 네이버 평점 7점대 / 다음 평점 2.8을 기록중에 있다.

네이버, 다음 평점

사람들이 실망한 이유는 무엇일까? 나는 그 이유가 사람들의 기대에 있다고 생각한다.

당연한 말이기도 하다. 사람은 기대할 수록 실망하기에

개인적인 생각으로는 디즈니가 100주년을 맞아 가장 '디즈니다운' 영화를 내놓았다고 생각한다.

내가 생각하는 디즈니의 이미지는 이러하다.

디즈니를 생각하면 디즈니 랜드가 가장 먼저 떠오른다. 직원들이 아이들의 동심을 위해서 쉬는 시간에도 컨셉을 유지하려 한다는 기사를 보며 '아이 하나를 키우는 데는 온 마을의 노력이 필요하다'는 말을 떠올렸다. 응답하라 1988 드라마에서도 눈사람을 갖고 싶다고 하는 진주의 말에 온 이웃들이 눈사람을 만들기 위해서 노력하는 장면에서 디즈니를 느낄 수 있다.

내가 어린 시절에 그랬듯, 어린이들은 특별하게 잘 짜여진 스토리를 필요로 하지 않는다. 더 직관적인 메세지들이 더 감명깊게 다가온다. 그런 의미에서 디즈니의 100주년 영화 "Wish"는 쉽게 전해지는 메세지를 우리에게 던진다.

우리는 모두 별(Star)이야.

 

주인공은 좌절을 맛본 후, 별에게 소원을 빈다.

자신은 어리지만, 이 상황이 잘못됨을 알고 있다고. 그리고 우리가 지금보다 더 큰 꿈을 꿀 수 있길 바란다고.

그리고 소녀의 기도에 별이 응답한다. 별의 정령이 되어 내려옴으로써.

별의 정령은 소녀의 기도를 즉각적으로 이루어주는 존재는 아니다. 소녀에게 "할 수 있다"고 말해줄 뿐이다.

별의 정령이 무능한 것은 아니다. 동물들이 말을 할 수 있게 해주고, 춤도 춘다.

사실, 별의 정령이 뿌리는 가루는 '무엇이든 할 수 있는 힘'이 있다.

그럼에도 불구하고 아샤를 돕는 과정에서 별의 정령이 특별하게 도움이 된다고 느껴지는 장면은 찾을 수 없었다.

심지어 이 별의 정령은 마지막 순간에 빌런에게 잡히기까지 한다.

그리고, 그 별의 정령을 구해낸 것은 빌런인 매그니피코 왕에게 잡힌 사람들이다.

매그니피코 왕의 저주로 묶인 사람들은 "우리는 모두 별이야", "소원을 이루는 힘은 우리에게 있어"라는 가사가 담긴 노래를 부르며 저주에 대항한다. 각자만의 별이 빛나며 저주는 파해되고, 별의 정령은 풀려난다.

이 스토리를 보면 알 수 있듯이, 결국 소원을 이루어내는 것은 우리 자신이다. 그리고, 그 소원을 이루어낼 수 있는 힘도 우리 자신에게 있다.

당연한 말이고 교훈적이다. 하지만 우리는 당연한 것들의 소중함을 잃고 살아간다. 나는 어느새 나의 소망을 이루기 위해 노력하지 않고 그저 바라고만 있었다. 돈을 많이 벌고 많이 모으고 싶지만 YOLO 처럼 소비하고 '복권 당첨되겠지'하는 멍청한 생각만 하고 있었다. 내 안의 별이 있는 지도 잊어버린 채.

누구도 자신의 꿈 앞에서 좌절해선 안돼!

 

놀랍게도 이 대사는 빌런인 매그니피코 왕이 한 대사이다. 매그니피코 왕은 이전 꿈을 위해 노력했다 좌절했던 자신과 같은 사람들이 나오지 않도록 하기 위해 마법을 밤낮없이 공부하고 연마하여 결국 위대한 마법사가 되어 로사스 왕국을 건립한다. 로사스 왕국에 입주하기 위해서는 자신의 꿈을 바쳐야 하고, 소원성취식이 열릴 때 마다 바쳐진 꿈 중 하나씩 이루어준다. 얼핏 보기에 정말 이상적이다. 하지만 매그니피코는 자신의 나라 로사스에 해가 될 꿈에 대해서는 이뤄줄 생각이 없었다. 그리고 그 판단은 오로지 왕 자신의 몫이었다. 좋은 의도는 언젠가 변질된다고 했던가? 매그니피코의 처음 의도는 좋았을 지 몰라도 언젠가부터 독재를 위한 수단으로 사용되고 있었다. 이 부분에서 나 자신을 반성하게 됐었다.

최근, 나의 지인들에게 당연히 이 사람은 이렇기 때문에 이럴거야 하고 멋대로 재단하여 행동하고, 충고했었다. 상대방이 호의로 생각하지 않는 호의는 호의가 아니라는 것을 최근에 뼈저리게 깨달았기에 매그니피코 왕에게 내 모습이 겹쳐졌다.

완벽한 통제.

하지만 사람들은 과연 불행할까? 꿈이 없는 사람들의 나라인 로사스는 굉장히 행복해보인다. 헛된 꿈을 꾸지 않아서 좌절할 일도 없어보인다. 하지만, 아니었다. 꿈을 바친 사람들에게는 자신의 꿈이 소원성취식에서 뽑힐 것이라는 '소원'을 가지고 뽑히지 못한 사람들은 좌절한다. 좌절하는 대표적인 모습으로는 주인공 아샤의 친구인 사이먼을 꼽을 수 있다. 사이먼은 18살이 넘어 소원을 상납하고 나서부터 무기력한 모습을 보이는데, 아샤와 친구들을 배신하는 이유로 '꿈을 이루고 싶었다'는 말을 한다. 결국 매그니피코 왕의 방법은 처음부터 잘못되었음을 알 수 있다. 꿈은 통제한다고 통제할 수 있는 성격의 것이 아니다.

개인 평점

9.8/10

 

분명 스토리 측면에서 아쉬움은 있다. 하지만 앞서 말했다싶이 '어린이들을 위한 영화' 측면에서 굉장하다. 사운드 트랙도 굉장히 만족했다.

그리고 스토리나 주인공의 매력 등에 대한 평들을 보면서 개인적으로 느낀 바가 있다. 

Rhyme에 R도 모르는 대중은 Producer가 됐고
농사짓는 울 삼촌은 거의 엔터 제작 대표
조카는 음평가 태도
- No Thanks Mino Verse -

 

모든 사람이 그렇지는 않지만, 우리는 가끔 전문가들에게 전문적인 지적을 하곤 한다. 인용한 송민호님의 벌스에서 알 수 있듯이 우리는 평가질에 잠식되어 가는듯하다. 어느샌가 본질적인 메세지나 의도보다는 사용된 장치들에 대한 평가들이 주를 이루고 있다. PC를 떠나서 이번 영화가 주는 메세지는 정말 감명깊었다.

모두들 자신만의 별을 통해서 남을 평가하기보다 응원하고 자신의 꿈을 이뤄가는 생을 살길

 

By. Xilver

+ Recent posts