2020. 11. 24. 06:58ㆍIT
연원준은 마술사가 꿈인 스무살의 청년이다. 최근들어 스마트 폰용 앱에 대한 공부를 시작했습니다. 왜냐하면 지난 추석에 너무나도 멋진 마술쇼를 봤기 때문이다.
세기의 마술쇼 중에서 연원준의 마음을 사로잡은 마술은 단연 스마트폰 스크린에 보이던 사람이 현실의 세계로 나오는 마술이었다.
커다란 스크린에 스마트폰 화면을 띄워 놓고 마술사가 남자와 여자를 화면에 보여주다가 갑자기 화면 밖으로 나오게 하고 본인은 스마트 폰 속으로 들어가는 마술이었다.
스마트 폰에서 마술 앱을 만들어야 따라 할 수 있는 마법으로 보였다. 인터넷에서 열심히 검색을 해서 마술사의 이메일 주소를 찾을 수 있었고 마술사에게 질문을 보냈더니 바로 답장이 왔다. 아이폰 앱을 만들었다는 것과 몇 가지 마술 트릭을 썼다는 아주 간단한 답장이었다. 애플리케이션을 어떻게 조작을 했는지 어떻게 만들 수 있는지가 너무나도 궁금해진 그는 기본부터 공부를 하고 싶어졌다. 그래서 큰 마음을 먹고 인터넷 검색을 하고 유튜브를 찾아보기 시작했다. 하루라도 빨리 마술 앱을 만들고 싶어졌다.
그런데 하나 둘 찾아볼 때마다 너무나 놀랐다. 컴퓨터 언어라는게 한국어, 영어, 불어, 중국어, 일본어 만큼이나 종류가 너무나도 많았기 때문이었다. 그 중에 뭐가 좋은지를 선택하는 것은 결국 선택을 하지 못했다. 그러다가 처음 검색해서 알게된 플러터라는 언어를 배워보겠다고 다시 검색을 해 봤다. 그런데 거기서는 너무나도 이상한 말들이 써 있었다. 암호같기도 했다. 오브젝트 오리엔티드, 객체 지향이라는 것에서 부터 막히기 시작했다. 도대체 이게 뭘까? 하는 생각이 든게 한 두 번이 아니었다. 객체 지향, 분명히 한국말인데 뭔소린지 이해가 가지 않았다. 그래도 한번 결심을 했으니 무시하고 넘어가 다음을 읽기 시작했다. 읽다보면 이해가 될테니까 하면서 말이다. 객체가 뭐지? 하는 생각을 하면서 마우스로 검색 결과를 클릭해서 읽는데 이번에는 클래스라는게 나왔다. 사전을 검색해 보면 수업, 학급, 강좌, 항공 좌석의 등급과 같은 결과가 나오는데 이것이 어떻게 프로그래밍과 관련이 있는 것인지? 어떤 의미인지 모르겠다. 그나마 변수하고 상수라는 것은 이해가 될 것 같기도 했다. 변수는 변하는 수이고 상수는 변하지 않는 숫자 같았다. 이번에는 생성자? 프라이빗 변수, 퍼블릭 변수가 나왔다. 이젠 어지럽기까지 하다. 앱을 사용할 때는 몰랐는데 만들려니 이건 천자문을 보는 것 보다 이해가 어려웠다.
한 주가 지나고 둘째주가 지나도 크게 진척이 없었다. “앱의 비밀”, “나도 앱 전문가”로 검색도 해 보고 “할 수 있다 프로그래밍”이라는 책도 봤다. 결국 너무 어렵다는 생각에 포기를 할 즈음 “프로그램 개발 어찌해?”를 검색한다는게 “vmfhrmfoa roqkf djWlgo?”로 입력을 했다. 서너 페이지를 봤을 때 쯤에 프로그램에 대해서 뭐든지 물어보라는 “마카”님의 카톡 주소를 찾을 수 있었다. 밤이 늦어서인지 너무 오랫동안 모니터만 머리를 박고 있어서인지 멍하고 눈도 침침했다.
사실 큰 기대는 하지 않았다. 그래도 누군가 물어볼 사람이 생겼다는게 뭐 위안이 되긴 했다. 물어봤을때 대답이나 들을 수 있을지도 몰랐는데 그래도 뭔가 얻을 수 있겠지라는 호기심이 생겼고 약간은, 아주 약간 망설이다가 마카에게 카톡을 날렸다.
“안녕하세요. 마카님. 플러터라는 걸로 모바일 앱을 만드는 방법을 배우고 싶어 카톡 드렸습니다. 연원준이라고 합니다”
눈을 껌뻑이며 회신을 기다렸다. 한 10분쯤을 멍하니 카톡만 들여다 보고 있었다. ‘그럼 그렇지. 괜한 기대를 했나보다’라고 생각을 했다. 그렇게 밤이 지나고 아침이 지나고 점심때가 가까웠을 무렵 원준은 일어났다.
핸드폰을 보니 기대하지 않던 마카로부터 회신이 와 있었다. “반갑습니다. 플러터 배우시게요?” 새벽 세시쯤 온 카톡이었다. “라스라는 캐릭터를 키워서 앱으로 등업하는거라고 생각하심 쉬워요” 이건 또 뭔 선문답인가 싶었다. 갑자기 게임 얘기 같기도 했다. “카톡으로는 배우기 어려울 것 같은데 좋은 방법 없을까요?” “금요일 저녁에 인천항으로 나와요. 같이 여행이나 하죠” 뜬금없는 소리였다. “여행하면서 비법이라도 전수해 줄껀가요?” “그러죠^^”
그리고 대화는 끊어졌다. 갑자기 여행을 가잔다. 인천항에서 만나자는 것을 보면 배를 타는 것 같았다. 한국에 살면서 타 본 배라곤 한강 유람선이 전부인데 인천에서 배를 타고 어디를 가려는 것일까?
인천항에서 만나 마카는 소위 떡대라고 불리는 몸매를 갖고 있었다. 그는 뱃사람이었다. 그래서 나를 인천항으로 불러냈던 것이다. 인천항에서 만난 나는 그의 차를 타고 항구 깊숙히 들어갔다. 점점 배들의 사이즈가 커지더니 사진에서나 봤었던 크다고만 표현해서는 안될 정도로 큰 배가 보였다. 출항을 얼마 앞두고 있지 않은지 한창 컨테이너들이 배에 실리고 있었다.
원준은 겁이 덜컥났다. 배의 크기에 압도되었기 때문이다. 마카는 원준을 조타실 입구까지 동행을 했고 잠시 기다리라고 했다. 마카는 조타실로 들어갔다. 배에서 승선해서 한참을 걸었고 다음은 엘리베이터를 타고 올라왔다. 조타실 입구에서 보이는 우측 항구쪽은 부산하게 컨테이너를 싣고 있었고 좌측은 바다라 작은 배들의 불빛만 이따금씩 보였다. 그리고 컨테이너들이 하나씩 둘씩 배에 실리고 있었다. 프로그래밍을 배우고자 하는 나를 컨테이너만 가득한 배 위에서 무엇을 알려주려고 마카는 나를 불렀을까 하는 의문이 들었다.
이런 저런 생각을 하면서 창 밖에서 부지런히 움직이는 컨테이너들에 정신을 빼앗기고 있는데 마카가 나왔다.
우리는 다시 엘리베이터를 탔고 다시 계단을 이용해서 또 내려갔다. 마카는 이 배의 엔진을 담당하는 팀이었고 선장에게 출항을 하는 내일 아침까지 나와 함께 배에 있겠다는 허락을 받았다고 했다. 빈손으로 여기까지 온 마카가 내일이면 이 배를 타고 어디론가 떠나는 것이란다. 엔진을 담당한다고 해서 엔진이 있는 엔진실로 내려가는 줄 알았는데 한참을 내려가서 도착한 곳은 좌우로 컨테이너가 보이지 않을만큼 쌓여있는 곳이었다. 그 끝에 마카의 사무실이 있었다.
“제가 주로 근무하는 곳이구요. 여기서 프로그램을 많이 개발합니다. 이 배에서 사용하는 프로그램도 만들고 그냥 제가 만들고 싶은 것도 개발을 합니다.
프로그램을 개발에 대해서 궁금해 하셨죠? 오늘 밤에 플러터 프로그램 개발에 대해서 설명을 드리려고 합니다.” 마카가 말했다. “감사합니다. 저는 지금 마술을 배우고 있는데요. 얼마전에 외국에서 유명한 분이 하는 마술을 모니터링 해 보고 방법을 알아 봤습니다. 그랬더니 프로그래밍을 해야 하는 부분이 있었습니다. 그래서 흥미를 느끼고 공부를 시작했습니다. 그런데 혼자서 배우기에는 너무 어려워서 연락을 드렸습니다. 원준은 뒷 머리를 긁적였다.
“혼자서는 쉽지 않죠. 프로그래밍에 대한 개념부터 잡아야 하는데 전공을 하신 것도 아니고 마술을 하시는 분이 이해하기란 더 어려울 수도 있었겠네요. 그런데 제 동생벌 되는 것 같은데 말을 놓아도 되겠죠?” 마카가 웃으며 말했다. “네 그럼요. 그럼 전 형님이라고 부르겠습니다. 하하” 원준은 억지 웃음을 지어보였다.
시작은 컨테이너로 하지. 이 배에 실려있는 컨테이너라고 생각하면 안되. 그냥 뜻 그대로 뭔가 담을 수 있는 거라고만 생각하면 돼. 내가 처음에 프로그램에 대해서 배울 때는 사실 이 배에 있는 컨테이너를 생각했어. 그런데 모양도 없고 눈에 보이지도 않는 컨테이너가 있다고 생각을 했지. 이 배에는 컨테이너가 많아 그래서 컨테이너를 이용해서 이해를 하려고 많이 노력을 했어. 컨테이너는 뭔가를 담을 수 있는데 크기도 없고 무게도 없고 눈에 보이지도 않아 그런데 사각형이야. 알겠어?
아! 니가 마술을 하니까 좀더 이해하기가 쉬울 것 같다. “여러분! 제 눈앞에는 집채 만한 컨테이너가 하나 있습니다. 하지만 여러분은 보실 수 없죠. 이제 이 컨테이너를 제 손바닥에 올릴 수 있을 만큼 줄어보겠습니다” 어때, 마술사가 하는 멘트 같지 않아? 마술이니까 컨테이너에 컨테이너를 담는 것도 이해가 되겠지?
컨테이너에 대한 이해는 쉬웠다. 그냥 그런게 있는가보다 하면 됐다. 눈에 보이지 않는 무엇이나 담을 수 있는 사각형의 것이라고 하면 될 것 같았다. 하지만 담아 놓기만 하면 동작이 되는게 아니니까 나 같은 마술사가 주문이라도 외쳐 줘야 동작을 하는걸까? 이제 막 시작했는데 처음부터 이해가 안가면 아얘 포기하는게 나을 수도 있다고 생각을 했는데 그나마 마카형 설명이 알아 들을만 하니 다행이다.
어때, 컨테이너는 마술사 입장에서 보자면 조금은 쉬웠지? 앞으로도 어렵지는 않을꺼야. 사람들이 컴퓨터하고 스마트폰 움직이게 하려고 만든건데 어려워야 얼마나 어렵겠어.
이번엔 수업에 대해서 배울꺼야. 영어로는 클래스~. 알지?
농담이고… 이놈은 앞에서 말한 컨테이너보다 조금 더 복잡한데 눈에 보일 수도 있고 안보일 수도 있어. 이놈은 괴짜인데 말야. 그래 이놈은 마법사라고 할 수 있어. 눈에 안보이는 마법사. 움직일 수도 있고 계산도 할 수 있고, 컨테이너를 가지고 노는것도 할 수 있지. 마법사라는 표현이 딱 맞네. 자 정리해 볼까? 클래스는 연원준이야. 왜냐구? 니가 마술사니까. 하하. 그리고 컨테이너는 사각형에 눈에 보이지 않는 뭔가를 담을 수 있는 그런거야. 오케이?
참말로…
예로 들어준걸 정리해 보면 눈에 안보이는 마술사라는 클래스와 네모난 눈에는 안보이지만 뭔가를 담을 수 있는 컨테이너라는게 있다는 거네. 내가 투명 망토를 쓰고 마술을 하고 있는걸 상상하면 되는건가?
밥먹으러가자. 오늘은 출항하기 전이라 다른 사람들은 밖에서 먹을 것 같으니까. 우리는 식당에가서 라면이나 끓여 먹자고. 맥주 한잔하고 말이야. 마카는 한 손에 라면을 들고 냉장고에서 맥주를 꺼냈다. 잠시 이야기를 나눴는데도 대부분 마카님이 떠들어서 그랬는지 목이 마르다며 맥주를 벌컥벌컥 들이켰다. 그리고는 “렛츠고”를 외쳤다. 배가 커서 그런지 식당까지 거리는 100미터가 훌쩍 넘는 거리로 느껴졌다. 좌우로 구획이 나뉘어져 쌓여있는 컨테이너 곁을 여러번 지났다. 막다른 곳에 다다르자 좌측으로 들어갔고 또 한참을 컨테이너 옆으로 걸었다. 드디어 문이 나타났다. 좁디 좁은 계단으로 5층 정도를 올라갔다. 식당이라고 조그맣게 쓰여진 문이 있었는데 거길 지나쳐서 다른 문으로 들어갔다. 얼핏 봐도 컨테이너 안으로 들어온 것이 분명 했다. 컨테이너를 많이 보지는 않았지만 겉이 들어가고 나온 패턴을 보니 컨테이너가 틀림 없었다. 그런데 위가 뻥 뚤려 있었고 유리로 덮여 있는게 특이했다. 제1식당이라고 했다. 배 뒷쪽의 갑판 위에 있는 공간인데 컨테이너 다섯개가 나란히 있고 다 위가 뚤려 있다고 했다. 생각보다 배에서는 하늘을 볼 기회가 적어 식사시간에라도 하늘을 볼 수 있도록 컨테이너를 개조해 만든 것이란다. 유리는 깨지면 위험하기 때문에 투명 강화 플라스틱으로 천정을 했다는 이야기를 들었다. 그렇겠다는 생각이 들었다. 사람은 없었고 넓은 20피트짜리 컨테이너에서 라면을 끓여 먹었다. 조금 친해졌는지 긴장이 풀리면서 맥주 기운이 온 몸으로 전해졌다.
마카는 산책을 하자고 했다. 축구장 크기 세 개 만한 크기의 배라고 했다. 컨테이너선 중에서는 작지 않은 크기라고 했다. 식당에서 멀지 않은 곳에 위쪽으로 올라갈 수 있는 곳이 있었다. 뭐라고 얘기를 해 줬는데 기억은 나지 않는다. 거길 힘겹게 올라갔더니 앞 뒤의 작은 창으로 밖을 내다 볼 수 있었다. 배의 뒤편에 5개의 식당이 나란히 있는 것이 보였다. 천장이 투명해서 그나마 알아볼 수 있었다. 앞쪽은 컨테이너가 쌓이고 있어 저 멀리 보이는 마지막 컨테이너가 배의 앞이라고 추측을 할 수 있었다. 사무실로 돌아오면서 마카가 술기운이 돌았는지 이런 저런 얘기를 했다. 이쪽 컨테이너들은 비싼거야. 주로 먹을꺼리들이지. 갑판위에 실으면 햇볕 때문에 컨테이너에 온도가 너무 올라가서 해가 안드는 이런 자리에 실은거지. 컨테이너 앞에 보면 어떤건지 다 적혀 있어. 컨테이너 위치에 따라서 배송비가 차이가 난다구. 여기는 비싼 축에 속하는데고 갑판위에 햇볕이 드는데가 제일싸지. 그리고 앞쪽은 진동이 뒷쪽보다 커서 더 싸고 말이다.
사무실에 돌아와서는 캔커피 하나씩을 꺼내 들었고 마카는 이야기를 다시 시작했다.
클래스와 컨테이너는 이제 이해가 좀 됐을꺼야.
이제 복잡해지는데 컨테이너에 대해서 또 얘기할꺼야. 나만 복잡하게 느낄 수도 있고. 컨테이너는 눈에 안보인다고 했잖아. 그런데 눈에 보이기 시작을 할꺼야. 눈에 보이는 컨테이너를 위젯이라고 해. 특이하게 눈에 보이는 컨테이너를 위젯이라고 생각면된다구. 수리수리 마수리 얍. 눈에 안보이는 컨테이너에 배경색을 넣는거야. 그리고 수리수리 마수리… 크기를 정해주는거야. 어떤 모양일까?
네모난 모양이겠지. 두께가 있을지도 모르니 직육면체라고 해 두자고. 이런식으로 눈에 보이게 만든걸 위젯이라고 하는거야.
핸드폰을 한번 열어볼래? 거기서 자주 쓰는 어플이 뭐야? 인스타그램이 젊은 사람들한테 유명하지 참. 인스타그램 한번 열어봐. 맨 위에 뭐가보여? 어디보자 그래 카메라 모양 아이콘이 보이네. 이게 아이콘이잖아. 아이콘을 담고 있는 위젯이야. 그 아래에 동그라미 안에 내 프로필 사진이 보이잖아 그게 또 위젯인거지. 그 아래는 뭐가 있어 “내 스토리”라는 문구가 있지? 그것도 문자 위젯이라고 이젠 이해가 됐어? 위젯이 뭔지?
어…
대충 이해가 갈 것 같은데 마카형, 홈버튼 누르면 보이는 홈 스크린있잖아요 거기에 보이는 앱 아이콘이 있잖아요. 그것도 위젯인가요? 그리고 핸폰 맨 아래에 있는 메뉴 버튼들 있잖아요. 그건요?
맞았어. 그냥 눈에 보이는 하나하나가 위젯이라고 생각하면되. 메뉴 버튼이고 아이콘이고 다 위젯이야. 나중에 플러터 홈페이지에 가서 찾아보라고 어떤 위젯들이 있는지 소개해 놓은데가 있을꺼야. 그걸 찾아보라고…
꼭 찾아봐야해, 그걸 아는게 프로그램을 잘 할 수 있는 방법이라구.
마카는 커피를 마저 마셨다. 그리고 위젯에 대해서 조금더 열을 올리기 시작했다. 옛날에는 말이야. 아이 참나. 나 꼰대 아니다. 옛날 얘기만 하려면 다들 꼰대라고 놀리는데 꼰대는 아니고, 옛날 방식을 설명을 하지 않음 요즘 트랜드가 이렇다 설명하는게 쉽지가 않아서 그러는거니까 이해좀 하고 들어.
옛날에는 버튼을 그리려면 어떻게 했는지 알아? 그냥 네모를 그리는거야. 그 다음에 네모 안에다가 버튼에 들어갈 텍스트를 쓰지. 예를 들면 “Ok” 같은거 말이야. 그 다음에 버튼이 눌리면 버튼이 눌린 것 같은 효과를 내기 위해서 네모를 그렸던 선들의 색을 바꿔주는거야. 경우에 따라서는 네모 안을 다른 색으로 채워주고 글자색도 바꾸고 잠깐 동안만 말이야. 그니까 버튼이 눌리고 있는 동안에만 말이지. 그 다음에 버튼에서 손가락을 떼면 원래대로 다시 그려주는거지. 그걸 프로그램 개발할 때마다 만들어 넣었어. 한번 해 놨던거를 또 쓰는거니까. 복사를 해 뒀다가 버튼이 필요할 때마다 copy & paste를 해서 썼지. 나름대로 재활용을 하기 위함이었어. 또 글자, 아니 문자열을 출력할 경우가 있잖아. 프로그램 배울 때 처음 배우는 Hello World 같은거 있잖아. 처음 배울 땐 hello world 한 번 출력하고 끝이 나는데 글자 색도 바꾸고 배경색도 바꾸는 경우가 비일비재 할꺼아냐? 그래서 처음엔 그것도 복사해 뒀다가 쓰곤 했었지. 그러다가 아얘 코드를 외워버리곤 했지만 말이야. 이렇게 코드를 복사해 뒀다가 사용을 하니 프로그램 개발하는데 생산성은 조금 높아졌어. 왜냐하면 만드는 시간이 그나마 줄어들게 되었거든. 처음엔 괜찮았는데 문제가 터지는건 나중이었어. 왜냐하면 복사해서 썼던 코드에서 문제가 발생을 했을 경우야. 생각해봐 버튼이 프로그램 하나에 얼마나 많이 사용되겠어. 버튼에서 문제가 하나 나오면 버튼이란 버튼은 다 찾아다니면서 고쳐줘야 하는 문제가 발생을 한다거지. 그래서 눈에 보이는 것들을 죄다 위젯으로 만들어 놨어. 앱 만드는데 재료가 된 셈이지. 좀 이해가 되는거 같은가? 위젯이 뭔지 말이야. 다시 말하면 표준화된 레고 같은거라고 해야하나? 한번 표준으로 사이즈가 정해지고 모양 색깔이 정해지면 그대로 대량 생산해 내는거지 필요한데는 그냥 가져다가 꽂기만 해서 쓰도록 말이야.
내가 말하는거 상상해봐. 컨테이너를 직사각형으로 만들었어 글자가 두 줄 정도 그리고 너비는 20 글자 정도 들어갈 크기야. 그리고 색깔을 입히면 눈에 보이겠지? 그래서 흰색으로 만들었어. 그 다음에 세로로 가운데 그리고 좌측에서 조금 띠고 동그라미를 검은색으로 그렸어. 안은 색칠하지 않았어. 그리고나서 동그라미에서 오른쪽으로 한글자 만큼 띄운 다음에 ‘사과’라고 적었어. 줄에는 다른것을 더 넣고 싶은데 가운데에 사과라고 적고 나니 두 번째 줄이 들어갈 자리가 없어. 그래서 수리수리 마수리…하고 높이를 더 늘렸고 똑같이 동그라미를 그리고 이번엔 ‘Apple’을 넣었어. 어떤 역할을 하는 프로그램일지 상상이 되지. 사과와 Apple 중에서 하나를 선택하는 그런 프로그램의 모양이지. 지금 상상속에서 만든게 위젯이야. 이런 위젯은 플러터에서 지원은 하지 않지만 우리가 원하면 이렇게 만들 수도 있는거지. 자 이제 우리가 만든 위젯이 앱에서 동작을 한다고 생각을 해 보자구. 실행된 화면이 상상이 되? 그럼 그 다음에 Apple을 선택하면 어떻게 동작을 할까? Apple 앞에 있는 동그라미를 검은색으로 칠하면 되겠지? 다시 사과를 클릭하면 어떨까? Apple 앞에 있는 동그라미는 지우고 색이 칠해지지 않은 동그라미로 그리고 사과 앞에 있는 동그라미를 검은색으로 색칠하면 되겠지.
어때?
위젯이 뭔지 알것 같아?
위젯은 화면에 보이는거니까. 내가 어떤 프로그램을 만든다고 할 때 위젯을 먼저 만들어야 되겠는걸요. 그러니까 앱을 만들기 위한 부품을 만든다고나 할까? 그래서 위젯들을 모아 놓은게 앱이 될꺼 같아요. 형이 얘기한대로 사과나 Apple을 선택하는 것도 위젯이라고 했으니 위젯 하나로도 앱이 될꺼 같기도 한데요. 선택이 되면 동그라미 칠하고 하는 동작도 위젯에서 자동으로 해 주나요? 그렇지 않음 형이 말한 마법사 그러니까 클래스가 그걸 해주나요?
배운거라곤 위젯하고 클래스하고 컨테이너니까 그렇게 상상이 되긴 하네요.
빙고!
그렇게 상상을 했다면 내 설명이 나쁘진 않았나보네. 위젯이 부품이라고 표현한게 딱 맞았어. 위젯들이 모여서 부품이 되는데 일반적으로 쓰는 위젯들이 있을꺼잖아. 그걸 앱을 만드는 나도 만들고 너도 만들고 다른 친구도 만들고 해야할꺼야. 그래서 그런걸 라이브러리라고 해서 만들어 놨어. 내 생각엔 라이브러리라는 표현보다는 레고 블럭이라는 표현이 더 맞을 것 같긴한데 말야. 우리가 많이 보는 아이콘, 버튼, 그림, 텍스트 이런걸 위젯으로 플러터에서 이미 만들어 놨어. 그래서 그냥 우린 가져다 쓰면 되는거야. 그런데 아이콘이라고 다 똑같은게 아니고 버튼이라고 해서 다 똑같은건 아냐. 다 컨테이너라는 놈에 담겨 있거든. 그래서 크기도 우리 마음대로 늘릴 수 있고 아이콘 같은 경우에는 아이콘에 들어갈 이미지도 우리 마음대로 바꿀 수가 있고 텍스트는 말할 것도 없겠지? 자유롭게 변형 가능한 위젯이 이미 만들어져 있는거지. 이미 만들어져 있는 위젯으로 내가 만들고 싶은 위젯도 만들 수도 있고 말야. 예를 들면 아이콘을 앱에 넣는다고 생각을 해봐. 아이콘은 어디에다 그릴지 위치 정해주고, 어떤 이미지를 아이콘에 넣을지 지정을 해 주면되는거야.
형, 그러니까 부품을 가져다가 우리가 원하는대로 설정을 해 주면, 설정을 해 준대로 눈에 보인다는 거네요. 그럼 아이콘은 그렇다치고 버튼을 만들고 그걸 클릭하면 뭔가 해야되잖아요. 버튼이 눌린 것처럼 눈에도 보여줘야 하지만 어떤 동작들도 해야할텐데 그건 어떻게 해요? 예를 들어 사진을 삭제하라는 버튼을 누르면 사진을 지워야 할꺼잖아요.
맞았어. 그건 마술사가 해야지. 버튼 위젯이 눌리는 효과 같은거 말야. 그건 버튼 위젯안에 이미 기본 기능이라 들어 있어. 그런데 니가 말한대로 어떤 동작을 시켜야 하는거는 클래스라는 마술사가 해야 할 일이야. 버튼이 눌리면 이런 동작을 해라 하고 주문을 만들어 놓는거지. 거기에 맞는 주문은 우리가 만들어야되. 주문만 모아 놓은 곳이 있어서 그걸 참고하면 되는거지. 하나 예를 들어볼까?
내가 새롭게 앱을 만들고 있는데 아무것도 없어. 그래서 버튼을 누르면 인사를 하는 앱을 만들꺼야. 그래서 버튼 위젯을 가지고 왔지. 이름도 지어줘야 하는데 그냥 버튼에 say hello라고 보여주는 것만 지정을 했어. 그럼 버튼이 나타나겠지? 버튼은 어디에 나타날까?
아무것도 없기 때문에 앱의 좌측 상단에 나타날꺼야. 그럼 중간에 위치시켜야겠지? 그런데 생각을 해 봐. 우리가 만든 앱이 세상에 모든 스마트 폰에서 돌아갈텐데 위치를 어떻게 정해줄까 고민스러울꺼야. 그래서 투명한 위젯인데 센터라는 놈을 가지고 올꺼야. 잠깐! 위젯 안에 위젯도 넣을 수 있어. 왜냐하면 우리가 만든 위젯은 컨테이너 안에 들어 있거든. 그래서 컨테이너 안에다가 컨테이너를 넣는거라고 생각을 함 이해가 될꺼야.
자! 센터라는 위젯에다가 버튼을 넣었어. 그리고 실행을 해 보면 버튼이 스마트 폰의 가로와 세로 중간에 나타나게 되는거야. 그 다음은 버튼을 클릭해 볼텐데. 우리가 주문을 넣지 않았기 때문에 눌려지긴 하는데 아무런 동작을 안할꺼야. 그래서 다음은 주문을 만드는거지. 마술사가 등장할 시간이야. 마술사는 위젯을 가질 수 있어. 기억하지? 마술사에게 우리가 만든 버튼 위젯을 가지고 있는 센터 위젯을 던져 줄꺼야. 그리고 마술사야 버튼 눌리면 “안녕하세요”라고 인사하는 주문 찾아와 하고 명령을 내리면 되는거지. 단점이라면 그 주문을 찾아서 우리가 마술사한테 던져 줘야 하는게 프로그래머의 일이라는거지.
위젯은 눈에 보이는거라고 했지? 물론 투명할 수도 있고 말야. 어쨌거나 많은걸 플러터가 이미 만들어 놨어. 마법사인 클래스도 여러가지 주문이 있다고 했지? 그것도 플러터가 이미 만들어 놨어 그런걸 이용해서 우리는 앱을 만들면 된다구. 우리가 직접 스마트폰 하드웨어를 제어하고 화면에 일일이 선을 그리고 할 필요가 없다는거지. 대신에 어떤 위젯이 있는지 어떤 주문들이 있는지를 누가 더 많이 알고 있느냐에 따라서 능력있는 앱 개발자가 되느냐가 정해지는거야.
지금까지 설명한 것은 플러터에서 사용하는 것이기도 하고 대부분 스마트폰 용 앱을 만드는 컨셉이기도 해. 그래서 이 정도면 기본적인 앱을 만드는 방법은 설명을 한것 같다.
연원준! 하산하도록… 하하하
하산하기 전에 플러터에서 앱을 만드는 방법을 알려줄께.
뭐 다른 걸로 앱을 만들때도 마찬가지이긴 한데 우선 어떤 위젯들의 묶음을 사용할지를 선택하게 되. 그 다음에는 우리가 만들 앱 이름을 줘야겠지. 앱이라는게 어떤 동작을 하는거잖아. 그래서 우리가 만들 앱은 결국 클래스, 마법사가 되는거야. 그 마법사 안에 어떤 위젯들을 넣고 어떤 주문들을 넣느냐에 따라서 앱이 만들어지고 동작을 하게 되는거야.
이제 정말 하산을 하도록 하고, 위젯과 클래스들을 하나씩 정복해 보라구. 클래스들은 말야. 플러터에 들어 있는 것도 있고 고수들이 따로 만들어 놓은것도 있어. 어떤 고수들이 뭘 만들어 놨는지 아는 것도 중요해.
기본적인 개념은 이해가 될 것 같았다. 마카형 말대로 라면 앱을 만들기 위해서는 컴퓨터를 공부하는게 아니라 위젯하고 클래스를 공부하면 된다고 했으니 하나씩 해 보자.
'IT' 카테고리의 다른 글
[Flutter #7] 위젯 라이브러리 (0) | 2020.11.24 |
---|---|
[Flutter #6] 첫번째 플러터 앱 (0) | 2020.11.24 |
[Flutter #4] 개발 환경 꾸미기 (0) | 2020.11.24 |
[Flutter #3] 어떤 애플리케이션을 만들 것인가? (0) | 2020.11.24 |
[Flutter #1] 왜 모바일 애플리케이션인가? (0) | 2020.11.24 |