profile image

L o a d i n g . . .

반응형

학습개요

  • 프로그래밍 언어가 무엇인지
  • 프로그래밍 언어는 무엇으로 구성되어 있는지
  • 프로그래밍 언어는 어떤 기능을 하는지
  • 프로그래밍 언어는 어떻게 배워야 하는지
  • 프로그래밍 언어론은 왜 배워야 하는지

 

학습목표

  1. 프로그래밍 언어의 정의를 이해하고 자연어와 대비한 프로그래밍 언어의 특징을 설명할 수 있다.
  2. 프로그래밍 언어의 기능을 이해하며, 이 기능을 지원하기 위해 프로그래밍 언어는 무엇을 제공하고 있는지 설명할 수 있다.
  3. 프로그래밍 언어를 구성하고 있는 요소를 개략적으로 살펴보고, 이를 통해 프로그래밍 언어에 대한 감각을 체득한다.
  4. 자신에게 맞는 프로그래밍 언어를 선택하는 방법을 살펴보고, 프로그래밍 언어의 학습 방법을 체득한다.

 

학습내용

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

프로그래밍 언어 정의

  • 언어란 무엇인가?
    • 의사 전달 수단
    • 한 사람의 생각을 다른 사람에게 전달하는 데 사용
    • 자연어는 크게 말과 글, 두 가지 형태로 존재
  • 프로그래밍 언어란 무엇인가?
    • 프로그램 작성에 사용되는 언어 (프로그램: 컴퓨터가 수행할 명령어를 순서대로 나열해 둔 것)
    • 역시 의사전달 수단
    • 주로 사람의 생각을 기계에 전달하는 데 사용
    • 하지만 사람도 고려해야 한다! → 사람이 프로그램을 작성해서 기계에 전달하긴 하나, 다른 사람이 볼 수도 있기 때문에
  • ⇒ 프로그래밍 언어 - 컴퓨터가 수행할 수 있고 사람이 읽을 수 있는 형태로 계산을 나타내는 표기 체계

 

프로그래밍 언어의 특징

  자연어 프로그래밍 언어
형식 말과 글 주로 글
내용 모호, 함축 엄밀한 규칙, 정확한 의도
방향성 양방향 단방향 (사람→컴퓨터)
  • 형식 - GUI 등이 생겨서 그림으로써 표현하는 방법도 있음! 스크래치 같은 것
  • 엄밀한 규칙, 정확한 의도
    • 컴퓨터 같은 경우에는 명령을 받게 되면 규칙대로 작업을 수행한다.
    • 만약 엄밀하지 않다면? 어떤 일을 하다가 모호해지는 경우가 발생. 잘못된 결과 도출 가능성 있음!
  • 단방향
    • 사람 → 컴퓨터
    • 다른 사람이 보는 경우도 있기 때문에 무조건적이지는 않다.

 

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

  • 내 언어의 한계가 내 세상의 한계이다. - 루트비히 비트겐슈타인
  • 프로그래밍에 대한 사고 능력을 확장시켜 줌
  • 문제 해결자로서 현명하게 언어를 선택할 수 있도록 해 줌
  • 언어 사용자로서 언어를 자세히 배울 수 있도록 해 줌
  • 현명한 관리자, 현명한 설계자가 될 수 있도록 함

 

프로그래밍을 배워야 하는 이유

  • 모든 사람은 프로그래밍을 배워야 합니다. 프로그래밍은 우리에게 생각하는 방법을 가르쳐 주기 때문입니다 - 스티브 잡스
  • 체계적으로 생각하는 방법을 가르쳐 줌
  • 변화를 표현하는 방법을 가르쳐 줌

 

프로그래밍 언어의 기능

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

  • 작성력: 프로그래머의 의도를 나타낼 수 있도록 하는 기능
  • 가독성: 프로그램을 쉽게 해독할 수 있도록 하는 기능 (타인이 볼 때)
  • 실행 가능성: 컴퓨터에서 실행될 수 있도록 하는 기능

 

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

  • 추상화: 어떤 대상을 간략하게 추려 나타내는 방법 ㅇ(-(
    • 사물의 특징들을 뽑아서 프로그램으로 표현한다
  • 모듈화: 복잡한 대상을 나누어 구성할 수 있는 방법
    • 복잡한 문제를 한번에 작성하지 않고, 소문제로 만들어서 작성 → 하나로 합쳐서 큰 프로그램 작성

 

프로그래밍 언어의 특성

  • 기계적: 기계적으로 처리할 수 있어야 함 - 엄밀한 규칙에 따라 정의
  • 구조적: 복잡한 구조를 나타낼 수 있어야 함 - 자료 구조, 제어 구조
    • 자료구조- 데이터를 처리할 때 구조적으로 잘 처리하기 위해, 자료 자체를 구조화하여 처리
    • 제어 구조 - 말 그대로 제어. 몇 번 반복할 건지 ...
  • 가변적: 시대의 필요에 따라 바뀔 수 있음 - Python: 명령형 언어 → 객체지향 개념 탑재
    • 파이썬 - 명령형 언어로 시작했으나, 시대가 흐르면서 객체지향 개념까지 탑재

 

프로그래밍 언어 스펙트럼

  • 컴퓨터 구조에 따른 제약사항 → 언어
  • 프로그래머 → 언어
  • 언어가 컴퓨터에 친숙한지, 프로그래머에게 친숙한지
  • 저급 언어
    • 기계에 종속적인 언어
    • 기계어 어셈블리어
    • 거의 추상화가 되어 있지 않다
  • 고급 언어
    • 기계 독립적으로 정의되고 실행될 수 있는 언어
    • 같은 고급어라 하더라도 그 정도에 따라서 다시 나눌 수 있음
    • C, Java, Python 등

 

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

데이터

  • 자료를 프로그램이 처리할 수 있는 형태로 나타낸 것
  • 수, 문자, 문자열, 멀티미디어 등
  • 이 데이터를 기반으로 작업을 이어나가게 된다
  • 이진 데이터: 이진수의 나열로 이루어진 데이터
  • 텍스트 데이터: 문자열을 나타내는 데이터

 

연산

  • 데이터 처리 방법
  • 연산 적용 후 새로운 데이터를 결과로 얻음
  • 연산자: 특별한 연산을 수행하는 함수(+ - * == =...)
  • 변수: 연산 결과를 저장하는 이름
  • 연산 표현 구조 수식과 문장
  • 수식: 값을 나타내는 표현
  • 문장: 처리를 나타내는 표현

 

명령어

  • 특정 작업을 지시하는 단어
  • if while 등

 

연산 및 명령어

  • 대부분의 프로그래밍 언어는 다양한 연산자와 명령어를 통해 수식과 문장을 구성
  • 연산의 종류
    • 원시연산: 언어가 기본적으로 제공하고 있는 연산 (==, +...)
    • 사용자 정의 연산: 프로그래머가 추가로 정의한 연산 (함수)
    • 라이브러리: 사용자가 자주 사용할 만한 연산을 미리 정의해 둔 것 (원시연산에 일부 포함된다)

 

서브프로그램

  • 전체 프로그램을 이루는 작은 코드 블록에 이름을 붙인 것
  • 서브루틴이라고 부르기도 함
  • 서브프로그램의 분류
    • 함수: 연산 수행 결과 값을 반환하는 서브프로그램 (int add ~)
    • 프로시저: 결과값을 반환하지 않는 서브프로그램 (void ~~)

 

타입

  • 데이터 집합과 연산 집합을 합친 개념
  • 연산의 안전성 보장을 위해 필요
  • 자료형, 데이터형 ⇒ int
  • 타입 안전성? 함수 f의 타입이 f(x): A → B라면, 모든 aㅌA에 대해 f(a) ㅌ B여야 한다.
  • 누군가 프로그램을 작성했을 때, 그 각각의 함수 등의 연산이 타입 안전성을 지켜준다면 타입 안전한 프로그램이다.
  • 프로그래밍 언어의 분류
    • 강타입 언어: 타입 오류를 모두 검출하는 언어
    • 약타입 언어: 일부 타입 오류를 허용하는 언어
    • 무타입 언어: 타입 선언문도 없고, 어떤 대상의 타입이 계속 변경될 수 있는 언어
      • 타입이 없는 게 아니라, 타입 선언문이 없더라.

 

모듈

  • 독립적인 프로그램 구성 단위
  • 서브프로그램도 모듈의 일종
  • 내부와 외부를 구별하며, 독자적인 이름 공간을 차지한다.
  • 변수, 함수, 타입 등 프로그래밍 언어에서 제공하는 거의 모든 것을 포함하는 단위.

 

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

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

  • 프로그램 형태 + 수행 과정
  • 프로그램 형태
    • 작성한 프로그램 그 자체
    • 데이터
    • 연산
    • 구문론
  • 수행 과정
    • 실행 시 프로세스
    • 메모리 (메모리상에서의 어떤 변화가 있을까...)
    • 수행 흐름
    • 의미론

 

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

  • 좋은 프로그램을 많이 읽어야 한다.
  • 프로그램을 많이 작성해 봐야 한다.
  • 직접 실행해 보며 많이 생각해 봐야 한다.

 

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

  • 초보자
    • 자신이 조금이라도 아는 언어
    • 사용해 볼 수 있는 언어
    • 주위에서 정보를 얻을 수 있는 언어
    • 프로그램을 관리하기 쉬운 언어
  • 숙련자
    • 자신의 업무 분야에서 사용되는 언어
    • 자신이 아는 언어와 유사한 언어

 

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

  • 눈보다 손
  • 그림으로 생각
  • 점진적으로 변경

 

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

  • 새로운 프로그래밍 언어를 쉽게 습득하기 위해서
  • 내가 사용하는 언어를 더 잘 이해하기 위해서
  • 현명한 언어 설계자가 되기 위해서

 

학습정리

  1. 프로그램이란 컴퓨터가 수행할 명령어를 순서대로 나열해 둔 것이며, 프로그래밍 언어는 프로그램 작성에 사용되는 언어이다. 프로그래밍 언어는 컴퓨터가 수행할 수 있고 사람이 읽을 수 있는 형태로 계산을 나타내는 표기체계이다.
  2. 프로그래밍 언어는 말이 아닌 글 형태로 사용되고, 엄밀한 규칙에 따라 정의되며, 주로 기계에 명령을 전달하는 단방향 언어이다.
  3. 언어는 우리의 사고 능력과 밀접한 관련이 있으며 프로그래밍은 우리에게 체계적으로 생각하는 방법을 가르쳐 준다.
  4. 프로그래밍 언어의 기본적인 기능은 작성력과 가독성, 실행 가능성으로 요약할 수 있다.
  5. 프로그래밍 언어는 추상화, 모듈화를 지원한다.
  6. 프로그래밍 언어는 공통적으로 기계적, 구조적, 가변적이라는 특성을 지닌다.
  7. 프로그래밍 언어는 추상화 수준에 따라 저급언어부터 고급언어까지 다양한 스펙트럼으로 존재하는데, 고급언어란 기계에 독립적인 언어를 뜻한다.
  8. 프로그래밍 언어는 데이터, 연산, 명령어, 서브프로그램, 타입, 모듈 등으로 구성된다.
  9. 프로그래밍 언어는 구문론과 의미론을 통해 정의할 수 있다.
  10. 프로그래밍 언어를 선택할 때는 자신의 사전지식을 고려해야 하며 실제로 사용해 볼 수 있는 언어, 프로그램을 관리하기 쉬운 언어, 자신의 업무와 관련 있는 언어, 자신이 아는 언어와 유사한 언어를 선택하는 것이 바람직하다.
  11. 프로그래밍을 배우기 위해서는 ‘눈보다 손’으로 학습해야 하고, 그림을 통해 생각하면 더 편리하며, 간단한 프로그램부터 시작하여 복잡한 프로그램으로 점진적으로 변경하는 것이 좋다.
  12. 프로그래밍 언어론을 배우는 이유는 새로운 언어를 쉽게 배우기 위해서, 또 내가 사용하는 언어를 더 잘 이해하기 위해서, 나아가 궁극적으로 현명한 언어 설계자가 되기 위해서이다.

 

 

해당 포스트는 방송통신대학교의 '프로그래밍 언어론' 강의를 들으며 개인 공부 목적으로 메모하였습니다.

반응형
복사했습니다!