디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.08.11 00:20:31
조회 84 추천 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 - -
2881134 메이플은 왜 재미있는데 하다가 질릴까 ㅇㅅㅇ ㅇㅇ(223.39) 11:54 14 0
2881124 [멋쟁이사자처럼] 현대모비스가 제공하는 모빌리티 부트캠프 1기 (~9/5 [1] 프갤러(14.32) 11:29 39 0
2881122 많은거 바라는거 아님 연봉 4천받고싶다 ㅇㅇ갤로그로 이동합니다. 11:26 27 0
2881111 400 -> 580 대박 이직 성공했다 ㅋㅋ [3] ㅇㅇ갤로그로 이동합니다. 10:45 94 3
2881110 특이점 온다 노동해방시대 온다 ㅇㅇ 뒷통수한방(1.213) 10:11 28 0
2881107 마스터플랜의 망령 ㅇㅇ(210.100) 09:54 23 0
2881102 비가 많이 오네 좀 우울한 날이다. [1] 넥도리나(220.74) 09:07 32 0
2881099 opencv 이거 ai이미지 생성할때도 쓰이는거임 ㅇㅇ(220.116) 08:47 39 0
2881085 인지과학조져라 손발이시립디다갤로그로 이동합니다. 07:58 35 0
2881084 나는내향적이야 손발이시립디다갤로그로 이동합니다. 07:58 31 0
2881083 호로미제매국통베폭동간첩견아 손발이시립디다갤로그로 이동합니다. 07:58 29 0
2881066 하루에 0=99줄 감사의 코딩 공기역학갤로그로 이동합니다. 06:38 51 0
2881064 좆소라 연봉낮은 애들만 지원하는건가 [1] 프갤러(222.239) 06:27 80 0
2881059 요즘 조직관리론에 빠짐 프갤러(61.79) 05:29 34 0
2881051 권은비 레전드 과거사진 프갤러(106.101) 04:20 74 1
2881039 ai쪽으로 취업 어케하노 [4] ㅇㅇ(1.235) 03:26 103 0
2881035 보여주는 것이 다가 아니다 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 03:17 35 0
2881034 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 03:14 25 0
2881033 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 03:13 53 0
2881011 와 갤 똥내 씨발 [1] 박민준갤로그로 이동합니다. 01:56 86 0
2881006 이게 바로 법치주의고 정의지 [3] 야옹아저씨갤로그로 이동합니다. 01:28 75 2
2880990 윤석열 개병신새끼네 ㅋㅋ 류류(118.235) 00:56 38 1
2880966 우리 모두 사랑해요 [5] 개멍청한유라갤로그로 이동합니다. 08.12 60 0
2880963 회사 오너가 개 빡쳐 있는 이유. [1] 프갤러(59.16) 08.12 82 0
2880961 왜 임베디드 취업은 ai영향이 적은거임 ㅇㅇ(175.119) 08.12 72 0
2880959 요즘 너무 바빠서 [2] 아스카영원히사랑해갤로그로 이동합니다. 08.12 54 0
2880955 넥도리아 야식 콩국물 + 오뚜기 라면 사리 [2] 넥도리아(220.74) 08.12 75 0
2880953 전한길씨가 그래도 차단은 안하더라 [4] 헬마스터갤로그로 이동합니다. 08.12 71 0
2880948 김건희 구속 드가자 야옹아저씨갤로그로 이동합니다. 08.12 50 0
2880947 코딩과 개발은 은 프로그래밍이 아니다. 프갤러(121.139) 08.12 60 1
2880946 네이버는 그나마 사람 새끼들 집합이겠지. 프갤러(211.234) 08.12 64 0
2880945 코딩은 알고리즘실력보다 중요한건 프갤러(118.219) 08.12 58 0
2880943 내가 비록 호주인으로 국적이 바뀌지만 미래에 한국 전쟁에 참전은 하겠다. [4] Kyle(103.21) 08.12 93 0
2880942 네이버 토스 종결 프갤러(121.139) 08.12 75 1
2880940 추악한 모습을 드러내야 하는데요. 프갤러(220.84) 08.12 38 0
2880937 집에 5공화국 쉴드치는 돼지가 살아요. 넥도리아(223.38) 08.12 31 0
2880935 클리우드 엔지니어쪽 생각하고 있는데 프갤러(211.235) 08.12 43 0
2880931 대규모시스템설계기초책 재밌네 [1] 밀우갤로그로 이동합니다. 08.12 37 0
2880929 찐윤이랑 윤석열이 국민 삶 의료질 다 망쳐나서.. [1] 넥도리아(223.38) 08.12 40 0
2880927 아는 형님이 크롤링 만들어달래서 루도그담당(58.239) 08.12 60 1
2880926 영어 좆도 모르면 프로그래밍 못 할 정도임? [15] 냥이펀치갤로그로 이동합니다. 08.12 105 0
2880917 이거 ODD 수리 하는게 좋을까요. 어떻게 살릴까요? [1] 넥도리아(223.38) 08.12 42 0
2880915 야옹아저씨 글 자체가 적페 넥도리아(223.38) 08.12 28 0
2880914 기호식품이 담배, 술 지원금으로 사는인간들 적페 넥도리아(223.38) 08.12 27 0
2880909 조직스토킹 전파무기 벽투시기 방사성물질테러로부터 안전할권리를 만듭시다 손발이시립디다갤로그로 이동합니다. 08.12 37 0
2880905 권리를 쟁취하자 손발이시립디다갤로그로 이동합니다. 08.12 24 0
2880904 스카이넷좌를 석방하라 조직스토킹으로부터 안전할권리 손발이시립디다갤로그로 이동합니다. 08.12 24 0
2880903 조직스토킹으로부터 안전할권리 스카이넷좌와 함께합니다 손발이시립디다갤로그로 이동합니다. 08.12 23 0
2880902 7 만언 ! 받는법 정리~~~ ! ㅇㅇ(106.101) 08.12 26 0
2880899 파이썬 계 김영한 없냐? [2] 프갤러(121.137) 08.12 88 0
뉴스 “작은 엉덩이가 이상형”…최홍만, 여친 이야기하며 ‘눈물’ 디시트렌드 10:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2