반응형

1. 프로그래밍 언어란 무엇인가?

1.1.1 프로그래밍 언어 정의

언어란?

언어는 의사 전달 도구, 다른 사람에게 자신의 감정이나 뜻을 전하고 싶을 때 우리는 언어를 사용하여 말을 하고 글을 쓴다.

 

프로그래밍 언어란?

프로그램 작성에 사용되는 언어이다.

 

프로그램이란?

컴퓨터가 수행할 명령어를 순서대로 나열해 둔 것을 뜻한다.

 

자연어란?

프로그램 언어와 대비하여 사용하는 우리말이나 영어 등을 일컫는다.

 

계산이란?

주어진 입력으로부터 원하는 답을 찾기 위해 수행해야 하는 명확한 절차를 뜻한다.

프로그래밍 언어는 컴퓨터가 수행할 수 있고 사람이 읽을 수 있는 형태로 계싼을 나타내는 표기 체계이다.

1.1.2 프로그래밍 언어의 특징

  1. 프로그래밍 언어는 말이 아닌 글 형태로 사용된다.
  2. 프로그래밍 언어는 엄밀한 규칙을 따르고 있다.
  3. 프로그래밍 언어는 기계에 명령을 전달하는 단방향성을 띠고 있다.

특징 1의 예외로 시각적 언어인 MIT의 스크래치나, 내셔널 인스트루먼트의 랩뷰등을 들수 있다.

특징 3의 예외로 프로그램을 읽기 쉬운 특성 가독성을 고려하면 프로그래밍 언어는 양방향의 특성도 있다.

 

1.1.3 프로그래밍 언어를 배워야 하는 이유

프로그래밍이 체계적으로 생각하는 방법을 가르쳐 준다.


1.2 프로그래밍 언어의 기능

1.2.1 프로그래밍 언어의 기본 기능

  1. 작성력 : 프로그래머의 의도를 나타낼 수 있게 하는 기능
  2. 가독성 : 프로그램을 쉽게 해독할 수 있게 하는 기능
  3. 실행 가능성 : 컴퓨터에서 실행될 수 있게 하는 기능
char *loop(char *b, char *a) {
    char *s = b;
    while ((*b++ = *a++));
    return s;
}

[프로그램 loop.c]

char *strcpy(char dst[], const char src[]) {
    int i;
    for (i = 0; src[i] != '\0'; i++) {
        dst[i] = src[i];
    }
    dst[i] = '\0';
    return dst;
}

[프로그램 strcpy.c]

 

프로그램 strcpy.c는 loop.c의 가독성을 높인 버전이다.

1.2.2 프로그래밍 언어의 부가 기능

  1. 추상화 - 어떤 대상을 간략하게 추려 나타내는 방법
  2. 모듈화 - 복잡한 대상을 나누어 구성할 수 있는 방법

1.2.3 프로그래밍 언어의 특성

  1. 기계적 - 프로그램은 기계적으로 처리할 수 있어야 한다.
  2. 구조적 - 프로그램은 복잡한 구조를 나타낼 수 있어야 한다.
  3. 가변적 - 프로그래밍 언어는 시대의 필요에 따라 바뀔 수 있다.

1.2.4 프로그래밍 언어의 스펙트럼

추상화 수준은 고급언어와 저급언어를 구분짓는 잣대이다.


1.3 프로그래밍 언어의 구성 요소

1.3.1 데이터

데이터 - 어떤 자료를 프로그램이 처리할 수 있는 형태로 나타낸 것이다.

  • 이진 데이터 - 이진수의 나열로 이루어진 데이터
  • 텍스트 데이터 - 문자열을 나타내는 데이터
코드 - 문자와 이진 표현 사이의 대응관계

 

ASCII - 특수기호, 구두점, 숫자, 영어 대소문자를 나타내기 위한 코드 (영문만 나타낼 수 있는 한계점)

유니코드 - ASCII 코드의 한계를 극복하기 위한 코드 (문자집합과 인코딩의 조합으로 코드를 나타낸다.)

 

음성 및 영상 인코딩한 데이터를 해석하는 프로그램을 코덱이라고 한다.

1.3.2 연산

  • 연산 - 데이터를 처리하는 방법
  • 연산자 - 특별한 연산을 수행하는 함수
  • 변수 - 연산 결과를 저장하는 이름
  • 이름 & 식별자 - 변수 중 값이 바뀔 수 없는 상수
  • 대입 연산 - 값을 지정하기 위해 값을 저장하는 연산
det = b * b - 4 * a * c;

대입 연산자의 우측 값을 구하여 좌측 변수에 대입한다는 뜻이다. (=의 수학적 의미와는 다르다.)

  1. 수식 - 값을 나타내는 표현
  2. 문장 - 처리를 나타내는 표현

1.3.3 명령어

  • 명령어 - if 나 while 처럼 특정 작업을 지시하는 단어를 의미한다.
  • 사용자정의연산 - 프로그래머가 추가로 연산을 정의하여 사용 할 수 있다.
  • 원시연산 - 프로그래밍 언어가 기본적으로 제공하고 있는 연산
  • 라이브러리 - 원시연산에 포함되지 않지만, 사용자가 자주 사용할 만한 연산을 미리 정의 해 둔 것
  • 표준 라이브러리 - 프로그래밍 언어에서 기본적으로 제공하는 라이브러리

1.3.4 서브프로그램

서브프로그램 - 전체 프로그램을 이루는 작은 코드 블록에 이름을 붙인 것(프로그램 구조화 장점)

  • 함수 - 연산 수행 결과 값을 반환하는 서브프로그램
  • 프로시저 - 결과 값을 반환하지 않는 서브프로그램

1.3.5 타입

타입 - 데이터 집합과 연산 집합을 합친 개념

  1. 강타입 언어 - 타입 오류를 모두 검출하는 언어
  2. 약타입 언어 - 타입 오류를 검출하지만 일부 타입 오류를 허용하는 언어
  3. 무타입 언어 - 타입 선언문도 없고 어떤 대상의 타입이 계속 변경 될 수 있는 언어

1.3.6 모듈

모듈 - 독립적인 프로그램 구성 단위

모듈은 컴파일 단위에 해당하거나 컴파일 단위의 상위 단위에 해당한다.

스텁
인터페이스에 구현하는 서브프로그램이 완성되지 않은 경우에 간단한 임시 코드(dummy code)로 구현을 대신하는 경우에 이 임시코드를 스텁이라고 한다.

1.4 프로그래밍 언어의 학습 방법

1.4.1 프로그래밍 언어의 두 가지 측면

구문론 - 프로그래밍 언어가 일차적으로 규정하고 있는 프로그램 형태에 관한 이론

의미론 - 제대로 작성된 프로그램에 대한 수행 의미를 정의 하고 있고 이에 관한 이론

프로세스 - 수행 중인 프로그램

1.4.2 어떻게 프로그래밍 언어를 배워야 하나

프로그래밍 언어를 배우기 위해서는 프로그램을 많이 읽고, 많이 작성해 보고, 많이 생각하는 것이 중요하다.

1.4.3 프로그래밍 언어의 선택 방법

  • 자신이 조금이라도 아는 프로그래밍 언어를 선택해야 한다.
  • 사용해 볼 수 있는 프로그래밍 언어를 선택해야 한다.
  • 주위에서 정보를 얻을 수 있는 프로그래밍 언어를 선택해야 한다.
  • 프로그램을 관리하기 쉬운 언어여야 한다.

1.4.4 프로그래밍 언어의 학습 요령

  • 눈보다 손
  • 그림으로 생각
  • 점진적 변경
프로토타입 작성 시 주의 할 점
처음 작성한 프로토타입은 버릴 것을 전제로 작성해야 한다. 문제를 이해하기 위해 프로그램을 활용하는 것일 뿐이지 이를 프로그램의 모태로 삼는 것을 전제하는 것은 아니다.

1.4.5 왜 프로그래밍 언어론을 배워야 하나?

  • 새로운 프로그래밍 언어를 쉽게 습득하기 위해서
  • 내가 사용하는 언어를 더 잘 이해하기 위해서
  • 새로운 프로그래밍 언어를 설계하기 위해서
#include <stdio.h>

int main() {
    printf("%d students.\n",
           printf("Good ") + printf("morning "));
    return 0;
}

[예제 코드 - 1]

 

실행 결과

Good morning 12 students.
#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    printf("%d students.\n",
           add(printf("Good "), printf("morning ")));
    return 0;
}

[예제코드 - 2]

 

실행 결과

Good morning 13 students.
반응형

+ Recent posts