SECTION 014. 절차적 프로그래밍 언어

1. 절차적 프로그래밍 언어의 개요

  • 절차적 프로그래밍 언어는 일련의 처리 절차를 정해진 문법에 따라 순서대로 기술해 나가는 언어이다.
    – 절차적 프로그래밍 언어는 프로그램이 실행되는 절차를 중요시 한다.
    – 절차적 프로그래밍 언어는 데이터를 중심으로 프로시저를 구현하며, 프로그램 전체가 유기적으로 연결되어 있다.
    – 절차적 프로그래밍 언어는 자연어에 가까운 단어와 문장으로 구성된다.
    – 절차적 프로그래밍 언어는 과학 계산이나 하드웨어 제어에 주로 사용된다.

2. 절차적 프로그래밍 언어의 장단점

1) 컴퓨터의 처리 구조와 유사하여 실행 속도가 빠르다.
2) 같은 코드를 복사하지 않고 다른 위치에서 호출하여 사용할 수 있다.
3) 모듈 구성이 용이하며, 구조적인 프로그래밍이 가능하다.

4) 프로그램을 분석하기 어렵다.
5) 유지보수나 코드의 수정이 어렵다.

3. 절차적 프로그래밍 언어의 종류

언어 특징
C - 1972년 미국 벨 연구소의 데니스 리치에 의해 개발되었다.
- 시스템 소프트웨어를 개발하기 편리하여 시스템 프로그래밍 언어로 널리 사용된다.
- 자료의 주소를 조작할 수 있는 포인터를 제공한다.
- 고급 프로그래밍 언어이면서 저급 프로그램 언어의 특징을 모두 갖췄다.
- UNIX의 일부가 C언어로 구현되었다.
- 컴파일러 방식의 언어이다. (컴파일러 : 고급 언어로 작성된 프로그램을 기계어로 번역하는 프로그램)
- 이식성이 좋아 컴퓨터 기종에 관계없이 프로그램을 작성할 수 있다.
ALGOL - 수치 계산이나 논리 연산을 위한 과학 기술 계산용 언어이다.
- PASCAL과 C언어의 모체가 되었다.
COBOL - 사무 처리용 언어이다.
- 영어 문장 형식으로 구성되어 있어 이해와 사용이 쉽다.
- 4개의 DIVISION 으로 구성되어 있다.
FORTRAN - 과학 기술 계산용 언어이다.
- 수학과 공학 분야의 공식이나 수식과 같은 형태로 프로그래밍 할 수 있다.

SECTION 015. 객체지향 프로그래밍 언어

1. 객체지향 프로그래밍 언어의 개요

  • 객체지향 프로그래밍 언어는 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체로 만들어, 기계적인 부품들을 조립하여 제품을 만들듯이 소프트웨어를 개발할 때도 객체들을 조립해서 프로그램을 작성할 수 있도록 한 프로그래밍 기법이다.
    – 프로시저보다는 명령과 데이터로 구성된 객체를 중심으로 하는 프로그래밍 기법으로, 한 프로그램을 다른 프로그램에서 이용할 수 있도록 한다.

2. 객체지향 프로그래밍 언어의 장단점

1) 상속을 통한 재사용과 시스템의 확장이 용이하다.
2) 코드의 재활용성이 높다.
3) 자연적인 모델링에 의해 분석과 설계를 쉽고 효율적으로 할 수 있다.
4) 사용자와 개발자 사이의 이해를 쉽게 해준다.
5) 대형 프로그램의 작성이 용이하다.
6) 소프트웨어 개발 및 유지보수가 용이하다.

7) 프로그래밍 구현을 지원해주는 정형화된 분석 및 설계 방법이 없다.
8) 구현 시 처리 시간이 지연된다.

3. 객체지향 프로그래밍 언어의 종류

언어 종류
Java - 분산 네트워크 환경에 적용이 가능하며, 멀티스레드 기능을 제공하므로 여러 작업을 동시에 처리할 수 있다.
- 운영체제 및 하드웨어에 독립적이며, 이식성이 강하다.
- 캡슐화가 가능하고 재사용성이 높다.
C++ - C언어에 객체지향 개념을 적용한 언어이다.
- 모든 문제를 객체로 모델링하여 표현한다.
Smalltalk - 1세대 객체지향 프로그래밍 언어 중 하나로 순수한 객체지향 프로그래밍 언어이다.
- 최초로 GUI를 제공한 언어이다.

4. 객체지향 프로그래밍 언어의 구성 요소

  • 객체지향 프로그래밍 언어의 구성 요소에는 객체(Object), 클래스(Class), 메시지(Message)가 있다.

1) 객체(Object)

  • 데이터(속성)와 이를 처리하기 위한 연산(메소드)을 결합시킨 실체이다.
  • 데이터 구조와 그 위에서 수행되는 연산들을 가지고 있는 소프트웨어 모듈이다.
  • 속성(Attribute) : 한 클래스 내에 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의하는 것으로서 성질, 분류, 식별, 수량 또는 현재 상태 등을 표현한다.
  • 메소드(Method) : 객체가 메시지를 받아 실행해야 할 때 구체적인 연산을 정의하는 것으로, 객체의 상태를 참조하거나 변경하는 수단이 된다.

2) 클래스(Class)

  • 두 개 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현하는 요소이다. 즉, 공통된 특성과 행위를 갖는 객체의 집합이라고 할 수 있다.
  • 객체의 유형 또는 타입(Object type)을 의미한다.

3) 메시지(Message)

  • 객체들 간에 상호작용을 하는데 사용되는 수단으로 객체의 메소드(동작, 연산)를 일으키는 외부의 요구사항이다.
  • 메시지를 받은 객체는 대응하는 연산을 수행하여 예상된 결과를 반환하게 된다.

5. 객체지향 프로그래밍 언어의 특징

  • 객체지향 프로그래밍 언어의 특징에는 캡슐화, 정보 은닉, 추상화, 상속성, 다형성 등이 있다.

1) 캡슐화 (Encapsulation)

  • 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것을 의미한다.
  • 캡슐화된 객체의 세부 내용이 외부에 은폐(정보 은닉)되어, 변경이 발생할 때 오류의 파급 효과가 적다.
  • 캡슐화된 객체들은 재사용이 용이하다.

2) 정보 은닉 (Information Hiding)

  • 캡슐화에서 가장 중요한 개념으로, 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것이다.

  • 캡슐화와 정보 은닉의 장점
    – 유지보수의 용이성
    – 객체 이용의 용이성

3) 추상화 (Abstraction)

  • 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는 것, 즉 모델화 하는 것이다.
  • 데이터의 공통된 성질을 추출하여 슈퍼 클래스를 선정하는 개념이다.

  • 추상화의 종류
    – 과정 추상화 : 자세한 수행 과정을 정의하지 않고, 전반적인 흐름만 파악할 수 있게 설계하는 방법
    – 데이터 추상화 : 데이터의 세부적인 속성이나 용도를 정의하지 않고, 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법
    – 제어 추상화 : 이벤트 발생의 정확한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로 대체하는 방법

4) 상속성 (Inheritance)

  • 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스가 물려받는 것이다.
  • 상속성을 이용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 사용할 수 있다.

  • 상속성의 종류
    – 단일 상속 : 하나의 상위 클래스로부터 상속받는 것
    – 다중 상속 : 여러 개의 상위 클래스로부터 상속받는 것

5) 다형성 (Polymorphism)

  • 메시지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 각 객체(클래스)가 가지고 있는 고유한 방법(특성)으로 응답할 수 있는 능력을 의미한다.
  • 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 한다.

SECTION 016. 스크립트 언어

1. 스크립트 언어 (Script Language) 의 개요

  • 스크립트 언어는 HTML 문서 안에 직접 프로그래밍 언어를 삽입하여 사용하는 것으로, 기계어로 컴파일되지 않고 별도의 번역기가 소스를 분석하여 동작하게 하는 언어이다.
    – 게시판 입력, 상품 검색, 회원 가입 등과 같은 데이터베이스 처리 작업을 수행하기 위해 주로 사용한다.

  • 스크립트 언어는 클라이언트의 웹브라우저에서 해석되어 실행되는 클라이언트용 스크립트 언어와 서버에서 해석되어 실행된 후 결과만 클라이언트로 보내는 서버용 스크립트 언어가 있다.
    서버용 스크립트 언어 : ASP, JSP, PHP, 파이썬
    클라이언트용 스크립트 언어 : 자바 스크립트 (Java Script)

2. 스크립트 언어의 장단점

1) 컴파일 없이 바로 실행하므로 결과를 바로 확인할 수 있다.
2) 배우고 코딩하기 쉽다.
3) 개발 시간이 짧다.
4) 소스 코드를 쉽고 빠르게 수정할 수 있다.

5) 코드를 읽고 해석해야 하므로 실행 속도가 느리다.
6) 런타임 오류가 많이 발생한다.

3. 스크립트 언어의 종류

1) 자바 스크립트 (Java Script)

  • 넷스케이프(Netscape)의 브렌던 아이크(Brendan Eich)가 개발한 클라이언트용 스크립트 언어이다.
  • 웹페이지의 동작을 제어하며, 변수 선언이 필요 없다.
  • 서버에서 데이터를 전송할 때 아이디, 비밀번호, 수량 등의 입력 사항을 확인하기 위한 용도로 많이 사용된다.

2) ASP (Active Server Page)

  • 서버 측에서 동적으로 수행되는 페이지를 만들기 위한 언어로 마이크로 소프트 사에서 제작하였다.
  • Windows 계열에서만 수행 가능한 프로그래밍 언어이다.

3) JSP (Java Server Page)

  • Java로 만들어진 서버용 스크립트 언어로, 다양한 운영체제에서 사용이 가능하다.

4) PHP (Prefessional Hepertext Preprocessor)

  • 서버용 스크립트 언어로, Linux, Unix, Windows 운영체제에서 사용이 가능하다.
  • C, Java 등과 문법이 유사하므로 배우기 쉬워 웹 페이지 제작에 많이 사용된다.

5) 파이썬 (Python)

  • 객체지향 기능을 지원하는 대화형 인터프리터 언어로, 플랫폼에 독립적이고 문법이 간단하여 배우기 쉽다.
    – 인터프리터 언어 : 원시 프로그램을 줄 단위로 번역하여 바로 실행하는 언어로, 목적 프로그램을 생성하지 않고 즉시 실행결과를 출력한다.

SECTION 017. 선언형 언어

1. 선언형 언어

  • 선언형 언어는 명령형 언어와 반대되는 개념의 언어로, 명령형 언어가 문제를 해결하기 위한 방법을 기술한다면 선언형 언어는 프로그램이 수행해야 할 문제를 기술하는 언어이다.

  • 선언형 언어는 목표를 명시하고 알고리즘은 명시하지 않는다.
    – 대표적인 선언형 언어로 HTML이 있는데, HTML은 웹페이지를 구성할 때 제목, 글꼴 그림 등 웹페이지에 표시할 것들을 묘사하지만 화면에 어떤 방법으로 표시할지는 묘사하지 않는다.

  • 선언형 언어에는 함수형 언어와 논리형 언어가 있다.

1) 함수형 언어

  • 수학적 함수를 조합하여 문제를 해결하는 언어로, 알려진 값을 함수에 적용하는 것을 기반으로 한다.
  • 적용형 언어라고도 한다.
  • 재귀호출이 자주 이용된다.
  • 병렬 처리에 유리하다.
  • 종류 : LISP

2) 논리형 언어

  • 기호 논리학에 기반을 둔 언어로, 논리 문장을 이용하여 프로그램을 표현하고 계산을 수행한다.
  • 선언적 언어라고도 한다.
  • 반복문이나 선택문을 사용하지 않는다.
  • 비절차적 언어이다.
  • 종류 : PROLOG

참고) 명령형 언어

  • 명령형 언어는 순차적인 명령 수행을 기본으로 하는 언어로, 문제를 처리하기 위한 방법에 초점을 두고 코드를 작성한다.
  • 폰노이만 구조에 개념적인 기초를 두고 있다.
  • 명령형 언어는 알고리즘을 명시하고 목표는 명시하지 않는다.
  • 특정 구문의 연산을 이용하여 상태를 변경시키고 프로그램을 동작시킨다.
  • 개체의 동작과 상태를 중요시한다.
  • 명령형 언어에는 절차적 언어와 객체지향 언어가 있다.
  • 종류 : FORTRAN, COBOL, C, Java 등

2. 선언형 언어의 장단점

1) 가독성이나 재사용성이 좋다.
2) 작동 순서를 구체적으로 작성하지 않기 때문에 오류가 적다.
3) 프로그램 동작을 변경하지 않고도 관련 값을 대체할 수 있다.

3. 선언형 프로그래밍 언어의 종류

1) HTML

  • 인터넷의 표준 문서인 하이퍼텍스트 문서를 만들기 위해 사용하는 언어로, 특별한 데이터 타입이 없는 단순한 텍스트이므로 호환성이 좋고 사용이 편리하다.

2) LISP

  • 인공지능 분야에 사용되는 언어이다.
  • 기본 자료 구조가 연결 리스트 구조이며, 재귀(Recursion) 호출을 많이 사용한다.

3) PROLOG

  • 논리학을 기초로 한 고급 언어로, 인공 지능 분야에서의 논리적인 추론이나 리스트 처리 등에 주로 사용된다.

4) XML

  • 기존 HTML의 단점을 보완하여 웹에서 구조화된 폭넓고 다양한 문서들을 상호 교환할 수 있도록 설계된 언어이다.
  • HTML에 사용자가 새로운 태그(tag)를 정의할 수 있으며, 문서의 내용과 이를 표현하는 방식이 독립적이다.

5) Haskell

  • 함수형 프로그래밍 언어로 부작용(Side Effect)이 없다.
  • 코드가 간결하고 에러 발생 가능성이 낮다.