디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.08.11 00:20:31
조회 90 추천 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 - -
2881306 임시완 “홍석천이 여러 번 프러포즈”…결국 ‘구애’ 승낙 발명도둑잡기갤로그로 이동합니다. 08.13 35 0
2881305 공중협박죄 발명도둑잡기갤로그로 이동합니다. 08.13 22 0
2881303 아가냥 쑥쑥 크는걸 보니 잡고싶넹 ♥냥덩이♥갤로그로 이동합니다. 08.13 31 0
2881302 퍼플렉시티랑 지피티 듀오로 가야하나 프갤러(61.79) 08.13 29 0
2881300 빌게이츠 이새낀 좇센 왜오는거?? 미국에선 총기맞을까봐 오는거?? 타이밍뒷통수한방(1.213) 08.13 33 0
2881299 헉! 나님 엄마냥 아가냥 대화 도청즁 ! ♥냥덩이♥갤로그로 이동합니다. 08.13 48 0
2881298 나님 서식지 옮길곳 정햇당 ♥냥덩이♥갤로그로 이동합니다. 08.13 32 0
2881297 카페 와이파이를 쓰면 안 되는 이유 발명도둑잡기갤로그로 이동합니다. 08.13 28 0
2881294 리눅스 예전에는 좋았던거 같은데 점점 성능이 내려가는느낌임 타이밍뒷통수한방(1.213) 08.13 34 0
2881292 형님들 엑셀 도움좀 주실분요 ㅠㅠ [1] 프갤러(180.69) 08.13 33 0
2881291 다들 웹사이트 만들 때 폰트 뭐 씀? ㅇㅇ갤로그로 이동합니다. 08.13 26 0
2881287 CIA와 몰몬교 발명도둑잡기갤로그로 이동합니다. 08.13 25 0
2881286 러스트가 확실히 요증 대세는 맞네 ㅇㅇ(125.179) 08.13 48 0
2881285 혹시 예전에 멍유한테 괴롭힘 당하셨던분 아직 계신가요? [8/1] ♥냥덩이♥갤로그로 이동합니다. 08.13 85 0
2881284 asp.net core 문서 보면서 공부나 해야겠다 루도그담당(58.239) 08.13 24 0
2881283 나도 MCP 만들어서 쓰는데 굳이 한국 토종 MCP 써야할 무언가인가 [4] ㅆㅇㅆ(124.216) 08.13 46 0
2881282 천수를 초과하여 살고있어요. 숨통이 조여오네요. [1] 프갤러(220.84) 08.13 40 0
2881280 카카오 MCP 나옴 [1] 프갤러(121.133) 08.13 46 0
2881279 피자스쿨에서 8900원짜리 치즈피자 먹고 왔다 [1] 발명도둑잡기갤로그로 이동합니다. 08.13 31 0
2881278 자바로 윈도우13 만드는중이누?? 윈도우 출시예정 또 미루누 ㅋㅋㅋㅋㅋㅋ 타이밍뒷통수한방(1.213) 08.13 29 0
2881277 윈도우12 출시예정 또 내년으로 미룸 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅅㅂ ㅋㅋㅋㅋㅋ 타이밍뒷통수한방(1.213) 08.13 23 0
2881276 벌써 9시넹 [1] ♥냥덩이♥갤로그로 이동합니다. 08.13 30 0
2881275 클라우드에서 개발하는 서비스 뭐가 좋나요 [3] 프갤러(58.29) 08.13 34 0
2881269 ☘+~✨⭐+ [3] ♥냥덩이♥갤로그로 이동합니다. 08.13 37 0
2881267 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ [1] ♥냥덩이♥갤로그로 이동합니다. 08.13 29 0
2881266 선생님들 m1맥북 엑셀사용 질문있습니다 ㅇㅇ갤로그로 이동합니다. 08.13 32 0
2881259 아 친구 새끼 씨발 [3] 루도그담당(58.239) 08.13 81 0
2881252 어 씨발 해물짬뽕수제비 왔네~ [4] 아스카영원히사랑해갤로그로 이동합니다. 08.13 57 0
2881250 VBA의 좋은점 하나 배웠다 이기 [2] 슈퍼막코더(126.204) 08.13 53 0
2881248 에이치PE, ‘디시인사이드’ 품는다 [시그널] 발명도둑잡기갤로그로 이동합니다. 08.13 42 0
2881247 코딩 잘하면 뭐하나. 프갤러(49.165) 08.13 39 0
2881246 정희햄은 재규어햄이 있어서 아름다운 평가 받는거지 [7] ㅆㅇㅆ(124.216) 08.13 47 0
2881245 비개발 중소는 또라이 많네.. [1] 프갤러(220.92) 08.13 58 1
2881244 길냥이는 갈곳이 없구낭.. [5] ♥냥덩이♥갤로그로 이동합니다. 08.13 50 0
2881243 아스카 선정 머한민국 머통령 티어 [8] 아스카영원히사랑해갤로그로 이동합니다. 08.13 71 0
2881242 애초에 이명박 자체가 기독교 장로까지 지냈어 [2] ㅆㅇㅆ(124.216) 08.13 37 0
2881241 나님 갤 옮기려는데 ㅊㅊ 받음 [11] ♥냥덩이♥갤로그로 이동합니다. 08.13 65 0
2881240 근데 민자당계쪽은 이명박이 망쳤음. 자기 권력기반으로 뉴라이트 [3] ㅆㅇㅆ(124.216) 08.13 51 0
2881239 울회사는 중소인데 나이먹어도 안짤리네.. [8] 프갤러(175.197) 08.13 73 0
2881238 아스카가 생각하기에 역대 조선 머통령 중 [4] 아스카영원히사랑해갤로그로 이동합니다. 08.13 56 0
2881237 . [1] ♥냥덩이♥갤로그로 이동합니다. 08.13 28 0
2881236 [애니뉴스] 귀인환등초 캐릭터 - 오후우에 대해서 + 만화 간백이란 프갤러(121.172) 08.13 17 0
2881235 내일 연차냈습니다 [6] 루도그담당(58.239) 08.13 51 0
2881234 임기말에 한국 대통령 레임덕 터지는건 뭐 당연한거라 [3] ㅆㅇㅆ(124.216) 08.13 38 0
2881233 이재명씨가 아무리 똥볼차도 내란은 이기기힘들다 [9] 헬마스터갤로그로 이동합니다. 08.13 64 0
2881232 재매이햄 보면서 느낀게 우리나라 정치권력 지형이라는게 지역유지 기반 [3] ㅆㅇㅆ(124.216) 08.13 40 0
2881231 근데 찢재명 범죄자 사면 이거 대통령 당선되면 연례행사인데 [17] ㅆㅇㅆ(124.216) 08.13 86 0
2881230 미장 <<< 씨발년 왜 오르기만 함 [5] 아스카영원히사랑해갤로그로 이동합니다. 08.13 69 0
2881229 잘못태어난 죄로 죄업이 쌓입니다. [1] 프갤러(220.84) 08.13 40 0
2881228 스케일이 아닌 원칙을 운영하라는데 책 읽다보면 기술에 대한 동경이 ㅆㅇㅆ(124.216) 08.13 28 0
뉴스 '신사장 프로젝트' 한석규, 혼돈의 공간에서도 미소 장착! 골목 분쟁 해결사의 협상 포스터 공개 디시트렌드 08.13
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2