디시인사이드 갤러리

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

갤러리 본문 영역

Ada 프로그래밍: 7. 객체 지향 프로그래밍 (OOP)

나르시갤로그로 이동합니다. 2025.10.20 09:04:04
조회 89 추천 0 댓글 0

7. 객체 지향 프로그래밍 (OOP)

7.1 Ada의 객체 지향 패러다임 개요

Ada의 객체 지향 프로그래밍은 패키지(package)를 통한 캡슐화, 태그드 타입(tagged type)을 통한 타입 확장 및 상속, 그리고 디스패치 연산(dispatching operation)을 통한 런타임 다형성을 기반으로 합니다. 또한 인터페이스 타입(interface type)을 통해 다중 상속을 지원합니다.


7.2 캡슐화와 정보 은닉 (Encapsulation and Information Hiding)

7.2.1 패키지를 이용한 추상화

Ada의 캡슐화는 패키지(package)를 통해 이루어집니다. 패키지는 명세(specification)와 구현부(body)로 분리되며, 명세의 'visible part'는 클라이언트에게 논리적 인터페이스를 제공하고, 'private part'와 'body'는 구현 세부 사항을 은닉합니다.

7.2.2 전용 타입 (Private Types)

전용 타입(private type)은 패키지의 'visible part'에 선언되어 클라이언트에게는 타입의 이름과 관련 연산만 노출하고, 완전한 정의는 'private part'에 위치시켜 구현 세부 사항을 은닉합니다. 이는 데이터 추상화의 핵심입니다.

7.2.3 제한된 타입 (Limited Types)

제한된 타입(limited type)은 할당 연산(assignment)과 사전 정의된 동등 연산(equality)이 허용되지 않는 타입입니다. 이는 타입 정의에 limited 예약어를 사용하여 명시합니다.


7.3 상속과 타입 확장 (Inheritance and Type Extension)

7.3.1 태그드 타입 (Tagged Types)

태그드 타입(tagged type)tagged 예약어로 선언되며, 타입 확장을 지원하고 런타임 다형성의 기반이 됩니다. 태그드 타입의 객체는 런타임에 자신의 특정 타입을 식별하는 태그(tag)를 가집니다.

7.3.2 타입 확장 (Extension)과 프리미티브 연산 (Primitive Operations)

타입 확장(type extension)은 기존 태그드 타입을 부모 타입으로 하여 새로운 타입을 파생(derive)하는 것을 의미합니다. 파생 타입은 부모의 모든 특성을 상속받습니다. 레코드 확장(record extension)의 경우, 부모 타입에 새로운 컴포넌트를 추가할 수 있습니다. 파생 타입은 부모 타입의 프리미티브 연산(primitive operation)을 상속받습니다.

7.3.3 연산 재정의 (Overriding)

파생 타입은 상속받은 프리미티브 연산을 재정의(overriding)하여 새로운 구현을 제공할 수 있습니다. Ada는 overriding 표시자를 사용하여 재정의 의도를 명시적으로 선언하도록 권장합니다.


7.4 다형성 (Polymorphism)

7.4.1 클래스-와이드 타입 (Class-Wide Types)

태그드 타입 T에 대해, 클래스-와이드 타입(class-wide type) T'Class는 T 또는 T의 모든 파생 타입을 포함하는 'derivation class' 내의 모든 값을 나타냅니다.

7.4.2 동적 디스패치 (Dynamic Dispatching)

디스패치(dispatching)는 런타임 다형성을 구현하는 핵심 메커니즘입니다. 클래스-와이드 타입의 객체를 통해 프리미티브 연산을 호출할 때, 객체의 런타임 태그를 기반으로 해당 특정 타입에 맞는 연산의 구현부(body)가 동적으로 선택되어 실행됩니다.

7.4.3 'Tag와 'Class 속성

'Class 속성은 특정 태그드 타입 S에 대해 클래스-와이드 타입 S'Class를 나타냅니다. 'Tag 속성은 타입(S'Tag) 또는 객체(X'Tag)의 런타임 태그 값을 반환하며, 이는 Ada.Tags 패키지의 Tag 타입입니다.


7.5 추상화의 심화

7.5.1 추상 타입 (Abstract Types) 및 서브프로그램 (Abstract Subprograms)

추상 타입(abstract type)abstract 예약어로 선언되며, 객체를 직접 생성할 수 없고 다른 타입의 조상 타입으로만 사용됩니다. 추상 서브프로그램(abstract subprogram)은 구현부(body)가 없으며, 반드시 파생된 구체적인(non-abstract) 타입에서 재정의되어야 합니다.

7.5.2 인터페이스 타입 (Interface Types)과 다중 상속

인터페이스 타입(interface type)은 컴포넌트가 없는 추상 태그드 타입입니다. Ada는 인터페이스를 통해 다중 상속을 지원합니다. 하나의 타입은 여러 개의 인터페이스 타입(progenitor)으로부터 연산을 상속받을 수 있습니다.


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 대박 날 것 같아서 내 꿈에 나와줬으면 하는 스타는? 운영자 25/11/17 - -
AD 겨울가전 SALE! 쿨한 겨울 HOT세일 운영자 25/11/12 - -
2899590 ㅆㅇㅆ가 실력 없다는건 잘 알겠다 ㅇㅇ ㅇㅇ(118.235) 10.30 101 6
2899589 취미로 코딩하는 애들이 AI 시대 승자다 [33] 박민준갤로그로 이동합니다. 10.30 229 0
2899588 러스트하능사람들 러스트장점알려줭 [1] 무토낑(119.202) 10.30 114 0
2899587 비전공이 개발 덤벼드는거 참 이해가 안된다 ㅇㅇ(106.101) 10.30 146 0
2899586 한국 프로그래머는 노가다라기 보다는 음... 똥퍼입니다. [3] 프갤러(110.8) 10.30 96 0
2899585 러스트가 C보다 빠를숭없징? [6] 무토낑(119.202) 10.30 127 0
2899584 실력이라는게 결국은 일종의 허상이라고 생각은 함. [3] ㅆㅇㅆ(124.216) 10.30 143 0
2899583 한국it에서는 현업자가 더 병신입니다. [1] 프갤러(110.8) 10.30 130 0
2899582 내가 쿠팡 안쓰고 배민 쓰는 이유는 딱 하나임 [1] 야옹아저씨갤로그로 이동합니다. 10.30 115 0
2899581 현업자들의 실력은 어떠냐면 [6] 박민준갤로그로 이동합니다. 10.30 164 0
2899580 ㅆㅇㅆ야 이걸 보고도 너가 성공할 수 있을거라 생각할까? [2] ㅇㅇ(51.158) 10.30 143 4
2899578 엔비디아 회장이 왜 깐부치킨갔는지 생각해봤는데 ㅆㅇㅆ(124.216) 10.30 128 0
2899576 ㄹㅇㅆㅇㅆ 이새끼 반박할때는 쿨한척 운좋은척 다하다가 [1] ㅇㅇ(118.235) 10.30 133 5
2899574 요즘들어 실패의 관점이 바뀜 프갤러(114.205) 10.30 98 0
2899572 초 고수 [3] 배구공(119.202) 10.30 104 0
2899570 ㅆㅇㅆ 얘는 무슨 자신감으로 이렇게 사냐 [1] ㅇㅇ(106.101) 10.30 133 4
2899569 ㅆㅇㅆ야 니 인생 계획은 뭐냐? ㅇㅇ(51.159) 10.30 100 3
2899567 이제 ㅆㅇㅆ 욕하는것도 노잼이네 [1] ㅇㅇ(106.101) 10.30 138 3
2899566 내가 프갤서 느끼는건 자칭 보수 우파라는 애들은 선동과 날조가 패시브임 ㅆㅇㅆ(124.216) 10.30 104 1
2899564 내가 프론트엔드 공부하는데 [2] 호호(121.130) 10.30 136 0
2899562 자바스크립트 어렵다 [1] 호호(121.130) 10.30 112 0
2899561 같이 취미코딩 하실분 Mosaic갤로그로 이동합니다. 10.30 91 0
2899555 '19'갤꼬라지봐라시발.gif [1] 박민준갤로그로 이동합니다. 10.30 111 0
2899544 엔비디아에서 깐부치킨 광고하길래 시킬려는데 [1] 헬마스터갤로그로 이동합니다. 10.30 120 0
2899542 안녕 30 고졸 노베이스 비전공자 컴공 취준생이다 [6] 30고졸노베(125.191) 10.30 225 0
2899539 AI 바이브 코딩 인생 40 년 갈아 넣었습니다. [1] 프갤러(59.16) 10.30 153 0
2899537 리액트 루프에서 index를 키로 쓰지말라는 질문 근데 진짜 날카롭네 [2] ㅆㅇㅆ(124.216) 10.30 133 0
2899536 중국쪽 머기업 프론트 엔드 개발자 면접 질문들 정리한거 봤는 [2] ㅆㅇㅆ(124.216) 10.30 157 0
2899535 요즘 책 종종 읽는데 [2] 루도그담당(58.239) 10.30 144 0
2899534 프로그램 최고 장점이 프로그램은 인터넷에 읽을게 많아 [2] ㅆㅇㅆ(124.216) 10.30 123 0
2899533 몸이 아프질 말아야.. 모든게 의미가 있는거지 [9] 나르시갤로그로 이동합니다. 10.30 138 0
2899531 나 현역때는 기억에 의존하는 개발하기 싫어했는데 [8] chironpractor갤로그로 이동합니다. 10.30 147 0
2899529 너네 근데 깃 명령어 같은거 다 외우냐 [4] ㅆㅇㅆ(124.216) 10.30 145 0
2899526 코드 짜는건 클리셰쓰듯이 해야하는거 아닐까 싶다 항상 [2] ㅆㅇㅆ(124.216) 10.30 100 0
2899525 11시에 일어나서 밍기적대니 지금이네 ㅆㅇㅆ(124.216) 10.30 113 0
2899524 나 칫과 가는데 응원 좀 해주라 ㅠㅠ [8] 나르시갤로그로 이동합니다. 10.30 136 1
2899522 쌀 소고기 방어했다니까 진짠줄 알더라 chironpractor갤로그로 이동합니다. 10.30 125 1
2899521 무릎 아파... 그냥 지나가 .. 넥도리아(223.38) 10.30 91 0
2899520 나는 c cpp도 잘모름 [2] 배구공(119.202) 10.30 165 0
2899518 [대한민국] 김용현 장관 재판 내용 일부 프갤러(121.172) 10.30 100 0
2899517 요즘 써보는 AI 챗봇 중에 쓸만한 거 발견한 후기(무료 팁 포함) 프갤러(1.212) 10.30 113 0
2899516 ㅆㅇㅆ가 만든 타로 사이트 고졸이 하루아침에 만드는 정도인데 ㅇㅇ(121.140) 10.30 171 6
2899515 내가 병렬 프로그래밍 때문에 피시방 가야겠다 ㅠ [3] 프갤러(222.97) 10.30 157 0
2899514 대학원 자퇴하고 싸피나 오토에버 임베디드 가는거 어케 생각? [8] 프갤러(117.111) 10.30 269 0
2899513 [두산로보틱스] 로키부트캠프 AI·로봇 엔지니어 양성과정 7기 모집 (~ 프갤러(14.32) 10.30 148 0
2899512 와 ㅋㅋ [5] 에이도비갤로그로 이동합니다. 10.30 173 0
2899511 간혹 희안한 사상을 가진 애들이 있네 [9] 루도그담당(211.184) 10.30 214 0
2899509 자라 ㅇㅅㅇ [1] 헤르 미온느갤로그로 이동합니다. 10.30 111 0
2899508 근데 이재용도 이재명 빨다가 [1] 프갤러(175.212) 10.30 224 0
2899507 이제 우라나라도 핵잠 보유하는거냐? [2] 루도그담당(118.235) 10.30 127 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2