[레포트 - 객체지향 윈도우즈 프로그래밍] C언어 학습 향상 스터디

류명운

·

2015. 4. 4. 20:59

반응형

[레포트 - 객체지향 윈도우즈 프로그래밍] C언어 학습 향상 스터디

  • 객체지향 윈도우즈 프로그래밍 수업 중 팀 프로젝트로 진행한 "C언어 학습 향상 스터디"에 대한 최종 자료입니다.
  • 최종 결과물은 실제 C언어 스터디를 진행한 내용에 대한 소책자 제작과 진행 사항에 관한 모든 사항을 기록한 세미나 보고서로 나뉘게 됩니다. 
  • 최종 결과물 자료는 용량상의 문제로 본문 하단에 4개 파일로 분할 압축하여 첨부합니다.

<< 제출 자료 (직접 제작한 소책자와 세미나 보고서) >>

<< 소책자 목차 및 내용 >>

 

* 세미나 내용

1. 본 과제의 목적

일단, 저희 조의 이번 C언어 학습향상세미나의 목적은 “정말 하는 김에 이번 기회를 통하여 프로그래밍 언어 중 가장 기초가 되는 C언어를 학습하자, 더 이상 물러설 곳도 물러설 시간도 없다.” 입니다.

2. 본 과제의 목표

“하는 김에 C언어 책 1독” 을 최종 목표로 삼고 학습향상 스터디에 임하였습니다.

3. 발표 및 스터디 세미나의 형식

발표 및 스터디 세미나는 [3월 18일, 20일, 25일, 27일, 4월 1일, 2일] 총 6번의 만남을 가졌으며, 각 세미나의 내용은 오직 C언어 학습향상을 위한 스터디였습니다. 또한 각 세미나의 평균 시간은 2시간여의 시간을 가졌으며, 스터디 세미나의 주 교재로는 [생능출판사, 천인국, 쉽게 풀어쓴 C언어 Express]를 사용하여 다루어야 할 주제들의 개념 파악과 예제프로그램을 실습 하였습니다. 스터디의 진행속도는 전반적으로 저와 xx이가 xx이보다 조금 앞선 상태의 진도를 유지하여 xx이의 이해를 돕는 식으로 진행되었습니다.

1, 2, 3장 각 발표 세미나는 세미나 전 각자 개인스터디를 통한 개념정리와 이해를 어느 정도한 상태에서 한 명의 학우가 발표를 맡아 진행하기로 사전 합의 후 세미나를 진행하였습니다. 1장 'C언어의 기본‘ 은 xx이가 맡았으며, 2장 ’배열과 포인터‘ 는 xx이, 마지막으로 3장 ’구조체와 열거형‘ 은 제가 맡아 각자 자유형식으로 시간을 가져 나머지 조원에게 발표하게 되었습니다. 저와 xx이는 앞서 말한 주 교재를 바탕으로 과실 앞의 화이트 보드를 이용하여 발표 세미나를 진행하였으며, xx이는 ’C가 보이는 그림책‘을 이용하여 자신이 발표할 자료문을 만들어와 프레젠테이션으로 보여주며 저희에게 설명해주는 식으로 발표 세미나를 진행하였습니다.

4. 최종 보고서 및 예제 실습프로그램 보고서

최종 보고서는, 저희가 본 세미나를 통해 다루었던 주제들의 중요 개념들을 정리하여 소책자의 형식으로 만들어 보게 되었습니다.

예제 실습 보고서는, 본 학습향상 스터디 및 세미나를 진행하면서 실습하였던 예제 프로그램들에 대한 스크린샷을 모아 작성하였습니다. 각 스크린샷의 실행 화면에서 첫 줄은 실제로 프로그램을 작성한 사람의 이름을 전자서명형식으로 집어 넣었습니다.

5. 각 발표 세미나에서의 느낀 점

[5.1 C언어의 기본(1) : 이xx]

xxx - 세미나 발표 1장을 맡게 되어 2장과 3장보다 더 면밀히 세밀히 공부한 것 같습니다. 나중에 2장과 3장을 공부하게 될 때에 1장에서 기초가 잘 쌓여야 뒷 장에서 이해도가 높기 때문에 1장이 중요한 것 같았습니다. 특히나 1장에서 실습을 해보며 변수 선언시 const로 변수를 상수로 지정해주고 아래에서 변수를 다른 수로 초기화 했을때에 생기는 오류 라던지, 한 소스파일에 두 개의 test.c test1.c를 만들었을 때 test.c에 main을 주고 test1.c에는 main을 안 썻을 때 test1.c에서 컴파일했을 때 test.c가 컴파일되는 것 같은 c언어책에서 세세한 부분과 또한 책에는 없는 부분들을 설명해 주었습니다.

xxx - 가장 먼저 발표를 맡게 됐음에도 불구하고 많은 준비와 노력으로 끝마쳐준 xx이에게 감동을 받았다. C언어의 가장 기초가 되는 프로그램의 구조, 변수, 함수 등의 부분을 자기가 직접 책을 보며 실습과정을 통해 실제사용가능 한 코드를 최대한 짧게 구성하여 발표 문서를 준비해 우리에게 발표를 진행해 주었다. 또한, 각 함수들의 개념, 변수들의 차이점 등에 대한 개념정리 또한 준비하여 발표해 주었다.

xxx - [1장.C언어의 기본]을 발표한 xx오빠의 세미나를 듣고, 알고 있던 부분과 기초지만 몰랐던 부분을 알 수 있었다. 우선 지역변수와 전역변수의 차이, 생존시간, 중첩반복문의 응용, 재귀함수 등등의 개념을 한번 더 집고 넘어가게 된 계기가 되었던 것 같다. 그러고 하나 더, for문을 사용 시 int 형을 사용해 4byte나 메모리를 할당하는 것을 조금 더 효율적으로 사용하고 싶었는데, register 자료형으로 사용하면 임시저장 공간이기 때문에 더 효율적으로 메모리를 사용 할 수 있어서 좋은 정보가 되었던 것 같다(앞으로 계속 사용할 예정이다).

<< C언어의 기본(1) 발표 >>

5.2 배열과 포인터(2) : xxx

xxx - [2장. 배열과 포인터]를 맡게 되었을 땐 정말 C언어에서 가장 약한 부분을 내가 발표하게 되었단 생각이 들었다. 공부를 마친 지금에서야 내가 몰랐던 부분이 바로 C언어 메모리 구조란 것을 알게 되었고, C언어의 꽃이 왜 “포인터” 인지 확실히 느끼게 되었다. “2장”을 확실히 공부하면서부터 정말 신세계였다. 단순히 프로그램 소스를 짜는 건 1학년 때도 해왔던 것이기 때문에 그 것으로 멈췄다면, 포인터 사용으로 메모리를 효율적으로 활용해 속도를 향상 시키는 것이라든지, 라이브러리가 제공하는 함수를 사용해 어떠한 소스를 짤 수 있는가에 대한 환상적인 일들을 아마 몰랐을 것이다.

xxx - 배열과 포인터에 관한 설명을 들으며 배열은 같은 타입의 데이터를 여러개 선언할수 있는 장점으로 int core[45]; 은 int형을 가지는 core를 45개 가지는 것으로 그것들에 평균을 구하기에 편리하고 포인터를 사용해 메모리에 주소를 나타내어 큰 소스를 컴파일할 때 컴퓨터에게 메모리 주소를 직접적으로 알려줌으로 컴퓨터가 메모리에 한번에 접근할 수 있도록 도와주는 것이다. 한번은 xx이형에 쉬운 설명도 있었다. 만약에 xx이형이 나 한테 1시에 밥먹자라고 말했을 때 내 뇌에 정확히 어디 부분에 1시에 밥먹는다는 것을 뇌가 어딘가에 저장했을때를 포인터에서 메모리 첫 번째 주소지를 설명할 때 이해가 쉬웠던 적도 있었다.

xxx - 배열과 포인터, 1학년 C언어 강의 끝 무렵에 잠깐 포인터를 배웠던 기억이 살짝 있지만, 포인터가 뭔지는 생각이 안 난다. 정말 조원들과 포인터에 대한 개념을 잡기위하여 많은 시간을 투자하였지만 간략한 개념과 사용법에 대한 이해만 있을 뿐, 아직 까지 포인터를 자유자제로 다룰 수는 없다. 또한, 포인터를 자세히 파헤치기위해 컴퓨터의 메모리 구조까지 들어가 막 공부를 하였는데 머리만 더 아팠다. 그래도 많은 시간을 투자하여서 그런지 xx이가 진행한 발표 세미나에서의 내용은 어느정도 이해가 가고 아는 내용이기에 재미 또한 있었다. 면접에서 포인터에 대해 묻는다면 어느 정도 대답할 개념정도는 잡히게 되는 시간이었다. 

<< 배열과 포인터(2) 발표 >>

5.3 구조체와 열거형(3) : xxx

xxx - 구조체와 열거형. 이번 장은 내가 발표를 맡아 진행하게 되었다. 구조체와 열거형에 개념에 대한 이해는 쉬웠으나 막상 실습 예제 등을 살펴보며 더 깊이 공부해보니 앞서 배운 포인터와 배열과의 응용 등의 내용이 나왔다. 그때부터 사실 멘붕이 오기 시작했지만, 머릿속에 안들어와도 계속 읽고 또 읽었다. 발표는 개념에 대한 이해를 중점으로 진행하였으나 xx이가 나보다 더 이해를 잘 하고있어 당황스러웠다.

xxx - 내가 처음에 1장을 공부했을 때 뒷장으로 가면 소스가 길고 어려울 것만 같았다. 하지만 뒤로 갈수록 오히려 1장을 알고 있어서인지 개념이해는 쉬웠으며 실제로 막바지에 구조체를 공부하면서도 예제는 간단한 것들 이였으며 이해하는데 큰 무리가 없었다. 구조체는 여러 가지에 타입을 한번에 묶어서 사용할 수 있는 것이였다. 마지막장까지 공부를 하면서 전체적으로 c언책을 나무개념이 아닌 숲 개념으로 볼줄 알게 되었고 c언어공부한 것이 연동되어 다른 언어를 공부할 때 도움을 많이 주었으면 좋겠다.

xxx - [3장.구조체와 열거형]을 발표한 명운오빠의 세미나를 듣고, 우선 C언어 책의 끝 부분을 드디어 배우게 되는 생각이 들었다. 이름부터가 너무 어려웠던 구조체와 열거형은 그 개념보다 포인터와 배열과 접목 시켜 활용한 소스를 구현하는 것이 더 어렵다는 것을 알게 되었고, 스터디를 같이 하면서 다 같이 감탄을 했던 부분이 있었다. 바로, 구조체의 멤버를 포인터로 갖는 것이다. 주소록 검색이나, 자료형이 다른 변수들을 입력 받고 저장할 때 구조체의 포인터만큼 유용한 것은 아마 없을 것이다. 물론 링크드 리스트도 유용하겠지만..

<< 구조체와 열거형(3) 발표 >>

6. C언어 학습향상 스터디를 마치며

6.1 xxx(2013xxxxx) - "C언어 1독의 목표"

우선 드디어 C언어 책을 처음부터 (거의)끝 까지 볼 수 있는 재밌던 계기가 되었던 것 같다. 모르는 것이 있었을 때, 혼자 공부하고 있었다면 분명 막혔을 문제들을 같이 해결할 조원들이 있다는 점에 너무 다행이었다. 사실 너무 재미있었다. 모르는 소스를 설명하기 위해 이론을 조합하는 것도, 소스를 실행시키며 프로그램을 구현하는 것도, 컴퓨터소프트웨어학과인 내가 컴퓨터 프로그램이 어떻게 실행되는지도 몰랐었는데, 서서히 그 원리를 알아가는 것이 너무 재밌었다. 그러고 C를 복습하면서 C++에 대해서 조금씩 배우고, java에서 배웠던 개념을 생각해보니, 발전되는 과정이 눈에 보이는 것 또한 흥미로웠다.

프로그래머에게 메모리관리의 권한을 줬기 때문에 생긴 “포인터”와 소스를 간단히 만들고 main 함수와 헤더파일 그리고 함수들을 분리한 “C++" , 운영체제의 다른 메모리까지 잘못될 수 있기 때문에 메모리관리 권한을 가상머신이 가져가고, 객체지향으로 바뀐 "Java" 이렇게 발전 된 과정을 한번 더 생각해 보게 되었다. 그러고 가장 나중에 개발 된 java가 익숙해서 그런지 몰라도 가장 편리했다는 생각과 함께 C에 대한 공부를 마치게 되었다.

6.2 xxx(2010xxxxx) - “말 그대로 C언어 학습향상 스터디”

말 그대로 C언어 학습향상 스터디를 지난 1달여 동안 진행해 왔다. 결과는 아주 만족스럽다. 처음 조가 짜여진 순간부터 본 과제의 제출일 오늘 지금 이 순간까지 정말 차근 차근 C언어 스터디를 진행해왔다. 너무 과하지도(지치지 않게) 않고 부족하지도(대충대충이 아닌) 않게 마지막 소감문을 작성하는 지금까지 걸어왔다. 이렇게 할 수 있었던 가장 큰 이유는 같은 조원이였던, xx이와 xx이의 학습향상에 대한 ‘열정’덕이었다. 여태까지의 팀 프로젝트 또는 과제는 대부분 해당 주제의 과제만을 완성하기 위해 인터넷 검색을 하고 자료를 찾고 붙여넣는 식의 진행이었다. 하지만 이번 주제는 학습 향상을 위한 세미나 인 만큼 우리 조는 정말 이번 기회에 C언어 책을 1독해보자 라는 목표를 세워 최종결과물인 보고서는 신경쓰지 말고 공부에 전념하자는 생각을 갖고 세미나를 진행하게 되었다. 하여 보고서는 xx이와 xx이와 같이 공부했던 내용들을 중점으로 내가 따로 시간을 내어 C언어 책과 인터넷을 참고하여 작은 소 책자 처럼 정리하여 만들어 보았다. 하지만 조금 걱정이 되는 부분은, 우리가 지금 배우는 과목은 객체지향 C++인데 여태까지 했던 C언어의 개념과 내용들이 중간고사 시험과는 무관하다는 생각이 조금 들어 사실 힘이 조금 빠지긴 하였다. 그래도 노력한 만큼 C언어의 개념 및 이해를 얻었다고 생각하면 충분하다 생각된다. 앞으로도 이런 학습향상 스터디 같은 주제의 팀 프로젝트가 진행되었으면 좋겠다고 생각된다.

6.3 xxx(2011xxxxx) - “류xx,김xx,이xx 조가 만들어진 날부터”

마지막날까지 다른 과제나 다른 조별 과제로 인한 시간을 제외하고 c언어 공부에 전념을 했습니다. 세세하게 처음부터 쉬운 예제들을 하나하나 모두 코딩을 해가며 이해와 실습을 해보았습니다. 1장,2장,3장에서 1장을 맡았으며 1장은 꼼꼼히 공부를 하여 진도가 느렸습니다. 2장과 3장은 조원 3명이 각 장마다 하루씩 잡아 과실에서 아침부터 저녁까지 1장에만 몰두하여 공부를 했습니다. 제가 생각한 공부법은 c언어를 전체적으로 각장에 개념을 이해해서 나중에 필요한 부분을 쓸줄 아는 개념까지 이해를 해가며 빠르게 책 한권을 띄고 모든 장에 개념을 숙지하여 다시 한번 책을 볼 때에 가지고 있는 개념으로 두 번째에는 좀더 꼼꼼히 보고 공부해서 c책을 모두 통달하는 것 이였습니다. 현재는 구조와 변수 , 반복문, 제어문, 함수 까지는 세밀하게 공부를 했으며 (배열과 포인터), (구조체)부분은 개념만 확실히 알고 있는 상태입니다. 2장 3장은 세세하게 까지공부는 못하였으나 개념은 어떻게 쓰이는 것인지는 알고있습니다. 이번 팀 스터디를 통해서 정말 3주만에 c언어에 개념을 알게 되어 기쁩니다. 3주간 혼자서 공부도 하고 진도가 느려서 같이 개념이해를 하면서 진도를 빠르게 나가면서 이번 조별 c언어공부를 할 수 있었던것 같습니다. 막상 어렵게만 느껴질 줄 알았는데 지금은 왠만한 소스를 보면 보면서 이해할 수 있습니다. 부족한 부분은 다시 책을 보면 금방 혼자서 이해를 할 수 있는 수준에 까지 이르렀습니다.


"이번 조별 c언어공부를 하면서 단순히 보고서제출을 위하여 한 조별모임이 아닌 실질적으로 c언어를 학습하게 되어서 너무나 기쁩니다."


C스터디-명우니닷컴.vol1.egg

C스터디-명우니닷컴.vol2.egg

C스터디-명우니닷컴.vol3.egg

C스터디-명우니닷컴.vol4.egg


반응형