프로그래밍 언어의 요구사항과 설계 원칙

2021. 4. 20. 15:48 기타 정보/소프트웨어 공학

프로그래밍 언어의 요구사항

소프트웨어 개발 및 유지보수 측면에서 프로그래밍 언어는 어떤 요구사항을 만족해야 할까?

먼저 프로그래밍 언어는 프로그래머가 자신의 아이디어를 쉽게 표현할 수 있게 해야한다. 또한 작성된 프로그램은 쉽게 유지보수 할 수 있어야 하며, 컴퓨터에서 빠르게 실행될 수 있어야 한다.

 

(1) 표현 풍부성(expressiveness): 프로그래머의 아이디어를 쉽게 표현할 수 있다.
(2) 유지 보수성(maintainability): 작성된 프로그램은 쉽게 유지보수할 수 있다.
(3) 실행 가능성(executability): 작성된 프로그램이 빠르게 실행될 수 있다.

프로그래밍 언어의 설계 원칙

그리고 이러한 기능과 요구사항을 만족하기 위해 고려해야하는 설계 원칙 중 공통적으로 거론되는 것은 다음과 같다.

 

(1) 규칙성(regularity): 언어의 기능이 잘 조합될 수 있다.
(2) 추상화 지원(support of abstraction): 실세계의 대상을 간략히 추상화하여 나타낼 수 있다.
(3) 복잡도 제어(complexity control): 복잡한 대상 및 처리 방법을 제어하기 위해 복잡도를 제어할 수 있다.

 

규칙성

규칙성이란 언어의 기능이 얼마나 잘 조합될 수 있느냐 하는 문제로서 세부적으로는 프로그래밍 언어 평가기준 중 일반성(generality), 직교성(orhogonality), 일관성(uniformity)에 의해 지원된다.

일반성이란 연관된 기능이 더 일반적인 형태로 확장될 수 있는 특성이다. 예를 들어, C언어의 비교 연산자 두 정수를 비교하는데는 사용할 수 있지만 구조체를 비교하는데는 사용할 수 없다. 이는 일반성이 결여된 것으로 볼 수 있다.

 

추상화 지원

프로그래밍 언어는 실세계를 모형화하여 문제를 해결해야 하기 때문에 실세계의 대상을 간략히 추상화하여 나타낼 수 있는 기능을 제공해야 한다. 또한 추상화된 모형을 대상으로 어떤 연산을 수행할 수 있도록 해야 한다. 물론 연산도 추상화된 형태로 수행할 수 있어야 한다.

일반적으로 프로그래밍 언어에서는 데이터 추상화 기능과 제어 추상화 기능, 추상 데이터 타입을 정의할 수 있는 기능을 제공한다.

 

복잡도 제어

실세계의 문제를 해결하는 방법은 매우 복잡해지는 경우가 많다. 따라서 복잡한 대상 및 처리 방법을 제어하기 위해 복잡도를 제어할 수 있어야 한다. 일반적으로 프로그래밍 언어에서는 복잡도를 제어하기 위해 모듈, 패키지, 이름 공간 등을 통하여 캡슐화  모듈화 기능을 제공한다.

 

마지막으로 이러한 프로그래밍 언어의 설계 원칙과 요구사항간의 관계를 도식으로 표현하면 다음과 같다.

 

출처 : atoz-develop.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%96%B8%EC%96%B4%EC%9D%98-%EC%9A%94%EA%B5%AC%EC%82%AC%ED%95%AD%EA%B3%BC-%EC%84%A4%EA%B3%84-%EC%9B%90%EC%B9%99?category=814648