상세 컨텐츠

본문 제목

아빠! 프로그래밍이 모에요?

프로젝트/HelloWorld

by ryujt 2014. 3. 27. 01:26

본문

최대한 쉬운 용어를 사용하면서 프로그래밍이 무엇인지에 대한 이해를 돕기 위해 글을 작성했습니다.  이 글은 프로그래밍에 대해 잘 모르는 부모님들과 아이들을 위해서 쓰여졌습니다.


아이들에게 프로그래밍을 가르치는 것은 상당히 매력적인 일입니다.  마치 모두가 자신의 아이들이 피아니스트가 되기를 바라고 피아노 학원에 보내거나, 화가가 되기를 바라고 미술 학원에 보내는 것은 아닌 것처럼, 프로그래밍을 가르친다고 반드시 프로그래머를 목표로 할 필요는 없습니다.  


아이들은 프로그래밍을 통해서 문제 해결 방법과 사고력, 창조력과 추상화 능력 그리고 수학적인 감각을 익힐 수가 있습니다.  무엇보다도 컴퓨터가 아이에게 유해한 존재가 되지 않고 흥미를 유발하면서도 아이에게 유익한 도구가 될 수 있도록 합니다.







마법의 램프


컴퓨터는 우리가 시킨대로 무엇이든(?) 일해주는 친절한 기계입니다.  마치 마법의 램프와 같습니다.  램프 속에는 작은 요정들이 우리가 시킨 일을 대신 처리해 줍니다.  요정들이 어떻게 일하는 지 보이지도 않고, 알 필요도 없습니다.  다만, 우리는 이 마법의 램프에게 우리가 원하는 일을 알려주기만 하면 됩니다.  그리고, 컴퓨터는 우리의 상상보다 많은 일을 우리 대신 처리해 줄 수 있습니다.


하지만, 프로그램이라는 신청서를 작성해야 하며, 작성법에 정확하게 맞춰서 제출하지 않으면 어떤 부탁도 들어주지 않습니다.




구식 램프에게 일 시키기


오래 전부터 "절차적 프로그래밍"이라는 방법으로 프로그램을 작성하는 기법이 있었습니다.  용어 자체를 외우려고 힘 들일 필요는 없습니다.


이 구식 방법은 우리가 원하는 일을 한 줄 한 줄 적어 나가는 것이 전부입니다.  아래는 우리의 첫 번 째 프로그램입니다.  청소 로봇에게 집을 청소하도록 지시하는 것이 목적입니다.

  청소해

간단하죠?  그런데 막상 일을 시켜보니 문제가 발생하였습니다.  오랫 동안 집을 비워놨더니 온 집안이 지저분한 상태입니다.  그래서, 청소를 반복적으로 시키기로 합니다.  아래는 우리의 두 번 째 프로그램입니다.

  반복해 여기서부터
    청소해
  여기까지

여기서부터..여기까지 사이에 있는 지시 사항을 로봇이 반복하기 시작합니다.  그런데, 또 다시 문제가 발견됩니다.  집이 상당히 깨끗한데도 새벽까지 내내 쉬지 않고 로봇이 청소를 합니다.  잠을 설치고 나서야 다시 우리의 세 번 째 프로그램을 작성합니다.

  반복해 여기서부터
    만약 방이 지저분하면 청소해
  여기까지

오!  멋지게 로봇이 작동합니다.  위의 프로그램들은 실제 프로그래머가 하는 일과 동일합니다.  제가 취미로 만들고 있는 어린이를 위한 프로그래밍 개발툴을 이용하면 위의 프로그램을 제시하는 것만으로 로봇이 방을 청소하는 것을 확인 할 수 있습니다.  다만, 아직 완성도가 떨어져서 한 참을 더 기다려야 할 것 같습니다 ^^;




프로그래밍은 한 번에 끝나지 않는다


위에서 예를 보였듯이 프로그래밍은 한 번에 끝나는 경우가 거의 없습니다.  처음 만들 때 미처 생각하지 못한 상황을 나중에 발견하는 경우가 종종 있습니다.  그래서 일반적으로 프로그래밍은 아래의 절차를 따른다고 봐도 무방합니다.


[그림 1] 프로그래밍을 작성하는 순서


  • 어떻게 만들 것인지 설계를 합니다.
  • 설계를 토대로 프로그램을 작성합니다.  다시 설명드리면, 프로그램이란 램프에게 전달하는 작업 지시서입니다.
  • 프로그램이 제대로 동작하는 검증(테스트)합니다.
  • 만족한다면 프로그램을 사용하시면 됩니다.
  • 무엇인가 부족한 것이 발견되면 다시 설계를 하고 작성하고 검증하는 과정을 계속 반복합니다.




신식 램프에게 일 시키기


이번에는 조금 더 세련 된 방법으로 프로그램을 작성해보도록 하겠습니다.  "이벤트 기반 프로그래밍 (Event Driven Programming)"이라는 방식입니다.


아래는 기존의 청소 프로그램을 이벤트 기반으로 다시 작성한 것입니다.


[그림 2] 이벤트 기반으로 작성된 청소 프로그램


  • 이벤트는 무엇을 실행하기 위한 조건으로 생각하시면 됩니다.
  • [그림 2]에서는 "방이 더러우면" 이란 조건이 만족되는 상황이 감지되면, 청소하라는 의미가 됩니다.
  • 주로 "~~하면, ~~해라" 형식으로 프로그램을 작성하게 됩니다.
  • 이해하기 쉽고 프로그램을 작성하기 쉬운 장점이 있습니다.
  • 이벤트 기반 프로그래밍을 한다고 해서 기존의 절차적인 프로그래밍 기법을 완전히 버린 것이 아닙니다.  조금 더 구식(절차적) 램프의 개선했다고 생각하시면 됩니다.  여전히 구식 램프의 기능은 그대로 사용 할 수 있으며, 추가적으로 신식(이벤트) 램프의 기능을 사용하실 수 있는 방법이라고 생각하시면 됩니다.




프로그래밍 세계의 산업 혁명


이번에 소개해드릴 방법은 프로그래밍 세계의 산업 혁명에 가까운 발견으로 꼽을 수 있는 "객체 지향적 프로그래밍 (Object Oriented Programming)"입니다.  수 년 간 프로그래밍에 대한 경험을 쌓아 온 전문가들에게도 살짝 어려운 방법입니다.


램프(컴퓨터) 안에 로봇 공장을 만들고 로봇을 생산해서 일을 시키는 방법이 바로 객체 지향적 프로그래밍(OOP)입니다.  공장은 얼마든지 원하는 대로 로봇을 만들어 낼 수가 있습니다.  이때, 우리는 공장이 만들어 낼 로봇이 어떤 기능과 특징을 가져야 하는 지에 대해 신청서(프로그램)를 제출해야 합니다.  따라서, 모든 공장은 신청서를 토대로 제 각기 다른 종류의 로봇을 생산할 수 있습니다. 


이에 대한 전문용어는 아래와 같습니다.  역시 용어를 외우는데 힘들이실 필요 없습니다 ^^*

  • 로봇 공장의 전문용어: 클래스 (Class)
  • 로봇의 전문용어: 객체 (Object)
  • 로봇의 기능: 메소드 (Method)
  • 로봇의 특징: 속성 (Property)


이제 오늘의 마지막 프로그램을 객체지향적 프로그래밍을 이용해서 작성해보도록 하겠습니다.

  로봇 := 로봇공장에 주문
  로봇 . 청소해

"반복하라"는 명령어도 없고, "만약 방이 더러우면"이라는 조건을 생각하지도 않았기 때문에 프로그램을 다시 작성해야 할 까요?  그럴 수도 있고, 아닐 수도 있습니다.  위에서 이미 설명한대로 로봇공장 또한 우리가 신청서(프로그램)을 작성해서 만들어야 합니다.  이때, "청소해"하면 방이 더러울 때만 청소하라고 신청서를 작성하면 됩니다.


이러한 방법이 가진 이점 중에 하나는 바로 "분업화"입니다.  누군가 공장을 이미 만들어 놓은 경우 우리는 "청소해"를 구체적으로 어떻게 작성해야하는 지는 알 필요가 없습니다.  친절하게도 동료 개발자가 "이 로봇은 "청소해하면 알아서 하니까 그냥 써도 돼!"라고 했다면, 우리는 단지 위에처럼만 하면 되는 것 입니다.


이런 장점을 이용해서 큰 규모의 프로그램을 작성할 때, 여러 개발자들이 쉽게 협력할 수 있는 방법이 생겼기 때문에 객체 지향적 프로그램을 "프로그래밍 세계의 산업 혁명"이라고 표현 한 것입니다.


아래는 청소하는 방법이 다를 경우 각각 다른 로봇을 생산해서 청소하는 프로그램 작성의 예입니다.  공장에서 로봇만 찍어내서 시키면 되니까 상당히 편리합니다.

  진공 청소 로봇 := 진공 청소 로봇공장에 주문
  물 청소 로봇 := 물 청소 로봇공장에 주문

  진공 청소 로봇 . 청소해
  물 청소 로봇 . 청소해

의도적으로 ":=", "." 와 같은 기호의 설명은 피했습니다.  아직은 아실 필요 없으며, "신청서 작성 요령이 그렇구나"하고 넘어가시면 됩니다.  신청서 작성 요령은 프로그래밍 언어마다 다릅니다.  마치 우리가 한국어와 영어 등이 있듯이, 프로그래밍을 작성하는 형식(언어)에도 여러 가지가 있습니다.




마치면서


지금까지 우리는, 현재 프로그래밍의 세 가지 큰 흐름에 대해서 훝어 봤습니다.  구식 램프, 신식 램프 그리고 산업 혁명에 이르기까지 실제로는 엄청난 내용을 다룬 것 입니다.  이제 여러분들은 위에서 설명한 세 가지 프로그래밍 방법에 대한 구체적인 공부를 하셔야 할 시간입니다.



'프로젝트 > HelloWorld' 카테고리의 다른 글

프로그래밍을 제대로 배우기 어려운 이유  (2) 2014.12.29
cocos2d-x 시작하기  (0) 2014.04.07
슈팅게임 JetBoy #3  (0) 2014.03.23
슈팅게임 JetBoy #2  (0) 2014.03.23
슈팅게임 JetBoy #1  (2) 2014.03.23

관련글 더보기