2013년 4월 23일 화요일

1장 왜 지금 C를 배워야 하는가?

1.1 알고리즘과 구현

  •  알고리즘 - 컴퓨터로 어떤 일을 처리하는 순서
  •  c프로그래밍을 깊이 연구하는 일은 컴푸터의 동작을 근본부터 이해하고 성능을 최대한 이끌어 내는 결과로 이어짐
1.1.1 컴퓨터 프로그램의 동작원리

  • 노이먼형 컴퓨터(현대 주류)
    • 실행 프로그램과 데이터를 모두 메모리에 두고 순차적으로 메모리에서 꺼내 실행하는 타입
      • 프로그램 카운터가 가리키는 메모리 영역에서 명령을 읽고,
      • 읽어들인 명령의 길이 만큼 프로그램 카운터를 갱신하고,
      • 명령을 따라 연산을 실행하는 순서로 처리를 진행한다.
  • 프로그램과 데이터형
    • 많은 프로그래밍 언어에서는 데이터를 '데이터 형(데이터 타입)'으로 구별해 다룬다.(C에서 char, int , float, double )
    • 구조체에 새로운 형을 정의하는 기능도 c의 중요한 특징
    • 데이어형을 잘 활용하면 효과적으로 프로그래밍을 할 수 있다.
  • 메모리상의 데이터
    • 비트 단위로 정밀하게 데이터를 다루는 비트 필드를 쓰려면 비트 단위로 데이터를 다루는 구체적인 메모리 이미지에 대한 이해가 필요하다.
  • 스택과 힙
    • malloc() 함수 등으로 동적으로 데이터를 확보라는 힙 영역이 있다.
1.1.2 프로그래밍 언어의 트랜드
  • 고급언어와 저급언어
    • 프로그래밍 언어는 고급언어, 저급언어로 분류된다.(고급,과 저급은 추상도가 높은 기술을 지향하는지 기계어에 가까운 기술을 지향하는지를 뜻한다.)
      • 노이먼형 컴퓨터에서 설명한 '명령'이라고 불렀던 프로그램의 단편은 보통 '기계어'라고 불린다.여기서 기계어는 cpu가 직접 해석하는 코드열을 말한다. 언어에 따라서는 가상머신이라는 에뮬레이터가 cpu의 사위층으로 배치되는 일도 있다. -> 저급언어
      • 고급언어 -> 알고리즘을 얼마나 추상적으로 기술할 수 있는지에 역점을 둔 프로그래밍 언어 
  • 인터프리터와 컴파일러
    • 우리가 이해할 수 있는 형태로 표현한 코드를 기계가 해석살 수 있는 형식으로 변환해하는것
      • 인터프리터 -> 인터프리터 방식 프로그램은 명시적인 코드 변환 프로세스를 필요로 하지 않으므로 손쉽게 이용할 수 잇다는 장점이 있지만, 순차적으로 변환하면서 처리하므로 ㅣㄹ행 시에 퍼포먼스를 살리기 어렵다.
      • 컴파일러 ->c는 컴파일러 형식의 프로그래밍언어이다. 컴파일러는 인간이 읽을 수 있는 형식의 소스 코드를 기계어 또는 바이트 코드로 변환하는 툴이다.
  • 스크립트 언어와 시스템 기술언어
  • 적재적소의 언어선택
    • 웹용으로는 c언어보다 더 적합한 언어가 많이 있다. 반면에 OS를 스크립트 언어로 짜면 제약이 많거나 퍼포먼스가 낮아 사용자 편의성이 아주 나빠질 것이다.
1.1.3 시스템 프로그래밍이란.
  • 오퍼레이팅 시스템
    • 다양한 컴퓨터에 탐재되는 소프트웨어의 기초를 담당하는 시스템이 OS이다.
  • OS가 제공하는 서비스 이용
    • 사용자들은 눈에 보이는 애플리케이션의 기능만을 이용하며 중요하다고 생각하지만 애플리케이션의 기능을 살펴보면 OS가 제공하는 서비스를 이것저것 끌어모아 구현하는 부분이 많다는 것을 알 수 있다.
  • 다른 언어에서 이용
    • c프로그래밍은 시스템을 구축하기에 좋은 언어다. 보통 시스템 구축을 위한 OS의 서비스는 시스템 도구를 비롯해 C용 인터페이스 API(application program Interface) 형식으로 제공되기 때문이다.
  • OS가 없는 시스템
    • 소규모 임베디드 시스템,8비트나 16비트 cpu가 활약하는 임베디드 시스템에는 os를 탑재할 여유가 없다.


1.2 c 학습의 장점

C프로그래밍의 장점과 단점
장점
  • 프로그램이 심플하고 빠르다
  • 응용 범위가 넓다.
  • 다른 언어의 기반이 된다.
  • 오랜 기술로 자산이 풍부하다.
단점
  • 최신 기술이 아니다.
  • 가독성이 결여되기 쉽다.
  • 리소스를 직접 관리한다.
  • 텍스트 처리에 약하다.

1.2.1 c 활용의 장점

간결함과 가능성
  • 단순함 - 고급언어인 c++ , java는 객체지향언어로 설계되어 제대로 사용하려면 객체지향 프로그래밍의 개념을 먼저 배워야한다. 
  • 다양한 프로그램을 구현할 가능성이 높다.
  • 하드웨어의 한계치까지 애플리케이션의 성능을 튜닝할 수 있다.
넓은 응용 범위
  • C언어의 영향력이 높아, 익혀두면 다른 언어를 학습사기가 수원하다.
원숙한 기술
  • c언어의 역사는 오래되어 이미 기술적으로 원숙해졌다. 물론 그렇다고 버그가 전혀 없다고 할 수는 없지만 상대적으로 신뢰성이 높은 언어라고 할 수 있다.
풍부한 자산
  • C로 구현된 다양한 소프트웨어 라이브러리가 인터넷에 공개되어 있고, 대부분 자유롭게 이용할 수 있다.

1.2.2 C의 담점

최신 프로그래밍 기술 미지원
  • 오래된 만큼 최신 프로그래밍 기술을 충분히 지원하진 못한다. 객체지향은 설계 개념이므로 객체지향 언어가 아니라고 해서 객체지향 설계를 할 수 없는 것은 아니다.
낮은 가독설 - 프로그램이 복잡해질수록 가독성은 떨어진다.
리소스관리
덱스트처리





댓글 없음:

댓글 쓰기