디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

Ada 프로그래밍: 1. Ada 언어 소개

나르시갤로그로 이동합니다. 2025.08.11 00:20:31
조회 69 추천 0 댓글 0

1. Ada 언어 소개

Ada 프로그래밍 언어는 소프트웨어 공학의 중요한 발전입니다. 이 언어는 학술적 실험이나 작은 언어의 점진적인 진화에서 비롯된 것이 아니라, 정의된 문제들을 해결하기 위한 의도적인 공학적 노력의 결과물이었습니다. 이러한 기원을 이해하는 것은 Ada의 설계를 이해하는 데 근본적입니다. 왜냐하면 언어의 거의 모든 기능이 신뢰성 있고, 유지보수 가능하며, 효율적인 소프트웨어를 생산하는 것을 목표로 하는 공식적인 요구사항으로 거슬러 올라가기 때문입니다. 이 학습서는 Ada의 기본 원리부터 고급 기능까지 탐구하며, 고신뢰성 시스템에서의 지속적인 사용을 보여줍니다.

1.1 역사적 배경과 동기: 소프트웨어 위기1

1970년대 초, 미국 국방부(DoD)는 소프트웨어 위기로 알려진 문제에 직면했습니다. 한 비용 연구에 따르면, 국방부는 매년 수십억 달러를 소프트웨어에 지출하고 있었으며, 그 상당 부분이 항공기, 미사일, 통신 장비와 같이 컴퓨터가 더 큰 기계의 필수적인 부분인 임베디드 컴퓨터 시스템에 사용되었습니다. 이 비용의 주된 원인은 사용되는 프로그래밍 언어의 수가 엄청나게 많다는 것이었습니다. 다양한 프로젝트에서 450개가 넘는 언어와 방언이 사용되었으며, 그중 다수는 독점적이거나, 구식이거나, 하드웨어에 종속적이었습니다.

이러한 언어의 확산은 중대한 결과를 초래했습니다. 소프트웨어는 거의 재사용할 수 없었고, 코드를 새로운 하드웨어로 이식할 수 없었으며, 소프트웨어 시스템의 수명 주기 비용의 대부분을 차지하는 유지보수는 어렵고 비용이 많이 들었습니다. 이 상황은 단순히 비효율성의 문제가 아니라 전략적인 문제였습니다.

이에 대응하여 국방부는 1975년에 실시간 임베디드 시스템에 적합한 단일의 공통 고급 프로그래밍 언어를 확립하기 위한 프로그램을 시작했습니다. 이를 위해 고급 언어 워킹 그룹(High Order Language Working Group, HOLWG)을 결성했습니다. HOLWG의 첫 번째 과제는 그러한 언어에 대한 요구사항을 정의하는 것이었습니다. 이 과정은 군 부서, 산업 기관, 대학, 그리고 특히 NATO 국가들과의 국제 파트너로부터 광범위한 검토를 포함하는 개방적이고 협력적인 방식으로 진행되었습니다.

요구사항은 점차 강도가 높아지는 재료의 이름을 딴 일련의 정제된 문서로 공식화되었습니다: Strawman, Woodenman, Tinman, Ironman, 그리고 마지막으로 1978년의 최종본인 Steelman 문서입니다. Steelman 요구사항은 당시로서는 진보적인 기능들을 포함하여 포괄적이었습니다. 주요 요구사항에는 신뢰성, 유지보수성 지원, 임베디드 애플리케이션을 위한 효율성, 견고한 예외 처리 기능, 컴파일 시간 및 실행 시간 검사, 그리고 병렬 처리(동시성)를 위한 내장 지원이 포함되었습니다.

기존 언어 중 어느 것도 이러한 요구사항을 만족시킬 수 없다고 결론 내린 후, 국방부는 국제적인 설계 경쟁을 시작했습니다. 공정성을 보장하기 위해, 언어 제안서를 개발하기 위해 선택된 네 개의 계약 팀은 색깔로만 식별되었습니다:

  • Green: CII-Honeywell-Bull (Jean Ichbiah 주도)
  • Red: Intermetrics (Benjamin Brosgol 주도)
  • Blue: SofTech (John Goodenough 주도)
  • Yellow: SRI International (Jay Spitzen 주도)

대중의 면밀한 검토와 국제 전문가 팀의 평가를 거쳐, Green과 Red 설계안이 최종 정제 단계 대상으로 선정되었습니다. 1979년 5월, 프랑스 컴퓨터 과학자 Jean Ichbiah의 주도하에 CII-Honeywell-Bull 팀이 설계한 Green 제안서가 최종 승자로 선택되었습니다.

새로운 언어는 찰스 배비지와 함께 작업했으며 세계 최초의 컴퓨터 프로그래머로 여겨지는 수학자, Augusta Ada King-Noel, Countess of Lovelace (1815-1852)를 기리기 위해 Ada로 명명되었습니다. 최초의 공식 언어 참조 매뉴얼은 1980년에 군사 표준인 MIL-STD-1815로 발표되었으며, 이 번호는 에이다 러브레이스의 출생 연도를 기념하여 선택되었습니다. 이는 광범위하고 자금이 풍부했던 언어 설계 노력의 결과였습니다.

국방부의 접근 방식은 지속적인 영향을 미쳤습니다. Ada의 모든 주요 기능이 Steelman 보고서의 특정하고 문서화된 요구사항으로 거슬러 올라갈 수 있다는 사실은 의도적인 시스템 엔지니어링 과정을 보여줍니다. 이는 더 작은 프로젝트에서 발전한 많은 언어들과 대조됩니다. 강력한 형식 지정(strong typing), 패키지, 태스크와 같은 기능들은 임의의 추가물이 아니라, 프로젝트 시작 시에 식별된 신뢰성, 유지보수성, 동시성 문제에 대한 공학적 해결책입니다.

또 다른 중요한 역사적 요소는 Ada 의무화(mandate)였습니다. 1987년 국방부에 의해 발표된 이 지침은 Ada가 새로운 국방 컴퓨터 시스템, 특히 지휘 통제 및 무기 시스템과 같은 중요한 영역에서 단일의 공통 언어가 되어야 한다고 규정했습니다. 이 의무화는 나중에 1997년에 철회되었습니다. 이 철회는 Ada의 기술적 능력에 대한 평가가 아니라 시장 현실을 인정한 것이었습니다. 1990년대 후반까지 상용 소프트웨어 세계는 C++와 같은 다른 언어에 투자하여 더 큰 도구 생태계와 더 넓은 숙련된 프로그래머 풀을 형성했습니다. 국방부의 정책은 표준적이고 비독점적인 언어 사용을 요구하는 것으로 바뀌었으며, 이 범주에는 여전히 Ada가 포함되지만 더 이상 Ada에만 국한되지는 않습니다. 이 역사는 Ada가 의도된 영역(국방, 항공 우주 및 기타 고무결성 부문)에 존재하는 이유를 설명하는 동시에, 더 넓은 상업 시장에서 틈새 언어로 인식되는 이유도 설명해 줍니다.

1.2 설계 철학과 핵심 원칙

Ada의 설계는 의도적이고 문서화된 목표 집합에 기반을 두고 있습니다. Ada 2022 참조 매뉴얼에 따르면, 이 언어는 원래 세 가지 주요 관심사, 즉 프로그램 신뢰성과 유지보수, 인간 활동으로서의 프로그래밍, 그리고 효율성을 염두에 두고 설계되었습니다. Steelman 요구사항에서 직접 파생된 이러한 원칙들은 언어의 모든 측면에 스며들어 있습니다.

프로그램 신뢰성과 유지보수

이는 긴 운영 수명을 가진 소프트웨어 시스템의 필요성에서 비롯된 Ada 설계의 가장 중요한 원칙입니다. 이를 해결하기 위해 언어는 작성의 용이성보다 프로그램 가독성을 강조합니다. 구문은 명확성을 위해 설계되었으며, 오류를 유발하기 쉬운 표기법을 피하고 모호함을 방지하기 위해 영어와 유사한 키워드(procedure, begin, end if)를 사용합니다. 이러한 구문적 특성은 의도적인 것으로, 코드를 더 자가-문서화하고 미래의 유지보수 담당자가 잘못 해석할 가능성을 줄여줍니다.

신뢰성을 위한 주요 메커니즘은 Ada의 강력한 정적 형식 시스템(static type system)입니다. 컴파일러는 연산이 관련된 형식의 속성과 호환되는지 강제하여, 실행 시간에 앞서 다양한 오류를 방지합니다. 형식 시스템은 이름 동등성(name equivalence) 원칙에 기반을 두며, 여기서 독립적으로 선언된 두 형식은 구조가 동일하더라도 서로 구별되고 호환되지 않습니다. 이는 개념적으로 다른 양들이 우연히 섞이는 것을 방지합니다. Ada는 또한 기본 형식의 제약된, 호환 가능한 버전인 서브타입(subtype)을 제공하여, 실행 시간 검사를 받는 안전한 할당을 가능하게 합니다. 이 이중 메커니즘은 프로그래머에게 데이터 모델링에 대한 정밀한 제어를 제공합니다. 더욱이, 이 언어는 배열 경계 위반 및 널 포인터 접근과 같은 일반적인 오류에 대한 실행 시간 검사를 의무화하여, 버퍼 오버런과 같은 취약점 범주를 효과적으로 제거합니다.

유지보수성의 핵심 측면은 독립적으로 생산된 소프트웨어 구성 요소로부터 프로그램을 조립하는 능력입니다. Ada는 모듈화 기능을 통해 이를 직접 지원합니다. 언어는 단일 단위 내에서와 동일한 수준의 검사를 단위 간에 제공하는 방식으로 프로그램 단위(패키지, 서브프로그램)의 개별 컴파일을 지원합니다. 관련된 엔티티를 그룹화하기 위한 패키지, 정보 은닉을 위한 private 형식, 재사용 가능한 템플릿 생성을 위한 generic 단위와 같은 개념이 이 설계 철학의 중심입니다.

인간 활동으로서의 프로그래밍

Ada의 설계는 또한 인간 프로그래머에 대한 초점에 의해 인도되었습니다. 언어는 일관되고 체계적인 방식으로 통합된 비교적 적은 수의 기본 개념 위에 구축되었습니다. 이 접근 방식은 복잡성을 피하고 사용자에게 직관적이도록 의도된 언어 구조를 제공합니다. 목표는 개발자의 인지 부하를 줄여 오류 가능성을 최소화하는 것입니다. 인간 요소에 대한 이러한 초점은 가독성 원칙과 관련이 있습니다. 명확하고 일관된 언어는 프로그램 이해와 유지보수를 용이하게 합니다.

효율성

안전성과 고수준 추상화에 중점을 둠에도 불구하고, Ada는 효율성이 주요 요구사항인 성능에 민감한 임베디드 및 실시간 시스템을 위해 설계되었습니다. 각 언어 구조는 복잡한 컴파일러나 저장 공간 또는 실행 시간의 비효율적인 사용을 피하기 위해 구현 효율성에 대해 평가되었습니다. 언어 기능은 사용되지 않는 경우 제로 오버헤드 구현을 갖도록 설계되었습니다. 예를 들어, 객체 지향 기능을 사용하지 않는 애플리케이션은 언어에 해당 기능이 존재함으로 인한 실행 시간 페널티를 받지 않습니다. 컴파일러는 상당한 최적화를 수행할 수 있으며, 성능이 중요한 검증된 코드 섹션에서는 실행 시간 검사를 비활성화할 수 있지만, 이는 명시적인 프로그래머 제어 하에 이루어집니다. 현대 하드웨어의 요구를 충족시키기 위해, 언어는 멀티코어 아키텍처에서 사용하기 위한 병렬 구조를 포함하도록 발전했습니다.

1.3 표준의 진화

Ada는 창안 이래 여러 차례의 주요 개정을 거쳤으며, 각 개정은 이전 버전과의 상위 호환성을 유지하도록 신중하게 관리되었습니다. 이 진화는 이질적인 추가의 연속이 아니라, 새로운 기술적 도전에 부응하기 위해 언어의 핵심 원칙을 강화하는 의도적인 과정이었습니다.

  • Ada 83: 이것은 최초의 ANSI 표준(MIL-STD-1815A)이었습니다. 모듈성을 위한 패키지, 재사용 가능한 템플릿을 위한 제네릭, 동시성을 위한 태스크, 강력한 형식 지정, 예외 처리 등 언어의 기본 기능을 확립했습니다.

  • Ada 95: Intermetrics의 S. Tucker Taft가 주도한 이 개정은 Ada를 최초의 국제 표준화된(ISO) 객체 지향 언어로 만든 중요한 향상이었습니다. 상속과 다형성을 위한 tagged 형식, 더 유연하고 계층적인 시스템 구조화를 위한 자식 라이브러리 단위, 그리고 동시성 프로그램에서 공유 데이터에 대한 접근을 조정하기 위한 더 안전하고 효율적인 메커니즘인 protected 객체를 도입했습니다. 이러한 기능들은 매우 크고 복잡한 시스템의 설계와 구현을 개선하기 위해 추가되었습니다.

  • Ada 2005: 이 개정은 상호운용성을 개선하고 고무결성 실시간 시스템에 대한 지원을 강화하는 데 중점을 두었습니다. 다중 상속의 한 형태를 제공하는 Java와 유사한 인터페이스를 도입했으며, 패키지 명세 간의 상호 의존성을 허용하여 Java와 같은 언어와의 인터페이스를 더 쉽게 만들었습니다. 결정적으로, 공식적으로 분석할 수 있을 만큼 간단한 Ada의 동시성 기능의 하위 집합인 Ravenscar Profile을 표준화하여, 안전이 중요한 실시간 시스템의 인증을 더 실용적으로 만들었습니다.

  • Ada 2012: 이것은 또 다른 주요 진전이었으며, 특히 계약에 의한 설계(Design by Contract, DbC)를 언어 표준에 직접 통합한 점이 가장 주목할 만합니다. 이제 프로그래머는 전제조건, 후조건, 형식 불변식을 소스 코드의 일부로 지정할 수 있습니다. 이러한 계약은 실행 가능한 문서 역할을 하며 실행 시간에 검사될 수 있어, 언어 자체에 증명 가능성 원칙을 공식화합니다. Ada 2012는 또한 베리어(barrier) 및 멀티프로세서 선호도(affinity)와 같은 멀티코어 프로세서에서의 병렬 프로그래밍을 지원하는 새로운 기능을 도입하여, Ada의 강력한 동시성 모델을 현대 하드웨어 아키텍처에 적용했습니다.

  • Ada 2022: 표준의 가장 최근 버전은 이러한 개선의 길을 계속 이어가며, 계약, 표현식, 표준 라이브러리에 대한 추가적인 향상을 더하는 동시에 언어의 안정성과 상위 호환성을 유지합니다.

Ada의 진화는 그 설계 철학을 명확하게 반영합니다. 각 개정은 Ada 95에서 더 나은 대규모 설계를 위한 객체 지향의 도입에서부터 Ada 2012에서 검증 가능한 정확성을 위한 계약의 공식화에 이르기까지, 신뢰성 있고 안전하며 유지보수 가능한 시스템을 구축하는 언어의 능력을 강화해 왔습니다.


  1. Whitaker, William A. Ada - The Project, The DoD High Order Language Working Group. ACM SIGPLAN Notices, vol. 28, no. 3, 1993, http://archive.adaic.com/pol-hist/history/holwg-93/holwg-93.htm 

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 시구, 시축 했다가 이미지가 더 나빠진 스타는? 운영자 25/08/11 - -
AD 가전디지털, 휴대폰 액세서리 SALE 운영자 25/08/08 - -
2880355 아 존나 의욕이 없다 [4] ㅇㅇ(211.210) 08.11 61 0
2880354 애리조나 텍사스 ♥냥덩이♥갤로그로 이동합니다. 08.11 35 0
2880353 100400gm 어린이노무현갤로그로 이동합니다. 08.11 22 0
2880352 그래도 국민연금은 꼬박꼬박 내라..ㅇㅅㅇ [3] 헤르 미온느갤로그로 이동합니다. 08.11 61 0
2880351 예스24 또안드가짐 ㅋㅋ [2] 밀우갤로그로 이동합니다. 08.11 73 0
2880350 러스트 일자리가 없는건 니 수준이 그정도라 그런 것이니라 [1] 프갤러(218.154) 08.11 45 0
2880347 은행문열어!!!!! [8] 개멍청한유라갤로그로 이동합니다. 08.11 74 0
2880345 근데 토스는 이전회사 네임벨류로 연봉 제시한다는데 [1] 밀우갤로그로 이동합니다. 08.11 52 0
2880344 노을 ㅇㅅㅇ [2] 헤르 미온느갤로그로 이동합니다. 08.11 35 0
2880341 아 가방안들고 옴 [2] 밀우갤로그로 이동합니다. 08.11 31 0
2880338 일본 취업들에 환상이 많네 [4] 루도그담당(58.239) 08.11 74 0
2880337 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 08.11 21 0
2880335 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 08.11 24 0
2880331 Ada 러스트 할 필요 없는 이유. 프갤러(59.16) 08.11 30 0
2880330 일본 기업들보면 좆소여도 성과급은 거의무조건주던데 [5] ㅇㅇ(223.38) 08.11 62 0
2880328 다들 화나있음 발명도둑잡기갤로그로 이동합니다. 08.11 25 0
2880323 루비가 ada하는 이유 프갤러(121.139) 08.11 42 1
2880322 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 08.11 31 0
2880315 단독) 러스트 빠돌이들이 Ada 언급하지 않는 이유 나르시갤로그로 이동합니다. 08.11 38 0
2880311 러스트 빠돌이들이 제일 싫어하는 글을 소개합니다 [1] 나르시갤로그로 이동합니다. 08.11 46 0
2880309 그래두 사람을 Ada 프로그래밍 글 많이들 봤네 ㅎㅎ 나르시갤로그로 이동합니다. 08.11 28 0
2880308 크롬에 한글 입력 버그 생겼네 ㅎㅎ [3] 나르시갤로그로 이동합니다. 08.11 50 0
2880307 Ada 반복문 글 검토하고자 재작성했더니 더 모르는거 더 나오네 ㅎㅎ 나르시갤로그로 이동합니다. 08.11 17 0
2880304 it 프리랜서 도전해보고싶은데 어디서부터 시작함? [1] 프갤러(223.38) 08.11 56 0
2880303 내가 쓴 Ada 프로그래밍 공부 중이다. 4.2 반복문 업뎃 중이다. 나르시갤로그로 이동합니다. 08.11 34 0
2880300 여러 disaggregation 전략을 보는중이에여 PyTorch갤로그로 이동합니다. 08.11 54 0
2880298 요새 폭탄테러가 많은 이유? 프갤러(211.234) 08.11 35 0
2880294 깃헙 코파일럿 같은거 개위험한것 같은데 헬마스터갤로그로 이동합니다. 08.11 59 0
2880293 Ada 프로그래밍: 부록: Clair 코딩 스타일 가이드 나르시갤로그로 이동합니다. 08.11 35 0
2880292 Ada 프로그래밍: 10. SPARK 소개 나르시갤로그로 이동합니다. 08.11 36 0
2880291 Ada 프로그래밍: 9. 계약에 의한 설계(DbC) 나르시갤로그로 이동합니다. 08.11 32 0
2880290 Ada 프로그래밍: 8. 동시성 및 실시간 프로그래밍 나르시갤로그로 이동합니다. 08.11 32 0
2880289 Ada 프로그래밍: 7. 외부 시스템과의 연동 나르시갤로그로 이동합니다. 08.11 36 0
2880288 Ada 프로그래밍: 6. 예외 처리 나르시갤로그로 이동합니다. 08.11 33 0
2880287 Ada 프로그래밍: 5. 서브프로그램과 패키지를 이용한 구조화 나르시갤로그로 이동합니다. 08.11 33 0
2880286 Ada 프로그래밍: 4. 제어 흐름과 문장 나르시갤로그로 이동합니다. 08.11 37 0
2880285 Ada 프로그래밍: 3. Ada 형식 시스템 나르시갤로그로 이동합니다. 08.11 38 0
2880284 Ada 프로그래밍: 2. 개발 환경과 첫걸음 나르시갤로그로 이동합니다. 08.11 52 0
Ada 프로그래밍: 1. Ada 언어 소개 나르시갤로그로 이동합니다. 08.11 69 0
2880282 Ada 프로그래밍: 머리말 나르시갤로그로 이동합니다. 08.11 41 0
2880281 오늘의 나는 분명 내일의 나보다 나은 사람이겠지 [1] 공기역학갤로그로 이동합니다. 08.11 48 0
2880280 마갤쪽 관련은 아예 정보 자체의 필터링이 안돼 그게 문제임 [2] ㅆㅇㅆ(124.216) 08.11 46 0
2880279 러스트 빠들이 제일 싫어하는 Ada(에이다) 언어 연재 들어갑니다. ㅋㅋ 나르시갤로그로 이동합니다. 08.11 24 0
2880278 아니 원래 정갤은 오래되면 다 병신갤됨;; [4] 밀우갤로그로 이동합니다. 08.11 60 0
2880276 마갤은 너무 에코 챔버라 그냥 정갤이 편함 ㅆㅇㅆ(124.216) 08.11 25 0
2880275 개발 갤러리가 너무 많다 [4] 노력갤로그로 이동합니다. 08.10 95 0
2880274 이번에 외주 받은거 게이트웨이 패턴으로 코드 짜고 있는데 생각보다 ㅆㅇㅆ(124.216) 08.10 44 1
2880273 나 노력인데 [4] 노력갤로그로 이동합니다. 08.10 46 0
2880272 노드 js 이거 상당히 재밌네. [4] ㅆㅇㅆ(124.216) 08.10 79 0
2880268 자바는 씹좆입니다 [3] 루도그담당(58.239) 08.10 60 0
뉴스 ‘임신’ 서민재, 남친 신상 공개…“거짓말쟁이, 아기야 미안” 디시트렌드 08.10
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2