본 게시글은 AI시대의 컴퓨터 개론 - 내용 점검 문제 8장 풀이입니다. 제가 이 책을 공부하면서 풀었던 풀이의 흔적이므로 정답이 아닐 수 있습니다. 혹여나 틀린 부분이 있어 오류를 댓글로 지적해주신다면 감사하겠습니다.
객관식
1. 프로그래밍 언어에 대한 설명으로 옳지 않은 것은?
A. 사람과 컴퓨터가 서로 의사교환을 하기 위한 것이 프로그램 언어이다.
B. 어셈블리 언어란 0과 1로 표현되는 프로그래밍 언어로서 컴퓨터가 직접 이해할 수 있는 유일한 언어이다.
C. 컴퓨터가 이해하기 쉬운 언어를 저급 언어라 하고 이간이 이해하기 쉽고 친근한 언어를 고급 언어라 한다.
D. 1950년 중반부터는 인간의 자연 언어와 비슷한 포트란, 코볼, 베이직 등의 고급 언어가 개발되어 프로그램 개발에 사용되었다.
0과 1로 표현되는 언어는 기계어다.
어셈블리 언어는 기계어를 사람이 이해하기 쉽도록 니모닉(Mnemonic) 부호로 표현한 언어다. 어셈블리 언어는 어셈블러에 의해 기계어로 변환되어야 컴퓨터가 이해할 수 있다.
2. 고급 언어로 볼 수 없는 것은?
A. 코볼
B. 어셈블리어
C. 파스칼
D. C언어
어셈블리어는 기계어와 1:1로 대응되는 저급 언어다.
반면 코볼, 파스칼, C언어는 모두 사람이 이해하기 쉽게 설계된 고급 프로그래밍 언어로, 컴파일러나 인터프리터를 통해 기계어로 변환되어야 실행할 수 있다.
3. C언어의 특징에 대한 설명으로 옳지 않은 것은?
A. 다른 고급 언어와 비교해 하드웨어를 보다 확실하게 통제할 수 있다.
B. 프로그램의 이식성이 높다.
C. 다른 고급 언어와 비교해 기계어 명령에 가까운 형태의 언어가 아니다.
D. 풍부한 연산자와 데이터 형을 갖고 있다.
C언어는 고급 언어이면서도 어셈블리어와 같은 저급 언어의 특성을 가졌다.
포인터를 통한 메모리 직접 접근, 비트 단위 연산자 제공 등 기계어에 가까운 특성을 갖추고 있다.
4. 다음 중 고급 언어에 대한 설명으로 옳은 것은?
A. 고급 언어는 저급 언어와는 달리 사람이 이해하기 쉬운 언어이다.
B. 기계어, 어셈블리어가 고급 언어의 대표적인 언어이다.
C. ADD, STA, LDA 등은 고급 언어인 어셈블리어에서 사용한다.
D. 레지스터의 종류와 이용 방법 등을 이해해야만 사용할 수 있다.
B에 작성된 기계어와 어셈블리어는 저급 언어다.
C에 작성된 명령어들은 어셈블리어(저급 언어)에서 사용된다. 레지스터를 이해해야 하는 것은 저급 언어의 특징이다.
5. 프로그램 개발 환경에 대한 설명으로 옳지 않은 것은?
A. 프로그램을 개발하려면 개발 도구가 필요하다.
B. 컴파일러는 텍스트 문서, 프로그램, 데이터 파일 등을 작성할 때 사용하는 기본적인 프로그램이다.
C. 디버거란 프로그램 오류를 쉽게 찾아 수정할 수 있도록 도와주는 프로그램이다.
D. 링커는 여러 목적 파일을 하나의 실행 파일로 만들어준다.
컴파일러는 원시 프로그램을 목적 프로그램으로 번역하는 언어 번역 프로그램이다. 텍스트 문서나 프로그램을 작성하는 것은 텍스트 에디터의 역할이다.
6. 프로그램을 개발하기 위해 해야 할 일을 설명한 것이다. 옳지 않은 것은?
A. 프로그램에서 가장 중요한 부분은 기계어로 작성한다.
B. 프로그래밍 언어를 선정하는 일이 개발도구를 결정하는 일에 앞서 수행되어야 한다.
C. 어떤 프로그래밍 언어를 사용하느냐에 따라 개발도구가 결정된다.
D. 고급 언어를 이용해 개발할 수도 있고, 필요에 따라 어셈블리어를 사용하기도 한다.
프로그램의 중요도와 관계없이 기계어로 직접 작성하는 것은 매우 비효율적이다. 고급 언어나 어셈블리어로 작성한 후 컴파일러나 어셈블러를 통해 기계어로 변환하는 것이 일반적인 개발 방식이다.
7. 소스와 컴파일에 대한 설명으로 옳지 않은 것은?
A. 프로그램 언어를 이용해 원하는 작업을 기술한 내용을 소스 코드 또는 코드라 한다.
B. 통합개발환경을 이용한다면 개발 환경에 주어진 편집기를 이용해 좀 더 편하게 소스를 작성할 수 있다.
C. 컴파일러는 고급 언어로 작성된 프로그램을 기계어로 바꿔주는 프로그램이다.
D. 컴파일러에 의해 처리되기 전의 프로그램을 목적 코드라 한다.
컴파일러에 의해 처리되기 전의 프로그램은 소스 코드다. 컴파일러에 의해 처리된 후의 결과물이 목적 코드다.
8. 컴파일러와 인터프리터에 관한 설명으로 옳지 않은 것은?
A. 컴파일러는 프로그램의 전체를 한꺼번에 번역한다.
B. 인터프리터를 사용하는 대표적인 언어로는 BASIC이 있다.
C. C언어는 인터프리터와 컴파일러의 중간 방식을 사용하는 언어이다.
D. 한 번 컴파일한 후에는 매번 빠른 시간 내에 전체 실행이 가능하다.
C언어는 컴파일러를 사용하는 대표적인 언어다. C언어는 소스코드가 직접 기계어로 컴파일되어 실행된다.
중간 방식을 사용하는 것은 Java다. Java는 바이트코드로 컴파일된 후 가상머신에서 인터프리트된다.
9. 절차지향 언어와 객체지향 언어에 대한 설명으로 옳지 않은 것은?
A. 절차지향 언어의 프로그래밍 방식은 동사, 객체지향 언어의 프로그래밍 방식은 명사 중심이다.
B. 절차지향 언어는 문제를 여러 개의 작은 함수로 나누어 그 문제를 해결한다.
C. 객체지향 언어에는 일반적으로 FORTRAN, BASIC, COBOL, PASCAL, C 등이 있다.
D. 객체지향 언어는 문제를 구성하는 객체를 만들어 이 객체들 간의 메시지 교환으로 그 문제를 해결한다.
FORTRAN, BASIC, COBOL, PASCAL, C는 모두 절차지향 언어다.
10. 언어와 언어의 특징이 잘못 연결된 것은?
A. 포트란 - 수학적 문제들을 해결하기 위해 고안
B. 코볼 - 기업의 사무처리에 적합한 프로그래밍 언어
C. 베이직 - 알고리즘 학습에 적합하도록 고안
D. C - B 언어에서 발전된 언어
베이직$_{BASIC; \space Beginner's \space All-purpose \space Symbolic \space Instruction \space Code}$은 초보자들의 프로그래밍 학습을 위해 고안된 언어다.
11. 저급 언어에 대한 설명으로 옳지 않은 것은?
A. 저급 언어는 사람보다 컴퓨터에 친숙한 언어로 기계어와 어셈블리어가 저급 언어에 해당한다.
B. 컴퓨터 하드웨어에 대한 강력한 통제가 가능하다.
C. 0과 1로만 구성된 기계 중심의 언어이기 때문에 프로그래밍하기 쉽다.
D. 어셈블리어는 기계어의 연산코드와 피연산자를 프로그래머가 좀 더 이해하기 쉬운 기호 형태로 일대일 대응시킨 프로그래밍 언어다.
0과 1로 구성된 기계어나 기호로 표현된 어셈블리어는 컴퓨터가 직접 이해할 수 있지만, 사람이 프로그래밍하기는 매우 어렵다.
12. 인터프리터 언어로만 구성된 것은?
A. C, 파스칼
B. 베이직, C
C. C++, 자바
D. 베이직, 파이썬
13. 빈칸에 들어가기에 적합한 것은?
A. 통합 개발 환경
B. 개발 도구
C. 인터프리터
D. 비주얼 베이직
14. 고급 언어에 대한 설명으로 옳지 않은 것은?
A. 포트란은 과학과 공학 및 수학적 문제들을 해결하기 위해 존 베커스가 고안한 언어다.
B. 코볼은 기업의 사무처리에 적합한 프로그래밍 언어다.
C. 1980년대에 개인용 컴퓨터의 출현과 함께 파스칼은 기본 개발 언어로 탑재되어 범용적인 언어로 널리 사용되었다.
D. C언어는 1872년경, 시스템 PDP-11에서 운용되는 운영체제 유닉스를 개발하기 위한 프로그래밍 언어이다.
1980년대 개인용 컴퓨터의 기본 개발 언어로 탑재된 것은 BASIC이다.
파스칼은 주로 교육용 언어로 사용되었으며, 구조적 프로그래밍의 개념을 잘 반영한 언어지만 PC의 기본 개발 언어로 널리 사용되지는 않았다.
15. 프로그래밍 언어 개발 순서가 옳지 않은 것은?
A. 포트란 → 코볼 → 파스칼 → C
B. C++ → 파이썬 → 자바 → 스위프트
C. 코볼 → C → C++ → C#
D. C → 파이썬 → 스위프트 → C#
C(1972) → 파이썬(1991) → C#(2000) → 스위프트(2014)가 올바른 순서다.
16. 객체에 대한 설명으로 옳지 않은 것은?
A. 객체는 현실 세계의 사물이나 개념을 시스템에서 이용하기 위해 현실 세계를 자연스럽게 표현해 손쉽게 이용할 수 있도록 만든 소프트웨어 모델이다.
B. 객체의 특성을 표현하는 정적인 성질을 행동이라 한다.
C. 자료와 일련의 처리 명령을 하나로 메꾸어 놓은 메소드로 구성되는 프로그램 단위이다.
D. 객체 중심의 시스템에서는 객체의 특성을 조금만 이해한다면 일반 사용자도 시스템에 이용되는 객체를 이해하는데 어려움이 없다.
객체의 특성을 표현하는 정적인 성질은 속성$_{attribute}$이며, 행동$_{behavior}$은 객체가 수행할 수 있는 동적인 기능을 의미한다. 객체는 이러한 속성과 행동을 하나로 캡슐화한 소프트웨어 단위다.
17. 보기에서 객체지향 언어를 모두 고른다면?
A. ㄱ
B. ㄴ
C. ㄷ
D. ㄹ
Python과 Java는 객체지향 프로그래밍 언어다. PASCAL과 BASIC은 절차지향 언어로 함수를 기반으로 순차적인 처리를 하는 프로그래밍 방식을 사용한다.
18. Java 언어에 관한 설명으로 옳지 않은 것은?
A. C++에서 발전한 언어이다.
B. 전형적인 절차지향 언어이다.
C. 자바의 기본 개발 환경을 SDK라 한다.
D. 미국의 SUN 사에서 가전제품들을 제어하기 위해 고안된 언어에서 시작되었다.
Java는 절차지향이 아닌 객체지향 패러다임을 기반으로 설계되었다.
19. 빈칸에 들어갈 말로 가장 적합한 것은?
A. 자바 가상 기계
B. 인터프리터
C. 컴파일러
D. 로더
JVM$_{Java \space Virtual \space Machine}$은 자바 프로그램의 플랫폼 독립성을 보장하는 요소다. 자바 컴파일러가 생성한 바이트코드는 JVM이라는 가상 환경에서 실행된다.
20. Python과 R에 대한 설명으로 옳지 않은 것은?
A. Python은 인터프리터 언어로 대화형 방식으로 코딩한다.
B. R은 풍부한 통계 분석 패키지를 제공하나 데이터를 완성도 높은 그래프로 시각화하려면 다른 전문 소프트웨어를 사용해야 한다.
C. Python은 객체지향 언어다.
D. Python은 변수를 선언하지 않고 바로 대입할 수 있다.
R은 통계 분석뿐만 아니라 ggplot2와 같은 시각화 패키지를 제공해 데이터 시각화가 가능하다.
괄호 채우기
1. 소스 파일을 목적 파일로 만들어주는 프로그램을 ___라고 한다.
컴파일러
컴파일러는 고급 언어로 작성된 소스 코드를 기계어나 목적 코드로 변환하는 언어 번역 프로그램이다.
2. 프로그램을 개발하는데 필요한 컴파일러, 디버거, 링커, 에디터 등을 통합적으로 제공하는 개발 환경을 ___라 한다.
IDE
IDE$_{Integrated \space Development \space Environment}$는 프로그램 개발에 필요한 모든 도구를 하나의 환경에서 통합해 제공한다.
3. 목적 파일을 실행 가능한 실행 파일로 만들어주는 프로그램이 ___다.
링커
링커는 컴파일러가 생성한 여러 개의 목적 파일과 라이브러리 파일을 하나로 결합해 실행 가능한 파일을 생성한다. 이 과정을 링킹$_{linking}$이라 하고 이를 수행하는 프로그램이 링커다.
4. ___란 버그를 잡는다는 의미로 오류를 찾는 것을 말한다.
디버깅
5. ___는 프랑스의 수학자 이름에서 따온 언어로 프로그램을 작성하는 방법인 알고리즘 학습에 적합하도록 개발된 프로그래밍 언어다.
파스칼
6. ___는 2007년 MIT 대학의 미디어랩에서 개발된 비주얼 프로그램 개발 도구다.
스크래치
7. 자바의 ___는 다양한 하드웨어 및 소프트웨어 플랫폼에서 효율적으로 실행하기 위해 설계된 구조 중립적인 중간 형태의 이진 파일이다.
ByteCode
바이트코드는 자바 소스코드가 컴파일된 중간 단계의 코드다. JVM이 이 바이트코드를 해석해 실행하기 때문에 서로 다른 플랫폼에서도 동일한 실행 결과를 보장할 수 있다.
8. ___는 통계 분석 및 그래픽 작업을 위한 인터프리터 프로그래밍 언어이자 무료 소프트웨어 환경으로, 1993년 뉴질랜드의 오클랜드 대학교에서 개발되었다.
R
9. ___언어는 문제를 여러 개의 작은 함수로 나누어 그 문제를 해결한다. 반면에 ___언어는 문제를 구성하는 객체를 만들어 이 객체들 간의 메시지 교환으로 그 문제를 해결한다.
절차지향형, 객체지향형
10. ___은 네덜란드의 귀도 반로섬이 개발한 객체지향 프로그래밍 언어로 간단한 문법 구조를 가진 대화형 언어다.
Python
주관식
1. 프로그래밍 언어에서 고급 언어와 저급 언어의 기준과 종류를 설명하시오.
`고급 언어`
`- 기준: 인간의 언어와 유사한 형태로, 이해와 작성이 쉬움`
`- 종류: Python, Java, C++, JavaScript, Ruby`
`저급 언어`
`- 기준: 컴퓨터가 직접 이해할 수 있는 형태로, 기계와 밀접한 언어`
`- 종류: 기계어(0과 1로 구성), 어셈블리어(기계어의 기호화)`
2. 컴파일러와 어셈블리의 역할을 설명하시오.
`컴파일러: 고급 언어로 작성된 소스 코드를 기계어로 번역하는 프로그램`
`- 전체 코드를 한 번에 번역`
`- 실행 파일 생성`
`- 실행 속도가 빠름`
`어셈블러: 어셈블리어를 기계어로 변환하는 프로그램`
`- 1:1 변환 방식`
`- 기호를 기계어 명령으로 변환`
`- 하드웨어 직접 제어 가능`
3. 컴파일러와 인터프리터의 역할과 특징을 설명하시오.
`컴파일러`
`- 역할: 소스코드 전체를 기계어로 한번에 번역`
`- 특징`
`- 실행 파일 생성`
`- 실행 속도 빠름`
`- 한번에 전체 오류 검출`
`- 대표언어: C, C++, Java`
`인터프리터`
`- 역할: 소스코드를 한 줄씩 해석하여 바로 실행`
`- 특징`
`- 실행 파일 생성 안 함`
`- 실행 속도 상대적으로 느림`
`- 실시간 오류 검출`
`- 대표언어: Python, JavaScript`
4. 여러분이 사용했거나 앞으로 사용할 통합개발환경에 대해 간단히 설명하시오.
`VS Code (Visual Studio Code)`
`- Microsoft에서 개발한 무료 코드 에디터`
`- 다양한 프로그래밍 언어 지원`
`- 풍부한 확장 프로그램`
`- Git 연동`
`- 디버깅 기능`
5. 1세대부터 3세대까지 언어의 특징을 설명하시오.
`1세대 언어(기계어)`
`- 0과 1로만 구성`
`- 컴퓨터가 직접 실행 가능`
`- 하드웨어 의존적`
`- 프로그래밍 매우 어려움`
`2세대 언어(어셈블리어)`
`- 기계어를 기호로 표현`
`- 어셈블러로 기계어 변환`
`- 하드웨어 직접 제어 가능`
`- 기계어보다 이해하기 쉬움`
`3세대 언어(고급언어)`
`- 인간의 언어와 유사`
`- 하드웨어 독립적`
`- 컴파일러/인터프리터 필요`
`- 프로그래밍 용이`
`- C, Java, Python 등`
7. 온라인 IDE와 에디터를 소개해주는 사이트 geekflare.com/online-code-editors에서 2개의 온라인 IDE 사이트를 소개하시오.
`Repl.it, CodePen`
8. 자바 언어의 특징을 설명하시오.
`1. 객체지향(Object-Oriented)`
`- 캡슐화, 상속, 다형성 지원`
`- 재사용성과 유지보수 용이`
`2. 플랫폼 독립성(Write Once, Run Anywhere)`
`- JVM을 통해 어느 운영체제에서도 실행 가능`
`- 바이트코드로 컴파일`
`3. 안정성`
`- 강력한 타입 체크`
`- 자동 메모리 관리(가비지 컬렉션)`
`- 예외처리 기능`
10. 절차지향과 객체지향의 프로그래밍 방식을 설명하시오.
절차지향 | 객체지향 |
순차적인 처리를 중요시하는 방식 | 객체들의 상호작용을 중요시하는 방식 |
프로그램을 기능 중심으로 나누어 작성 | 프로그램을 객체 단위로 나누어 작성 |
함수를 기본 단위로 사용 | 클래스와 객체를 기본 단위로 사용 |
C언어가 대표적 | Java, C++이 대표적 |
실행 속도가 빠름 | 재사용성과 유지보수가 용이 |
'CSE > CS 기초' 카테고리의 다른 글
[컴퓨터학개론] AI시대의 컴퓨터 개론 - 내용 점검 문제 7장 (0) | 2025.01.01 |
---|---|
[컴퓨터학개론] AI시대의 컴퓨터 개론 - 내용 점검 문제 6장 (0) | 2025.01.01 |
[컴퓨터학개론] AI시대의 컴퓨터 개론 - 내용 점검 문제 5장 (2) | 2025.01.01 |
[컴퓨터학개론] AI시대의 컴퓨터 개론 - 내용 점검 문제 4장 (4) | 2025.01.01 |
[컴퓨터학개론] AI시대의 컴퓨터 개론 - 내용 점검 문제 3장 (1) | 2025.01.01 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!