본문 바로가기

IT

[컴퓨터 프로그래밍] 프로그래밍?

 

 

프로그래밍?


1. 프로그래밍이란?

프로그래밍(programming)이란 프로그램을 만드는 행위이며, 프로그램(program)컴퓨터에게 어떤 작업을 수행하는데 필요한 명령어들을 순차적으로 작성한 것을 의미합니다. 그리고 이러한 프로그램을 작성하는 데 사용되는 언어프로그래밍 언어(programming language)라고 합니다.

 

그런데, 컴퓨터는 기계어(machine language)로 명령을 받아야 이해할 수 있습니다. 하지만 기계어는 사람이 프로그래밍하기에 어려운 작업입니다. 그렇기 때문에 사람이 이해하기 쉬운 언어로 프로그램을 작성한 후 기계어로 번역하는 과정을 거칠 수 있도록 도구룰 마련하였고, 이 도구가 컴파일러(compiler)입니다.

 

2. 프로그래밍 언어의 종류

프로그래밍 언어는 프로그래밍 방식에 따라 3가지(절차지향, 객체지향, 함수형)로 분류될 수 있습니다.

 

2.1. 절차적 언어(Procedural Programming Language)

절차적 언어프로그램을 일련의 절차나 단계로 나누어 작성하는 언어를 의미합니다. 반면, 위키에 따르면 절차의 개념보다는 "프로시저(Procudure)" 중심의 언어라는 의미에 가깝다고 합니다. 프로시저는 특정 작업을 수행하기 위해 일련의 명령문을 그룹화한 코드 블록을 의미하며, 프로시저는 다음과 같은 특징을 가지고 있습니다.

  • 재사용성(Reusability)
    그룹화된 코드 블록을 재사용하여 소스 코드의 중복을 줄여 프로그램을 간결하게 만들 수 있음
  • 모듈화(Modularization)
    프로그램을 논리적인 모듈로 분할하여 소스코드 가독성 향상, 병렬 개발 지원 등 프로그램의 유지보수를 원활하게 할 수 있음

(대표 언어: C, Pascal)

 

2.2. 객체지향 언어(Object-oriented Programming Language)

객체지향 언어프로그램을 객체 단위로 모델링하여 작성하는 언어를 의미합니다. 객체지향 언어는 작성한 코드의 재사용성, 확장성, 유지보수의 효율성 등을 높여주기 때문에 가장 보편적으로 사용되는 프로그래밍 언어 유형입니다. 객체지향 언어에서 주요하게 여기는 개념 및 특징은 다음과 같습니다.

  • 클래스(Class)
    객체를 생성하기 위한 변수(variable), 메서드(method), 생성자(constructor) 등을 포함한 일종의 틀
  • 객체(Object)
    클래스의 구조를 가지는 인스턴스로, 속성과 동작을 가지는 실체
  • 인스턴스(Instance)
    클래스로부터 생성된 객
  • 상속(Inheritance)
    다른 클래스로부터 변수, 메서드 등 속성을 그대로 전달받아 기존 클래스를 기반으로 파생할 수 있는 개념
  • 다형성(Polymorphism)
    오버로딩, 오버라이딩, 함수형 인터페이스를 사용하여 변수, 메서드 등이 다양한 자료형에 속하는 것이 허가되는 성질
  • 캡슐화(Encapsulation)
    객체의 속성과 행위를 하나로 묶고, 실제 구현 내용 일부를 감추어 은닉하여 데이터 접근을 제어하는 개

(대표 언어: C++, Java, Python)

 

2.3. 함수형 언어(Functional Programming Language)

함수형 언어는 일등 객체(first-class citizen), 순수 함수(pure function) 등 함수형 프로그래밍 원칙을 기반으로 작성하는 언어를 의미합니다. 함수형 프로그래밍은 병렬 처리, 동시성 등 멀티코어 및 분산 환경에서의 프로그래밍에 매우 유용합니다.

(대표 언어: Scala, Erlang)

 

3. 저수준 vs. 고수준

프로그래밍 언어는 사람과 기계 중 보다 가까운 정도에 따라 저수준 언어(low level language)고수준 언어(high level language)로 구분합니다. 저수준 언어는 대표적으로 어셈블리어(assembly language)가 있고, 그 외 일반적으로 들어본 프로그래밍 언어들은 고수준 언어들입니다.

 

4. 통합 개발 환경

통합 개발 환경(IDE, Integrated Development Environment)프로그램을 개발할 때 필요한 여러 기능을 종합적으로 제공하는 소프트웨어 도구입니다. 일반적으로 포함하는 구성은 다음과 같습니다.

  • 편집기(Editor)
    소스코드를 작성하기 위한 텍스트 편집기
  • 컴파일러(Compiler)
    소스코드를 기계어로 변환하는 역할
  • 인터프리터(Interpreter)
    소스코드를 실시간으로 실행하는 역할
  • 디버거(Debugger)
    소스코드 실행 중 발생하는 오류를 추적하여 원인을 찾을 수 있는 도구
  • 빌드 도구(Build Tool)
    소스코드를 실행가능한 프로그램 또는 배포용 패키지로 만들어주는 도구

연관 게시글


참조

'IT' 카테고리의 다른 글

[이산수학] 이산확률과 경우의 수  (0) 2024.03.25
[이산수학] 함수  (2) 2024.03.23
[이산수학] 관계  (0) 2024.03.16
[이산수학] 행렬  (0) 2024.03.12
[이산수학] 증명  (0) 2024.03.11