Clickseo.com
 
    * Who am I
    * ICT story
       Book
    * Programming
    * Operating Systems
    * Links


YouTube Twitter Facebook
Clickseo
 
Copyright (C) Clickseo.com
All rights reserved.



(열혈강의) "또 하나의 C"



책 소개

『또 하나의 C』는 C를 배웠던 경험이 있거나 다른 프로그래밍 언어를 조금이라도 다루었던 분들을 대상으로 "포인터와 함수 중심으로 C언어를 다룬 책"이다. 이와 함께 포인터에 대한 이해를 높이고자 단순 포인터 예제가 아닌 자료구조를 활용하여 실전 포인터 활용 프로그래밍 경험을 제공한다. 먼저 메모리에서 변수 선언이 어떻게 이루어지는지, 그 결과 메모리는 어떻게 구성되는지를 차례대로 살펴보고 이러한 기본 지식을 바탕으로 C 언어의 꽃이라 할 수 있는 포인터를 함수, 자료구조와 함께 살펴본다.

1) 포인터를 함수, 자료구조와 함께 설명하면서 포인터가 왜(Why) 필요하고 어떻게(How) 사용하는지에 중점을 두어 설명한다. 2) 추상적인 이해에서 벗어나 구체적인 메모리를 이용하여 변수 선언과 자료형의 의미를 정확히 이해하도록 한다. 3) 변수, 포인터, 함수 개념을 실제 프로그래밍 과정에 어떻게 적용할 것인가를 배워보도록 한다.

[출처 : 출판사 '서평(書評)'중에서]

---------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------

대한민국에서 컴퓨터 언어를 배우고자 할 때 대부분 가장 먼저 만나는 것이 C 언어일 것이다. 그래서 누구나 쉽게 생각하지만, 시간이 흐를수록 어느 것보다 더 어렵게 느껴지는 것 또한 C 언어이다. 왜냐하면, 컴퓨터와의 연애(?)가 더 깊어질수록 가장 단순했던 1과 0의 세계가 우주와 같은 미지의 세계처럼 느껴지기 때문이다. 그리고 "하드웨어와 소프트웨어가 하나로 융합(Convergence)"이 되고, "사람과 사물이 또한 사물과 사물이 서로 정보를 주고받는(M2M, Machine to Machine) IT 세상"이 펼쳐질수록 C 언어는 더더욱 중요해질 수밖에 없기 때문이다.

"프로그래밍은 셀프입니다."


이러한 C 언어를 습득하기 위해서 필자가 여러분에게 당부하고 싶은 것은, 눈으로 보고 귀로 듣는 것만으로는 프로그래밍 언어를 습득하는 데는 한계가 있다는 것이다. 아무리 힘들더라도 이 책의 프로그램 소스 코드를 직접 코딩해보면서 문제 해결 방법을 고민해보기 바란다. 그 과정에서 만나는 수많은 경고와 에러 메시지들이 여러분들 C 언어와 더 친해질 수 있도록 해주는 연결 고리가 될 것이기 때문이다. IT 세계가 너무 빠르게 변한다고 해서 짧은 기간에 무언가를 이루려는 욕심보다는, 느림의 행복을 느끼면서 C 언어의 세계를 만끽한다면 필자가 이 책의 마지막에 남긴 격려의 메시지를 만날 수 있을 것이다.

[출처 : 저자 '서문(序文)'중에서]

---------------------------------------------------------------------------------------------

C 언어를 어떻게 공부해야 하나요?

대한민국에서는 컴퓨터 언어를 배우고자 할 때 가장 먼저 만나는 것이 대부분 C 언어이다. 이제는 나도 컴퓨터 언어를 배우고 멋진 프로그램을 만들 수 있다는 설렘으로 C 언어와의 첫 만남을 시작했을 것이다. 컴퓨터 모니터에 "Hello World!!!"를 출력하고는 "와~~~!"하는 탄성과 함께 부푼 기대를 한다. 하지만, 그 기쁨도 잠시 나만의 애인(?)은 나를 너무 힘들게 한다. "아~ 역시 첫 사랑은 이루어지지 않는구나!"라는 자조 섞인 말과 함께 자신을 위로하는 모습을 발견한다. 처음이기에 좌절과 아픔을 맛보고 목표로 하는 언어나 분야에 접근하기도 전에 포기하고 이별을 통보하게 된다. 때론 입대로, 때론 C 언어와 연관이 없는 분야로, 그녀와 만나지 않을 수만 있다면...

잊으려 애써보고 피해보려 안간힘을 써보지만, 항상 나를 힘들게 하는 건 C 언어이다. 나의 속마음도 모른 채 그녀는 해맑게 웃고 있다. 그래서 또다시 꺼내보려 하지만 첫 사랑의 아픔은 쉽게 치유되지 않는다. 왜 그토록 힘들었을까? 이 책을 펼친 독자들이 가진 공통된 아픔이 아닐까 생각해 본다. 아니면 더 깊은 C 언어를 만나기 위함 일 수도 있겠다. 필자는 여러분이 후자의 경우이기를 간절히 바래본다.

사랑에도 기술이 필요하듯이 C 언어에 접근하는 방법도 기술이 필요하다. 어떤 과정을 통하여 접근할 것인가. 그리고 어떻게 습득하여 내 것으로 만들 것인가. 첫 사랑의 아픔을 다시 겪고 싶지 않다면 이 책을 덮는 마지막 순간까지 잊지 말아야 할 게 있다. 2,000년 전부터 IT 업계에 전설처럼 내려오는 고사성어(故事成語)가 있다. 꼭 가슴에 새기기 바란다!!!

"백문이불여일타(百聞而不如一打)"


컴퓨터 언어를 습득하기 위해서 눈으로 보고 귀로 듣는 것만으로는 한계가 있다. 사랑한다고 수많은 편지와 전화 통화를 해본들 찾아오는 건 아픔뿐이다. 직접 만나서 사랑을 이야기하는 것이 더 중요한 것처럼 말이다. 힘들더라도 여러분이 직접 코딩을 해보면서 문제 해결 방법을 고민해보아야 한다. 또한, 다른 사람의 코드를 보는것으로만 끝나지 않고, 직접 타자하면서 발생하는 다양한 에러와 경고 메시지를 직접 해결해 보는 것이다. 이러한 작업을 반복하면서 새벽의 배고픔을 달래고자 컵라면을 먹고, 창문 밖은 벌써 아침이 되어 햇살이 내 눈을 깨우는 시간이 얼마나 있었느냐가 여러분의 첫 사랑을 지켜줄 것이다.

그리고 C 언어를 효과적으로 공부하였다면 다음과 같은 두 가지 물음에 효과적으로 답할 수 있어야 한다.

데이터를 저장할 메모리 공간은 어떻게 확보할 것인가?


첫 번째 주제는 데이터 저장을 위한 메모리 공간을 어떻게 확보할 것인가이다. 가장 단순한 방법은 "변수 선언"이다. 변수 선언을 통하여 우리가 원하는 데이터를 저장하기 위한 메모리 공간 확보를 할 수 있다. 그리고 더 많은 데이터를 저장하고자 변수 개념을 확장하여 메모리 공간을 확보하는 방법이 "배열과 구조체"라는 방법이다. 그리고 변수 개념과는 다르지만, "동적 메모리 할당"이라는 방법을 통하여서도 데이터를 저장할 메모리 공간을 확보할 수 있다.

작성한 소스를 어떻게 효율적으로 관리할 것인가?


두 번째 주제는 프로그램을 위해 작성된 코드를 어떻게 하면 좀 더 효율적으로 관리할 것인가이다. 우리가 작성한 프로그램 소스 코드의 양이 많아지면 관리하기가 쉽지 않다. "main()" 함수 하나만으로는 감당이 힘들기에 "함수" 개념을 이용하여 여러 개의 부분으로 쪼개서 작성하면 좀 더 효율적인 프로그래밍 작업을 할 수 있다. 하지만, 함수마다 똑같은 데이터를 저장할 필요는 없다. 포인터 개념을 이용하면 단 하나의 데이터만을 저장하고 서로 공유하면서 사용할 수 있다. 함수 개념으로 접근하다보니 포인터가 필요한 것이다.

또한, 하나의 소스 파일로 작성하는 것도 비효율적이기에 여러 개의 파일로 나누어 관리하는 "분할 컴파일" 개념도 동원될 것이다. 이러한 과정들을 통하여 좀 더 효율적인 프로그래밍 과정을 습득할 수 있을 것이다. 필자는 이 두 가지 주제를 별도로 분리하지 않고 동시에 접근함으로써 C 언어를 다루고자 한다.

[출처 : 저자 '서문(序文)'중에서]

---------------------------------------------------------------------------------------------

저자 소개 -- 서두옥

21세기를 넘나들던 시절에 GNU/Linux와 웹 프로그래밍에 관심이 생기면서 수년간 웹 개발 프리랜서로 활동하였다. 그리고 하드웨어와 소프트웨어의 융합(Convergence) 시대에는 임베디드 시스템 분야에 관심을 두기 시작하였고 5G WiFi 표준인 802.11ac 기반의 무선침해방지형 보안 AP 기술 개발을 위한 한국전자통신연구원(ETRI) 국책 과제에도 참여하였다. 지금은 대학과 IT 전문 교육센터, 그리고 기업체 관련 특강 등 강사로 활동 중이며 이와 함께 M2M(Machine to Machine)에서 DTNs(Delay Tolerant Networks) 적용 방안을 연구하고 있다.