Recent Posts
Recent Comments
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Today
Total

스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음 (10) - 객체 지향 프로그래밍

스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음 (10) - 객체 지향 프로그래밍 본문

카테고리 없음

스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음 (10) - 객체 지향 프로그래밍

KRONNA 2016. 7. 8. 10:02


이번 주는 새로운 프로그래밍 기능을 배우는 대신 스타일을 다듬어주는 테크닉과 프로그래밍 역사를 배워 지금 할 줄 아는 만큼을 완벽히 해낼 수 있도록 하는 것이 목적입니다. 그런 의미로 오늘은 현대 프로그래밍의 가장 핵심적인 개념인 객체 지향 프로그래밍 (Object-Oriented Programming)의 개념에 대해 배워보도록 하겠습니다. 




1970년대 카렐이 만들어졌을때 프로그래밍 분야는 수행할 기능들의 순서를 중심으로 쓰는 "절차적 프로그래밍" 패러다임이 지배하고 있었습니다. 큰 문제를 풀기 위해 여러가지 "절차"들로 쪼개어 문제를 해결하는 방법이 절차적 프로그래밍입니다. 여러분도 이 접근법으로 기둥 수리 과제를 해결하였죠. 더 최근에 발표된 자바 같은 프로그래밍 언어들은 "객체지향 프로그래밍" 패러다임을 지향합니다. 객체지향 프로그래밍은 프로그램에 등장하는 다양한 사물들과 행동들을 "오브젝트", 즉 "객체"로 보는 방법입니다. 프로그램 내의 객체는 현실의 사물 같이 뚜렷한 물체들을 나타내기도 하지만, 때때로 추상적인 개념을 상징하기도 합니다. 




객체지향 프로그래밍은 절차적 프로그래밍보다 더 추상적이라 프로그래밍을 처음 접하는 분들이 이해하기에 더 어려울 수 있습니다. 객체지향 프로그래밍은 쉽게 생각하자면 프로그램에 등장하는 다양한 객체들간의 관계를 강조하는 패러다임입니다. 카렐로 생각해볼까요? 절차적 프로그래밍에선 카렐이 무슨 행동들을 어떤 순서로 해야할지 고민합니다. "먼저 앞으로 4걸음 걸어가고, 그 다음엔 왼쪽으로 회전하라" 같이 말이죠. 객체지향 프로그래밍에선 카렐을 하나의 객체로 볼 수 있습니다. 카렐의 상태는 어떤가--카렐이 어느 쪽을 보고 있으며, 가방 안에 비퍼가 있는가 없는가? 카렐이 수행할 수 있는 행동은 어떤 것이 있는가? ("4걸음 전진 후 왼쪽 회전"이 하나의 예제이죠). 카렐이 서있는 바닥 (코너)도 객체로 본다면, 카렐과 바닥이 어떤 상호작용을 하는가? 이렇게 프로그램에 등장하는 객체들과 그 객체들의 관계를 토대로 생각하는 방식은 프로그램이 여러가지 문제를 한번에 해결하거나 여러 프로그램을 하나로 통합하려할 때 크게 도움됩니다. 




만약에 객체지향 프로그래밍이 정확히 어떤건지 분명히 이해되지 않으셔도 괜찮습니다. 언제나와 마찬가지로 일단은 이론에 대한 소개, 그 다음엔 실전을 통한 연습으로 이해할거니까요! 객체지향 프로그래밍의 진가를 확인할 수 있는 과제는 아직 좀 먼 미래에 있지만, 당장 다음 글에 소개될 카렐 체커보드 과제에서부터 한번 조금씩 연습해보세요. 카렐과 그 세계를 여러개의 객체들로 바라보는 연습을요! ^^


Stanford CS106A 수업에 대한 모든 권리는 스탠포드 대학교가 가지고 있습니다. "스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음"은 스탠포드 대학교의 CS106A 수업을 남녀노소 누구나 쉽게 배울 수 있도록 각색하고 한국어로 번역한 내용이며, 본글에 대한 모든 권리도 스탠포드 대학교가 가지고 있습니다. CS106A 수업에 사용되는 교재인 Karel the Robot Learns Java와 The Art & Science of Java를 작성해주신 Eric Roberts 교수님과 CS106A 수업을 가르치고 계시며 해외로 수업 내용 반출을 허락해주신 Mehran Sahami 교수님 그리고 Marty Stepp 교수님께 감사드립니다.


스탠포드 대학교에서 컴퓨터 과학을 전공중인 박준원이라고 합니다. 질문은 junwonpk@stanford.edu로 보내주시면 24시간 내로 답변 드리겠습니다. 설명을 따라했는데도 똑같이 작동하지 않거나 설명에 이해하기 어려운 부분이 있으면 주저하지 말고 질문 보내주세요! ^^

Comments