디시인사이드 갤러리

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

갤러리 본문 영역

완성된 원고: 1.3 Ada의 주요 특징

나르시갤로그로 이동합니다. 2025.09.02 03:24:48
조회 82 추천 0 댓글 0

1.3 Ada의 주요 특징

Ada는 신뢰성 및 유지보수, 인간 활동으로서의 프로그래밍, 효율성을 목표로 설계된 프로그래밍 언어입니다. 이러한 설계 철학은 언어의 여러 가지 특징에 반영되어 있습니다. 본 절에서는 Ada의 주요 특징들을 소개합니다.

신뢰성과 안전성 (reliability and safety)

소프트웨어 시스템에서 신뢰성(reliability)은 명시된 기간 동안 의도된 기능을 오류 없이 수행하는 확률을 나타내며, 안전성(safety)은 오작동이 치명적인 사고로 이어지지 않도록 하는 시스템의 속성을 의미합니다. Ada는 컴파일 시점에 수행되는 정적 검사(static check)와 실행 시점에 이루어지는 런타임 검사(runtime check)를 언어 차원에서 지원합니다.

정적 검사는 프로그램 실행 전 소스 코드를 분석하여 오류를 탐지 및 방지하는 과정입니다. Ada 컴파일러는 타입 불일치, 서브프로그램 호출 시의 매개변수 오류, 패키지의 비공개(private) 영역 접근 위반, 초기화되지 않은 변수의 사용 가능성 등 다양한 종류의 결함을 컴파일 단계에서 검출합니다.

이러한 정적 분석의 기반은 Ada의 강타입 시스템(strong type system)입니다. 이 시스템은 서로 다른 데이터 타입 간의 연산을 허용하지 않습니다. 예를 들어, Meters로 정의된 거리 타입과 Kilograms로 정의된 무게 타입 변수 간의 산술 연산은 컴파일 시점에 오류로 처리되어 데이터의 의미상 오류를 방지합니다. 이러한 정적 검증은 개발 초기 단계에서 논리적 오류를 식별하여 소프트웨어의 신뢰도를 높이는 데 기여합니다.

정적 분석만으로 탐지하기 어려운 동적 오류에 대응하기 위해, Ada는 프로그램 실행 중에 이루어지는 런타임 검사(runtime check)를 통해 예외적 상황에 대응합니다. 언어 표준에 명시된 런타임 검사는 배열 인덱스 범위 초과나 정수 오버플로와 같은 메모리 및 데이터 무결성 저해 동작, 초기화되지 않은 변수를 참조하는 프로그램 논리 오류, 그리고 종료된 태스크에 접근하려는 동시성 오류 등을 감지합니다. 런타임 검사가 실패하면, 시스템은 미정의 상태(undefined state)가 되는 대신 예외(exception)를 발생시킵니다. 개발자는 예외 처리 구문을 통해 이러한 상황에 대응할 수 있습니다.

또한, Ada는 선언적 명세를 통해 서브프로그램의 동작을 정의하는 계약 기반 프로그래밍(Programming by Contract)을 지원합니다. 개발자는 서브프로그램 실행 전에 만족해야 할 사전조건(precondition)과 실행 후에 보장해야 할 사후조건(postcondition)을 명시할 수 있습니다. 이러한 계약은 실행 중에 검증되어 프로그램의 논리적 정확성을 확인하는 데 사용됩니다.

Ada의 런타임 검사보다 더 높은 수준의 수학적 정확성이 요구될 경우 정형 검증(formal verification)을 사용할 수 있습니다. 그 예시인 SPARK는 Ada의 검증 가능한 부분집합(verifiable subset)으로서, 코드에 명시된 계약이 모든 실행 경로에서 만족됨을 정적 분석을 통해 증명합니다.

동시성 (concurrency)

Ada 프로그램의 실행은 하나 이상의 태스크(task) 실행으로 구성됩니다. 각 태스크는 독립적으로 동시에 실행되는 분리 가능한 활동(separable activity)을 나타냅니다. 태스크는 엔트리 호출(entry call)을 통해 다른 태스크와 동기적으로 통신할 수 있습니다.

여러 태스크가 공유 데이터에 접근할 때 발생하는 데이터 경쟁(data race)을 방지하기 위해, Ada는 보호된 객체(protected object)를 제공합니다. 보호된 객체는 보호된 연산(protected operation)을 통해서만 데이터 접근을 허용합니다. 보호된 연산에는 배타적인 읽기-쓰기를 위한 보호된 프로시저(protected procedure), 동시적인 읽기 전용 접근을 위한 보호된 함수(protected function), 그리고 특정 조건이 만족될 때까지 태스크를 대기시키는 보호된 엔트리(protected entry)가 있습니다.

이러한 태스크 기반 모델 외에도, Ada는 멀티코어 아키텍처를 활용하기 위한 병렬 구문(parallel construct)을 지원합니다. 예를 들어, 병렬 for 루프(parallel for loop)는 반복 가능한 대상의 각 항목에 대한 동일한 작업을 여러 코어에 분배하는 기능을 제공합니다. 이러한 기능은 Ada의 적법성 규칙(legality rules)에 따라 컴파일 시점에 데이터 경쟁과 같은 오류를 방지하며, 다중 코어를 사용한 병렬 실행을 가능하게 합니다.

모듈성과 데이터 추상화

Ada는 패키지(package)를 통해 소프트웨어를 여러 논리적 단위로 구성하고 관리하는 기능을 지원합니다. 패키지는 관련된 타입, 변수, 서브프로그램 등을 하나의 그룹으로 묶는 역할을 합니다. 각 패키지는 인터페이스를 정의하는 명세(specification)와 실제 구현을 포함하는 본체(body)로 분리됩니다. 패키지 명세는 외부에서 사용 가능한 가시부(visible part) private 예약어 뒤에 오는 전용부(private part)를 포함할 수 있습니다. 이를 통해 데이터의 내부 표현을 숨기고 외부에는 필요한 연산만 노출하는 데이터 추상화가 가능합니다.

객체 지향 프로그래밍 (Object-Oriented Programming)

Ada는 패키지를 통한 데이터 추상화 기능을 기반으로, Ada 95부터 객체 지향 프로그래밍을 지원합니다. 객체 지향 프로그래밍의 주요 원칙은 캡슐화, 상속, 다형성입니다.

캡슐화란 데이터와 그 데이터에 작용하는 메서드를 함께 묶고 객체의 일부 구성 요소에 대한 직접적인 접근을 제한하기 위한 언어적 메커니즘입니다.1 Ada에서는 패키지를 사용하여 데이터와 관련 서브프로그램을 하나의 단위로 묶고, private 타입 또는 private확장을 통해 내부 구현을 외부로부터 분리할 수 있습니다.

상속(inheritance)은 하나의 객체나 클래스가 다른 객체나 클래스를 기반으로 하여, 유사한 구현을 유지하는 메커니즘입니다.2 Ada에서는 태그된 타입(tagged type)을 사용하여 기존 타입의 데이터와 기능을 상속받는 새로운 타입을 파생시키고, 타입 간의 계층 구조를 표현할 수 있습니다.

다형성(polymorphism)은 서로 다른 데이터 타입의 개체(entities)들에게 하나의 공통 인터페이스를 제공하는 것입니다.3 Ada에서는 클래스-범위(class-wide) 타입과 태그(tag)를 사용하여, 해당 타입에 맞는 실제 서브프로그램을 동적으로 결정할 수 있습니다.

함수형 프로그래밍 지원 (support for functional programming)

Ada는 순수 함수형 언어는 아니지만, Ada 2012와 2022 표준을 통해 함수형 프로그래밍 스타일의 기능들이 도입 및 확장되었습니다.

Ada는 로직을 문장(statement)이 아닌 값을 반환하는 표현식(expression) 중심으로 구성하는 것을 지원하며, 여기에는 단일 표현식으로 함수를 정의하는 표현식 함수(expression function), 조건에 따라 값을 결정하는 조건 표현식(conditional expression) 및 case 표현식, 표현식 내에서 임시 상수를 선언하는 선언식 표현(declare expression), 그리고 컨테이너의 모든 원소를 하나의 값으로 집계하는 감축 표현식(reduction expression)이 포함됩니다.

이러한 표현식 중심의 접근은 데이터 처리에도 적용됩니다. 수량자 표현식(quantified expression)은 루프 없이 컨테이너 원소의 속성을 검사하며, 일반화된 반복자(generalized iterator) 이터레이터 필터(iterator filter)는 데이터의 순회 및 필터링을 지원합니다. 또한 델타 애그리게이트(delta aggregate)는 기존 객체를 수정하지 않고 일부 값만 변경된 새로운 객체를 생성하여 불변성(immutability)을 지원합니다. 이러한 표현식 중심의 접근은 프로그램 실행 중 발생하는 상태 변화와 부작용(side effect)을 줄이는 효과가 있습니다.

효율성 (efficiency)

Ada 언어의 설계 목표 중 효율성은 컴파일러 구현 언어의 실행 효율이라는 두 가지 관점에 반영되어 있습니다.

Ada의 문법은 모호함이 적어 컴파일러의 정적 분석을 용이하게 합니다. 예를 들어, 모든 선언은 사용되기 전에 명시적으로 이루어져야 하며, 패키지의 명세부(specification) 구현부(body)가 명확히 분리됩니다. 이는 컴파일러가 복잡한 추론 없이 코드를 해석하고 모듈 단위로 컴파일할 수 있게 하여, 컴파일러 구현의 복잡성을 낮추고 자원이 제한된 환경에서도 Ada를 사용할 수 있는 기반이 됩니다.

또한, Ada 언어의 구성 요소들은 저장 공간(storage)과 실행 시간(execution time)을 효율적으로 사용하도록 설계되었습니다. 예를 들어, 제네릭(generic)이나 인라인(inlined) 서브프로그램과 같은 추상화 메커니즘은 대부분 컴파일 시점에 처리되어, 저수준 코드로 작성된 것과 유사한 수준의 실행 효율을 보입니다. 더 나아가, 프로그래머는 표현 절(representation clause)을 통해 데이터 구조의 메모리 배치를 비트 단위까지 직접 제어하거나, 프라그마(pragma)를 통해 컴파일러의 최적화 방식을 지정하는 등 정밀한 자원 제어가 가능합니다.

가독성과 명확성 (readability and clarity)

Ada의 구문은 프로그램의 논리적 구조를 명시적으로 나타내도록 설계되었습니다. 코드의 구조적 명확성은 소프트웨어 유지보수성에 영향을 미치는 요소입니다.

Ada는 블록과 제어 구문의 범위를 명시적인 키워드로 한정합니다. 예를 들어, 서브프로그램이나 패키지는 begin end로, 조건문은 if end if;로, 반복문은 loop와 **end loop;로 각각의 범위를 지정합니다.

각 제어 구조가 고유한 종결 예약어를 사용하므로, 코드 블록의 범위가 구문적으로 결정됩니다. 이는 프로그램의 제어 흐름과 중첩 구조에 대한 잠재적 모호성을 제거합니다.


  1. Booch, Grady, et al. Object-Oriented Analysis and Design with Applications. 3rd ed., Addison-Wesley, 2007. 

  2. Johnson, Ralph (August 26, 1991). Designing Reusable Classes (PDF). www.cse.msu.edu

  3. Stroustrup, Bjarne (February 19, 2007). Bjarne Stroustrup's C++ Glossary. polymorphism – providing a single interface to entities of different types. 


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 순간의 말실수로 이미지 타격이 큰 것 같은 스타는? 운영자 25/09/01 - -
AD 신학기 레벨업~!! 운영자 25/09/05 - -
2887310 라면 먹고 갈래? 발명도둑잡기(118.216) 09.06 21 0
2887308 수학 열심히 팠으면 메리트 있는 분야가 어딘가요? [5] 프갤러(211.248) 09.06 63 0
2887306 지금 RAG를 닫힌 환경으로 했는데 이걸 제미나이 CLI랑 연동하고 싶데 ㅆㅇㅆ(124.216) 09.06 32 0
2887305 봄날은 간다. 라면먹을래... 라면먹고갈래의 원조 발명도둑잡기(118.216) 09.06 22 0
2887304 정상수 & 홍가- 라면먹고 갈래요? 발명도둑잡기(118.216) 09.06 21 0
2887303 너넨 강의 인프런에서 들음 유데미에서 들음 [5] 98세박춘봉갤로그로 이동합니다. 09.06 89 0
2887302 KBS 인사이트 아시아 '누들로드 Noodle Road' 6부작 발명도둑잡기(118.216) 09.06 20 0
2887301 면쳐돌이 아스카의 추천 맛집 아스카영원히사랑해갤로그로 이동합니다. 09.06 47 0
2887300 4BOUT-Secret Box 발명도둑잡기(118.216) 09.06 21 0
2887299 RAG 만들어보고 느낀건데 갑갑하다 이거 진짜 ㅆㅇㅆ(124.216) 09.06 46 0
2887298 도삭면 우육면 마라탕 다 쳐먹고 싶다 [5] 아스카영원히사랑해갤로그로 이동합니다. 09.06 47 0
2887297 전세계에서 한국만큼 살기좋은나라가 없다고???애미 씨발 노인씹새끼들아ㅋㅋ 뒷통수한방(1.213) 09.06 28 0
2887296 일본해라고 불러서 개빡친 유럽 국가 발명도둑잡기(118.216) 09.06 31 0
2887294 <고백의 역사> 본 소감 발명도둑잡기(118.216) 09.06 18 0
2887292 AI 인생 40 년 갈아 넣었습니다. 프갤러(59.16) 09.06 39 0
2887291 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥냥덩의태양은밤에도빛난당♥갤로그로 이동합니다. 09.06 19 0
2887288 로맨스 영화는 F 감정을 잘 살려서 만들어야 발명도둑잡기(118.216) 09.06 20 0
2887287 李대통령, 보육원생들과 '킹 오브 킹스' 관람 발명도둑잡기(118.216) 09.06 34 0
2887286 전세계에서 한국만큼 살기좋은나라가 없다고???애미 씨발 노인씹새끼들아ㅋㅋ [1] 뒷통수한방(1.213) 09.06 31 0
2887284 병신들아 AI 딸깍으로 다 된다고 해줘야 너희와 내가 돈을 번다니까? ㅆㅇㅆ(124.216) 09.06 52 2
2887282 영역표시(領域標示).. ♥냥덩의태양은밤에도빛난당♥갤로그로 이동합니다. 09.06 24 0
2887281 ai로 다 된다... 기술자 내려치기죠. 그냥 입터는겁니다. [1] 프갤러(110.8) 09.06 54 1
2887280 커널 공부하는데 재밌네 루도그담당(58.239) 09.06 37 0
2887279 최강이기에 고독!, 냥덩이에게 사랑을 알려주는건..! [1] ♥냥덩의태양은밤에도빛난당♥갤로그로 이동합니다. 09.06 30 0
2887278 ai가 모든걸 다해 줄만큼의 특이점이 오긴 할까? [2] ㅇㅇ(223.39) 09.06 42 1
2887277 골드러시때 돈 번 사람은 청바지 팔던 사람임 ㅆㅇㅆ(124.216) 09.06 30 0
2887276 너희가 그래봤자 ai는 연전연승이야 ㅇㅇ갤로그로 이동합니다. 09.06 27 0
2887275 생각해봐라 정보의 비대칭성이 강할수록 여기에 속한 내가 돈을 버는거임 [1] ㅆㅇㅆ(124.216) 09.06 53 0
2887274 ai가 해줘도 지식은 다 알아야 하지않음? [3] ㅇㅇ갤로그로 이동합니다. 09.06 46 0
2887273 오히려 AI를 신격화해줄수록 고맙던데 난 [1] ㅆㅇㅆ(124.216) 09.06 54 0
2887272 폰 케이스 구매혀려고 나스 설정 하다가, 겁나 늙겠다. 넥도리아(119.195) 09.06 17 0
2887271 일부러 못생긴 남자와 연애한다?…MZ세대 ‘슈렉킹’ 열풍 발명도둑잡기(118.216) 09.06 26 0
2887270 원리를 모르니까, 숭배하는거임 [2] ㅆㅇㅆ(124.216) 09.06 55 0
2887269 ai한테 1부터 10까지 숫자만 뽑아봐 시켜보면 걍 AI는 ㅆㅇㅆ(124.216) 09.06 38 0
2887268 ㄴ ㅏ님 슬슬 소화된듯? 주무실 준비⭐+ ♥냥덩의태양은밤에도빛난당♥갤로그로 이동합니다. 09.06 21 0
2887267 Ai가 다 만들어주는데 공부 왜 하는거임? [1] ㅇㅇ갤로그로 이동합니다. 09.06 35 0
2887266 일반인들 왜케 AI 신봉함? [1] 루도그담당(58.239) 09.06 36 0
2887265 고백의 역사 보는데 [2] 발명도둑잡기(118.216) 09.06 52 0
2887264 이거 어떻해하죠? 가르켜주세요 ㅇ.ㅇ(113.59) 09.06 42 0
2887263 1세대 유튜버 대도서관 선생님께서 돌아가셨다고...기사로 접함. 넥도리아(220.74) 09.06 43 0
2887262 사람으로 태어나서 고통받는 이유는 세상은 좇같은새끼들위주니깐ㅎㅎ 뒷통수한방(1.213) 09.06 24 0
2887261 자연인 승윤이 윤택이도 노인때묻어서 월천에 보너스도 몇백 버네 ㅋㅋㅋ 뒷통수한방(1.213) 09.06 19 0
2887257 Ai가 html로 만들어주는거 쓸만한거 맞음??? [1] ㅇㅇ(118.34) 09.06 57 0
2887256 남녀 카톡 차이 발명도둑잡기(118.216) 09.06 40 0
2887255 뭔가 착각하는데 CRUD+배포+문서화만해도 어지간하면 A임 [2] ㅆㅇㅆ(124.216) 09.06 65 0
2887254 안전빵해라 안전빵 왜 굳이 사서 고생을 하노 ㅆㅇㅆ(124.216) 09.06 42 0
2887253 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥Sub2뛰뛰냥덩♥갤로그로 이동합니다. 09.06 33 0
2887251 그리고 AI가 그 주제만 말하게 한다는게 상당히 어려움 [4] ㅆㅇㅆ(124.216) 09.06 44 0
2887250 보통 대학생들 졸작 수준이래봤자 기껏해야 예약시스템 커뮤니티다 [4] ㅆㅇㅆ(124.216) 09.06 77 0
2887249 뭐가 어려운지 아래 졸작 주제 설명해줌 [12] ㅆㅇㅆ(124.216) 09.06 80 0
뉴스 ‘이혼’ 홍진경 “다 맞춰주는 부부, 건강한 관계 아냐” 디시트렌드 09.06
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2