디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.08.11 00:20:31
조회 86 추천 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 - -
공지 프로그래밍 갤러리 이용 안내 [92] 운영자 20.09.28 46301 65
2881370 참 공부를 하면서 느낀다 루도그담당(58.239) 02:09 16 0
2881369 프갤에 글이 없네 ㅋㅋ [1] 프갤러(121.139) 02:08 19 0
2881368 냉면 먹어야겠다 ㄱ ㅐ ㅆ ㅣ빨썌끼들아!!!!!! 프갤러(121.139) 02:06 10 0
2881367 음기 충전 발명도둑잡기갤로그로 이동합니다. 02:05 9 0
2881366 님이 사용 중인 어플들 러스트가 아니라 C/C++로 만든거다 나르시갤로그로 이동합니다. 01:59 9 0
2881365 납품 준비 하나 끝. 아 존나 힘들다 ㅆㅇㅆ(124.216) 01:58 10 0
2881364 식당 술값이 폭리면? 주식 수익은 부당 이익이냐? 나르시갤로그로 이동합니다. 01:57 8 0
2881363 식당 술값이 폭리면? 개발비도 폭리냐? 나르시갤로그로 이동합니다. 01:56 8 0
2881360 GC없는, (메모리 등) 안전 대세 언어: Ada 나르시갤로그로 이동합니다. 01:29 18 0
2881359 러스트가 확실히 대세가 아닌 이유 나르시갤로그로 이동합니다. 01:23 15 0
2881356 7O'!OoO원 받는 법 ~! ㅇㅇ(106.101) 01:13 14 0
2881351 개인적으로 개발 세부 구현사항은 문서화 안하지만 전반적으로 [1] ㅆㅇㅆ(124.216) 00:23 28 0
2881348 그리고 기본적으로 마소 예제는 나름대로 기술 분석 해두는게 좋더라 [2] ㅆㅇㅆ(124.216) 00:20 30 0
2881347 뇌과학적으로 고소득층 사람들은 물건보다 '이것'에 집착합니다 발명도둑잡기갤로그로 이동합니다. 00:18 14 0
2881346 아인슈타인의 ‘그 논문’ 50년간 묻혔다가 과학계 레전드로 역주행 발명도둑잡기갤로그로 이동합니다. 00:16 15 0
2881345 나는 대부분 내가 만들어보거나 해본 것들 어지간하면 적어둠 [7] ㅆㅇㅆ(124.216) 00:14 39 0
2881344 나는 크롤링 전문이 아니라서, 그냥 기초 원리만 아는거. [3] ㅆㅇㅆ(124.216) 00:09 29 0
2881343 아씨발나스닥왜자꾸올라개새끼야!!!!!!! [3] 아스카영원히사랑해갤로그로 이동합니다. 00:07 37 0
2881342 웹 크롤링 뷰티풀 스프 사용하는 방법 [2] ㅆㅇㅆ(124.216) 00:06 32 0
2881341 나도 어제 좆개판으로 크롤러 짯는데 [2] 루도그담당(58.239) 00:02 27 0
2881340 R 스크립트 짜면서 느끼는데 유독 파이썬 R은 GPT가 잘짜 ㅆㅇㅆ(124.216) 00:01 20 0
2881338 개발 항상 하면 느끼지만 가장 큰 적은 '돌아가는데 굳이..' 이거임 [2] ㅆㅇㅆ(124.216) 08.13 36 0
2881337 그 약이라는게 그렇게 끊기가 힘듬?? 계속 생각나?? [6] ㅇㅇ(223.39) 08.13 39 0
2881336 파이썬 질문있습니다 [3] 프갤러(211.105) 08.13 32 0
2881335 ㅆㅇㅆ님 이 글에 대해 의견좀 [1] 발명도둑잡기갤로그로 이동합니다. 08.13 23 0
2881334 마약 거래 중? 발명도둑잡기갤로그로 이동합니다. 08.13 13 0
2881331 내가 ai 안쓰는 이유 프갤러(121.139) 08.13 21 0
2881330 금융 로직의 문제는 뭐냐면 [1] 밀우갤로그로 이동합니다. 08.13 30 0
2881327 프갤러들 제국주의자 되는 과정 발명도둑잡기갤로그로 이동합니다. 08.13 19 0
2881326 이직했는데 존나어렵다 [1] 프갤러(220.70) 08.13 38 0
2881324 코테 문제들 어질어질하노 [1] 프갤러(220.85) 08.13 50 0
2881322 선미=BLUE!-ming | Spoiler #2 발명도둑잡기갤로그로 이동합니다. 08.13 21 0
2881321 ㅇㅣ거 뭐냐 ㅇㅇ(211.105) 08.13 19 0
2881320 재미를 추구하라⭐+ By 나님 [1] ♥냥덩이♥갤로그로 이동합니다. 08.13 28 0
2881319 OWN(오 은) - Blueprint(청사진) 발명도둑잡기갤로그로 이동합니다. 08.13 14 0
2881318 나님 슬슬 졸린둣? ♥냥덩이♥갤로그로 이동합니다. 08.13 23 0
2881317 요즘 식당, 술집들 보면 술로 너무 폭리 취함 [9] 야옹아저씨갤로그로 이동합니다. 08.13 56 5
2881315 챗티씨에 코드 맡기고 나는 누워잇는중 [1] 헬마스터갤로그로 이동합니다. 08.13 34 0
2881314 나님 냥덩이 키우는 유튭 채널 개설 예정 [2/1] ♥냥덩이♥갤로그로 이동합니다. 08.13 47 0
2881312 도대체 영화관리를 어떻게 하길래 벌써 XX티비에 영화가 다떴지?? [6] ㅇㅇ(223.39) 08.13 48 0
2881310 가격 제시염⭐ [6/2] ♥냥덩이♥갤로그로 이동합니다. 08.13 58 0
2881309 잡코리아에서 AI 공모전으로 채용까지 하네요 프갤러(114.203) 08.13 23 0
2881308 나님 주무시기전 소통⭐+ 질문 받음 [1] ♥냥덩이♥갤로그로 이동합니다. 08.13 27 0
2881306 임시완 “홍석천이 여러 번 프러포즈”…결국 ‘구애’ 승낙 발명도둑잡기갤로그로 이동합니다. 08.13 23 0
2881305 공중협박죄 발명도둑잡기갤로그로 이동합니다. 08.13 19 0
2881303 아가냥 쑥쑥 크는걸 보니 잡고싶넹 ♥냥덩이♥갤로그로 이동합니다. 08.13 27 0
2881302 퍼플렉시티랑 지피티 듀오로 가야하나 프갤러(61.79) 08.13 21 0
2881300 빌게이츠 이새낀 좇센 왜오는거?? 미국에선 총기맞을까봐 오는거?? 타이밍뒷통수한방(1.213) 08.13 25 0
2881299 헉! 나님 엄마냥 아가냥 대화 도청즁 ! ♥냥덩이♥갤로그로 이동합니다. 08.13 41 0
뉴스 '신사장 프로젝트' 한석규, 혼돈의 공간에서도 미소 장착! 골목 분쟁 해결사의 협상 포스터 공개 디시트렌드 08.13
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2