정보처리기사

[정보처리기사 실기 기출] 2021년 3회

juble 2024. 10. 11. 12:17

01. AAA, Triple-A라고 읽는 이 용어는 보안의 세가지를 합쳐 축약한 용어이다. 다음 ①~③에 해당하는 용어를 <보기>에서 찾아쓰시오.

Authentication, Application, Accounting, Ascii, Avalanche, Authorization
<보기>
( ① ) : 사용자가 시스템에 접근을 허용하기 전에 가입자 신분을 확인
( ② ) : 사용자가 시스템 자원에 대한 접근 권한 유무를 판별 후 접근 허가를 결정
( ③ ) : 사용 시간, 정보, 위치 등 정보 수집 등 시스템 자원 사용의 정보를 수집하고 관리 
① Authentication(인증) , ② Authorization(인가) , ③ Accountin(계정관리)

 

* AAA 서버 

  • AAA는 각각 인증(Authentication), 인가(Authorization), 과금(Accounting)을 의미한다.
  • AAA 서버는 사용자의 시스템의 접근 처리와 서비스를 제공하는 과정에 있어 인증, 인가, 과금 기능을 제공하는 서버이다.
    • 인증 : 시스템에 접근하기 위한 사용자 인증을 검증하거나 자원에 대한 접근을 제어할 때 사용한다.
    • 인가 : 사용자에게 어떠한 권한과 서비스를 제공할 것인가를 결정한다.
    • 과금 : 사용자의 자원에 대한 사용 정보를 모아 과금, 보고서, 용량 증설 등에 사용되는 계정을 관리한다.

 


02. 데이터 제어어(DCL)의 하나인 GRANT의 기능에 대해 간략히 서술하시오.

사용자에게 접속권한, 생성 권한 등을 부여하는 명령어 (흥달쌤)
CRANT 명령어는 관리자가 사용자에게 데이터베이스에 대한 권한을 부여하기 위한 명령어이다. (이기적)

 

* SQL 제어어(DCL, Data Control Language)

COMMIT - 명령어로 수행된 결과를 실제 물리적 디스크로 저장하고, 명령어로 수행을 성공적으로 완료하였음을 선언
- 데이터베이스 내의 연산이 성공적으로 종료되어 연산에 의한 수정 내용을 지속적으로 유지하기 위한 명령어이다.
ROLLBACK - 명령어로 수행을 실패하였음을 알리고, 수행된 결과를 원상복귀시킴
- 데이터베이스 내의 연산이 비정상적으로 종료되거나 정상적으로 수행이 되었다 하더라도 수행되기 이전 상태로 되돌리기 위해 연산 내용을 취소할 때 사용하는 명령어이다. 
GRANT - 데이터베이스 사용자에게 사용 권한 부여
- 관리자가 사용자에게 데이터베이스에 대한 권한을 부여하기 위한 명령어이다. 
- 구문 : GRANT 권한내용 ON 테이블_이름 TO 사용자 [WITH GRANT OPTION];
REVOKE - 데이터베이스 사용자에게 사용 권한 취소
- 관리자가 사용자에게 부여했던 권한을 취소하기 위해 사용되는 명령어이다. 
- 구문 : REVOKE 권한내용 ON 테이블_이름 FROM 사용자 [CASCADE];
 

03. 다음 빈칸 (     ) 안에 공통으로 들어갈 가장 적합한 용어를 쓰시오.

(      ) 스푸핑(Spoofing) 공격은 동일 네트워크에 존재하는 공격 대상 PC의 IP 주소를 공격자 자신의 랜카드(MAC) 주소와 연결해 다른 PC에 전달되어야 하는 정보를 가로채는 공격을 말한다.
어떤 PC에 (      ) 스푸핑 기능을 가진 악성코드가 설치되면 약간의 조작으로 동일 구역 내의 다른 PC에 쉽게 악성코드를 설치할 수 있다. 즉, 동일 네트워크 하의 PC가 외부 네트워크로 접속을 시도할 경우, 악성 코드에 감염된 PC를 경유해서 접속함으로써 해당 악성코드에 자동으로 감염되게 되는 것이다. 또한 동일 네트워크 하의 모든 PC가 감염된 PC를 게이트웨이로 인식해 외부 네트워크와 통신하기 위해 발생하는 모든 패킷을 해당 PC에 전송하므로 네트워크 속도가 크게 느려진다.
ARP (Address Resolution Protocol)

 

* ARP 스푸핑 공격(ARP Spoofing Attack)

  • ARP 스푸핑 공격은 LAN에서 사용하는 ARP 프로토콜의 허점을 이용하여 자신의 MAC(Media Access Control)주소를 다른 컴퓨터의 MAC인 것처럼 속이는 공격이다. ARP 스푸핑 공격은 ARP Cache 정보를 임의로 바꾼다고 하여 'ARP Cache Poisoning 공격'이라고도 한다. 
  • ARP 스푸핑 공격은 LAN에서 데이터링크 계층 주소인 MAC주소를 속여서 트래픽을 스니핑(감청)하는 공격이다. 
  • 데이터링크 계층 주소는 서로 다른 네트워크로 라우팅되지 않으므로 공격 대상도 동일 네트워크 대역에 있어야만 한다. 
  • ARP 스푸핑 공격은 각 시스템에 기록된 MAC 주소가 동적으로 유지되는 점을 이용한 공격이므로 MAC 주소가 정적으로 사용된다면 이러한 공격이 불가능해진다. 

* 스푸핑(Spoofing)

  • IP 스푸핑
    • IP 자체의 보안 취약성을 악용한 것으로 자신의 IP주소를 속여서 접속하는 공격
    • IP 스푸핑을 통해 서비스 거부 공격(Dos)도 수행 가능하며 공격 대상 컴퓨터와 서버 사이의 연결된 세션을 끊을 수도 있다. 
    • 종단 인증(end point authentication) 같은 방법으로 해결한다. 
  • DNS 스푸핑
    • 공격대상에게 전달되는 DNS IP주소를 조작하여 의도치 않는 주소로 접속하는 공격
    • 공격대상은 정상적인 URL을 통해서 접속하지만, 실제로 가짜 사이트로 접속된다. 

 


04. 어떤 모듈이 다른 모듈의 내부 논리 조작을 제어하기 위한 목적으로 제어신호를 이용하여 통신하는 경우이며, 하위 모듈에서 상위 모듈로 제어신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도현상이 발생하게 되는 결합도를 무엇이라 하는지 영문으로 쓰시오. 

control (coupling)

 

 

* 결합도(Coupling)

  • 두 모듈 간의 상호 의존도
  • 모듈 간의 결합도를 약하게 하면 모듈 독립성이 향상되어 시스템을 구현하고 유지보수 작업이 쉽다. 
  • 즉, 결합도가 낮을수록 높은 품질의 모듈이다. 

* 결합도 유형

자료
(Data)
- 모듈 간의 인터페이스가 자료 요소로만 구성된 경우
- 모듈 간의 인터페이스로 값이 전달되는 경우
결합도 약함
스탬프
(Stamp)
- 두 모듈이 동일한 자료 구조를 조회하는 경우 
- 모듈 간의 인터페이스로 배열이나 오브젝트, 스트럭처 등이 전달되는 경우 
 
제어
(Control)
- 어떤 모듈이 다른 모듈의 내부 논리 조작을 제어하기 위한 목적으로 제어신호를 이용하여 통신하는 경우 
- 하위 모듈에서 상위 모듈로 제어신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도현상이 발생함
외부
(External)
어떤 모듈에서 외부로 선언한 변수(데이터)를 다른 모듈에서 참조할 경우   
공통
(Common)
여러 모듈이 공통 자료 영역을 사용하는 경우   
내용
(Content)
한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 조회하도록 설계되었을 경우   결합도 강함

 


05. 객체 생성만을 전문으로 하는 서브 클래스를 정의하고, 해당 객체에서 어떤 객체를 만들지 결정하여 반환하는 메소드를 사용하여 필요한 객체를 생성하는 생성 패턴은 무엇인지 <보기>에서 골라 쓰시오.

Abstract Factory, FactoryMethod, Prototype, Builder, Observer, Facade, Composite, Template, Method, Singleton
Factory Method

 

* 생성패턴 : 객체를 생성하는 것과 관련된 디자인 패턴 

  • Abstraction Factory
    • 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴이다.
    • 관련된 서브 클래스를 그룹지어 한 번에 교체할 수 있다.
  • Builder
    • 작게 분리된 인스턴스를 조립하듯 조합하여 객체를 생성한다.
  • Factory Method
    • 객체를 생성하기 위한 인터페이스를 정의하여 어떤 클래스가 인스턴스화될 것인지는 서브 클래스가 결정하도록 한다.
    • Virtua-Contructor 패턴이라고도 한다.
  • PRototype
    • 원본 객체를 복제하여 객체를 생성하는 패턴이다.
    • 일반적인 방법으로 객체를 생성하고 비용이 많이 소요되는 경우에 주로 사용한다.
  • Singleton
    • 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 한다.
    • 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴이다.

더 자세한 디자인 패턴은 하단 링크 참고! 

2024.09.23 - [기술 노트] - [Study] 디자인 패턴(Design Pattern)


06. 다음 빈칸 (     ) 안에 공통으로 들어갈 가장 적합한 용어를 쓰시오.

파일 구조에는 순차, (      ), 해싱이 있다. 
- 순차 접근 방법은 레코드가 저장되어 있는 물리적 순차를 따른다. 즉, 레코드의 물리적 순서와 논리적 순서가 같게 순차적으로 저장하는 방법이다.
- (      ) 접근 방법은 레코드 접근을 위해 해당 (      )을 찾아, 그 (      )이 가리키는 주소를 따라가서 레코드에 접근할 수 있도록 데이터를 저장하는 데이터 접근 방식이다. (      )은 <값, 주소>의 자료구조로 구성되어 있다.
- 해싱 접근 방법을 이용하는 파일 구조는 (      ) 구조에 의존할 필요 없이 원하는 레코드에 대한 디스크 블록 주소를 레코드의 탐색 값에 대한 함수 계산을 통해 직접 얻을 수 있다.
색인 (색인순차, 인덱스)

 

* 파일의 구조 

  • 순차 파일(Sequential File, 순서 파일)
    • 순차 파일은 레코드를 논리적인 처리 순서에 따라 연속된 물리적 공간으로 기록하는 것
  • 직접 파일(Direct File)
    • 파일을 구성하는 레코드를 임의의 물리적 저장공간에 기록하는 것
  • 색인 순차 파일(Indexed Sequential File)
    • 순차 파일과 직접 파일에서 지원하는 편성 방법이 결합된 형태

07. 다음은 점진적 통합 테스트에 대한 설명이다. 빈칸에 들어갈 용어를 <보기>에서 골라 쓰시오.

 점진적 통합 테스트는 단계적으로 각 모듈을 통합하며 테스트를 한다. 오류 수정이 쉽고 인터페이스 관련 오류를 테스트할 수 있다.
 점진적 통함 테스트 중 ( ① ) 테스트는 가장 아래에 있는 모듈부터 테스트를 시작한다. ( ① ) 테스트에서는 상위 모듈의 역할을 하는 ( ② )가 필요하다. ( ② )는 하위 모듈을 순서에 맞게 호출하고 호출 시 필요한 매개변수를 제공하며 결과를 전달하는 역할을 한다.
① 상향식 통합 , ② 드라이버

 

 

테스트 드라이버
(Test Driver)
- 상향식 테스트 시 상위 모듈 없이 하위 모듈이 존재할 때 하위 모듈 구동 시 자료 입출력을 제어하기 위한 제어 모듈(소프트웨어)이다. 
- 컴포넌트나 시스템을 제어하거나 호출하는 컴포넌트를 대체하는 모듈이다. 
테스트 스텁
(Test Stub)
- 하향식 테스트 시 상위 모듈은 존재하나 하위 모듈이 없는 경우의 테스트를 위해 임시 제공되는 모듈이다.
- 골격만 있는 또는 특별한목적의 소프트웨어 컴포넌트를 구현한 것을 의미한다. 
- 스텁을 호출하거나 스텁에 의존적인 컴포넌트를 개발하거나 테스트할 때 사용한다.    

08. 윈도우즈나 매킨토시 등에서 사용자가 마우스나 키보드로 아이콘이나 메뉴를 선택하여 원하는 작업을 수행하는 사용자 인터페이스를 의미하는 용어를 쓰시오.

GUI (Graphical User Interface)

 

* 사용자 인터페이스

GUI
(Graphical User Interface)
- 윈도우즈나 매킨토시 등의 환경
- 그래픽 화면에서 사용자가 마우스나 키보드로 아이콘이나 메뉴를 선택하여 원하는 작업을 수행
CUI
(Command Line Interface)
- 유닉스와 리눅스 등의 환경
- 사용자가 키보드로 명령어(Command)를 입력해 원하는 작업을 수행

 


09. 다음 빈칸 (     ) 안에 공통으로 들어갈 가장 적합한 용어를 쓰시오.

(      ) 다이어그램은 시스템을 구성하는 객체 간의 관계를 추상화한 모델을 논리적 구조로 표현한다. (      ) 다이어그램은 클래스, 속성, 오퍼레이션, 연관 관계를 이용하여 시스템을 정적인 관점으로 나타낸 것이다. (      ) 다이어그램을 통해 해당 시스템에서 사용되는 데이터를 발견할 수 있다.
클래스 다이어그램

 

* 클래스 다이어그램 (Class Diagram) 

  • 객체지향 시스템의 가장 근간이 되는 다이어그램으로 시스템의 정적인 구조를 나타낸다.
  • 시스템을 구성하는 객체 간의 관계를 추상화한 모델을 논리적 구조로 표현한다.
  • 객체지향 개발에서 공통으로 사용된다.
  • 분석, 설계, 구현 단계 전반에 지속해서 사용된다.

* UML 특징 : 가시화 언어, 명세화 언어, 구축 언어, 문서화 언어

 

* 구조적 다이어그램(Structure Diagram)

  • 객체 다이어그램 : 시스템 내의 객체와 이들 간의 관계를 표현
  • 컴포넌트 다이어그램 : 시스템의 물리적 구조, 즉 컴포넌트와 그 상호작용을 표현
  • 배치 다이어그램 : 시스템의 물리적 배치와 구성요소들 간의 관계르 표현

* 행위  다이어그램(Behavior Diagram)

  • 유스 케이스 다이어그램 : 시스템의 기능과 사용자 간의 상호작용을 표현
  • 순차 다이어그램 : 객체 간의 상호작용을 시간 순서에 따라 표현
  • 커뮤니케이션 다이어그램 : 객체 간의 상호작용과 통신을 표현
  • 상태 다이어그램 : 객체의 생명주기 동간의 상태 변화를 표현 
  • 활동 다이어그램 : 시스템의 프로세스 또는 워크플로우를 표현
  • 상호작용 다이어그램 : 시스템의 상호작용을 하나의 고수준 워크플로우로 표현
  • 타이밍 다이어그램 : 객체의 행동과 시간에 따른 상호작용을 표현 

 


10. 1970년대 IBM이 개발한 대칭키 암호화 알고리즘으로 평문을 64bit로 블록화하고 실제 키의 길이는 56bit를 이용한 16라운드 Feistel 구조의 전사 공격(Brute-Force Attack)에 취약한 비밀키 암호화 기법을 의미하는 용어를 쓰시오. 

DES (Data Encryption Standard)

 

 

* 스트림 방식의 비밀키 암호화 기법

DES
(Data Encryption
Standard)
- 1970년대 초 IBM이 개발한 알고리즘이다. 
- 16라운드 Feistel 구조를 가진다. 
- 평문을 64bit로 블록화를 하고, 실제 키의 길이는 56bit를 이용한다. 
- 전사 공격(Brute-Force Attack)에 취약하다. 
AES
(Advanced Encryption
Standard)
- DES를 대신하여 새로운 표준이 되었다. 
- 블록 크기는 128bit이고, 키 길이는 128/192/256bit이다. 
- SPN(Substitution_Permutation Network) 구조이다. 

 

* 블록암호 알고리즘

DES 64비트 블록,   56비트 키,  16라운드,  Feistel 구조
3-DES 2개의 키,  암호화,  복호화,  Feistel 구조
AES 128비트 블록, 80비트 키,  32라운드,  Feistel 변형구조
SKIPJACK 64비트 블록,   80비트 키,  32라운드,  Feistel 변형구조
IDEA 64비트 블록,  128비트 키,  8라운드,  Feistel+SPN구조(스위스)
SEED 128비트블록, 128비트 키, 16라운드, Feistel 구조(한국)
ARIA 128비트블록, 128/192/256비트 키, 12/14/16라운드, SPN 구조(한국)
LEA 128비트블록, 128/192/256비트 키, 24/28/32라운드, SPN 구조(한국, 경량)

 

* 스트림암호 알고리즘

  • LFSR : 선형 피드백 시프트 레지스터
  • RC4 : 인터넷 보안 프로토콜에서 널리 사용
  • A5 : GSM 통신에서 사용

* 공개키암호 알고리즘

  • 소인수 분해 : RSA, Rabin
  • 이산대수 : Diffie-Hellman, DSA, ELGamal
  • 타원곡선 : ECC 

* 단방향암호 알고리즘

  • MD5 : 빠른 계산 속도, 취약점 발견
  • SHA : NIST(미국 국립표준기술연구소)에 의해 개발된 해시 함수
  • HAS-160 : 한국에서 개발된 해시 함수, KCDSA(디지털서명)에 사용

11. 다음은 테스트케이스의 구성요소에 대한 설명이다. 괄호 (     ) 안에 들어갈 알맞은 답을 쓰시오.

식별자_ID 테스트 항목 ( ① ) ( ② ) ( ③ )
LS_001_1 로그인 로그인 화면 아이디(test)
패스워드(qwe123)
로그인 성공
LS_001_2 회원가입 로그인 화면 아이디(test)
패스워드(qwe321)
로그인 실패
 
① 테스트 조건 , ② 테스트 데이터 , ③ 예상 결과

 

* 테스트 케이스(Test Case)

  • 요구에 맞게 개발되었는지 확인하기 위하여 테스트할 입력과 예상 결과를 정의한 것이다. 
  • 테스트 자동화를 도입하면 테스트 케이스는 데이터 레코드로 저장될 수 있고 테스트 스크립트로 정의할 수 있다. 
  • 테스트 항목(Test Items)은 식별자 번호, 순서 번호, 테스트 데이터, 테스트 케이스, 예상 결과, 확인 등을 포함해서 작성해야 한다. 

 


12. UML 관계에 대한 설명이다. 다음 ①, ②에 들어갈 알맞은 용어를 쓰시오.

( ① ) : 클래스들 사이의 전체 또는 부분 같은 관계
( ② ) : 한 클래스가 다른 클래스를 포함하는 상위 개념일 때의 IS-A 관계
① Aggregation , ② Generalization

* UML 관계 

  • 일반화 관계 (Generalization) : 상속관계
  • 연관 관계 (Association) : 관련된 관계
  • 의존 관계 (Dependency) : 짧은 시간만 사용하는 관계
  • 실체화 관계 ( Realization) : 추상 메서드를 오버라이딩
  • 집합 관계 - 집약관계(Aggregation) : 부분 객체는 독립적
  • 집합 관계 - 합성관계 (Composition) : 부분 객체는 의존적

 


13. OSI 7 Layer에 대한 설명에서 ①~③에 들어갈 알맞은 계층을 쓰시오.

( ① ) : 포인트 투 포인트의 신뢰성 있는 데이터 전송을 보장하며, 물리 계층의 오류를 감지하고 수정한다.
( ② ) : 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능
( ③ ) : 데이터 표현이 상이한 응용 프로세스의 독립성을 제공하고, 암호화 한다.
① 데이터 링크 계층 , ② 네트워크 계층 , ③ 표현 계층

 

* OSI 7 참조 모델

OSI 7 단위 주요 장비 TCP / IP  
응용 계층 메시지 게이트웨이 응용 계층 telnet, FTP, HTTP, POP, SMTP
DHCP, SNMP, DNS
표현 계층
세션 계층
전송 계층 세그먼트, 데이터그램 전송 계층 TCP, UDP
네트워크 계층  패킷 라우터 인터넷 계층 IP, ARP, RARP, ICMP, IGMP
데이터링크 계층 프레임 브리지, 스위치 링크 계층 Ethernet, IEEE 802
물리 계층 비트 허브, 리피터
 

14. 요구 명세서를 입력 조건과 출력 조건 간의 논리적 관계로 표현하여 여러 입력 데이터 간의 관계와 출력에 미치는 상황을 체계적으로 분석한 테스트 케이스를 도출하고, 입력 환경의 복합성을 고려한 블랙박스 테스트 기법이 무엇인지 <보기>에서 골라 쓰시오. 

Equivalence Partitioning, Boundary Value Analysis, Cause-effect Graphing, Fault based, Base Path Test, Loop Test, Comparison Testing
Cause Effect Graph

 

* 원인-효과 그래프 검사(Cause Effect Graph)

  • 입력 데이터 간의 관계와 출력에 영향을 미치는 모든 상황을 그래픽적으로 표현하여 체계적으로 분석한다.
  • 효용성이 높은 테스트 케이스를 선정해 검사한다. 

* 블랙박스 테스트

  • 동등 분할 기법 : 입력 자료에 초점을 맞춰 테스트 케이스를 만들어 검사하는 방법
  • 경곗값 분석 : 입력 조건의 경계값을 테스트 케이스로 선정하는 방법
  • 원인-효과 그래프 검사 : 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법 
  • 오류 예측 검사 : 과거의 경험이나 테스터의 감각으로 테스트 하는 기법
  • 비교 검사 : 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법 

 


15. T1 테이블과 T2 테이블을 참고하여 SQL 실행 결과를 쓰시오.

<T1> 테이블                                                <T2> 테이블

NAME RULE
ALLEN S%
SCOTT %T%
SMITH  
 
SELECT COUNT(*) AS CNT FROM A CROSS JOIN B
WHERE A.NAME LIKE B.NAME
4

<t1>, <t2> 두 테이블을 교차 조인한 후 <t1> 테이블의 NAME 속성 값에 'S'로 시작하면서 'T'를 포함하는 문자열이 존재하는 튜플(행)의 수를 출력한다.

ALLEN S%
ALLEN %T%
SCOTT S%
SCOTT %T%
SMITH S%
SMITH %T%
CNT
4

 

* 교차 조인 (Cross Join) 

  • 교차조인은 '카티션 곱'이라고도 하며, 참조되는 두 테이블의 각 행의 수를 모두 곱한 결과의 행 수로 테이블이 반환된다. 대개 테스트로 사용할 대용량의 테이블을 생성할 경우에 사용된다.
  • 반환되는 결과 테이블은 두 테이블의 디그리의 합과 카디널리티의 곱의 크기이다.
  • 형식 : SELECT 속성리스트 FROM 테이블1 CROSS JOIN 테이블2 WHERE 조건식;

 


16. 다음 Python 프로그램을 분석하여 실행 결과를 쓰시오.

x, y = 10, 20
print(x==y)
 
False

 

* 다중 대입문(multiple assingment)과 관계연산자

  • x, y = 10, 20은 다중 대입문으로 각 변수 x, y에 다른 값 10, 20을 각각 대입한다. 
  • 변수 x는 10이, 변수 y는 20이 저장된다. 
  • x == y 조건문의 결과는 두 변수의 값이 다르므로 거짓에 해당하는 논리 상수 False가 출력된다. 

 

* 대소문자 주의 

  • C언어 : 1, 0
  • JAVA : true, false
  • Python : True, False

 

 


17. 다음 C언어 프로그램을 분석하여 실행 결과를 쓰시오.

struct jsu{
  char name[12];
  int os, db, hab, hhab;
};
int main(){
  struct jsu st[3] = {{"데이터1", 95, 88}, {"데이터2", 84, 91}, {"데이터3", 86, 75}};
  struct jsu* p;

  p = &st[0];
  (p + 1) -> hab = (p + 1) -> os + (p + 2) -> db;
  (p + 1) -> hhab = (p + 1) -> hab + p -> os + p -> db;
  printf("%d\n", (p + 1) -> hab + (p + 1) -> hhab);
}
 

 

501

 

  • 구조체 포인터 연산자(->)를 통해 구조체 멤버에 접근한 후 결과를 출력하는 프로그램이다. 
  • 구조체 멤버를 접근하는 방법은 두 가지가 있다. 
    1. 구조체 변수를 이용한 접근 : 구조체변수명.멤버명
    2. 구조체 포인터 변수를 이용한 접근 : 구조체포인터변수명->멤버명
  • p=&st[0]; 명령문에 의해 구조체 배열 st에 구조체 포인터 변수 p로 참조가 가능해진다. 
  • 구조체 포인터 변수를 이용한 접근 방법으로 주어진 연산을 처리하면, 
    • (p+1)->hab = (p+1)->os + (p+2)->db; 에서 
      • (p+1)->os의 값은 84이고, (p+2)->db의 값은 75이다. 84+75의 결과인 159가 (p+1)->hab에 할당된다. 
    • (p+1)->hhab = (p+1)->hab + p->os + p->db; 에서 
      • (p+1)->hab의 값은 159이고, p->os는 95,  p->db는 88이다. 159+95+88의 결과인 342가 (p+1)->hhab에 할당된다. 
  • printf("%d\n", (p + 1) -> hab + (p + 1) -> hhab); 는 159+342의 결과인 501이 최종 출력된다. 

 

name os db hab hhab
데이터1 (p) 95 88    
데이터2 (p+1) 84 91 84+75 = 159 159+95+88 = 342
데이터3 (p+2) 86 75    
 

 


18. 다음 C언어 프로그램을 분석하여 실행 결과를 쓰시오.

void main(){
  int *arr[3];
  int a=12, b=24, c=36;
  arr[0] = &a;
  arr[1] = &b;
  arr[2] = &c;
  printf("%d\n", *arr[1] + **arr + 1);
}
 
37 

 

  • 1차원 포인터 배열에 정수를 대입 후 더블포인터 연산을 통해 덧셈을 수행 후, 출력하는 프로그램이다. 
  • int *arr[3]; 선언문으로 int* 자료형의 1차원 배열 arr가 생성된다. 해당 배열의 요소값으로는 int형 변수의 주소만 할당될 수 있다. 
  • 24 + 12 + 1 의 결과 37이 최종 출력된다. 
연산
*arr[1] *(200번지) 24
arr[1] 의 요소값 200번지를 포인터연산(*)을 수행하여 참조한다. 
**arr *(*arr) ▶ *(100번지) 12
배열의 이름은 첫 요소의 주소이므로 arr는 arr[0] 의 주소이고, 이를 포인터연산(*)하면 100번지이고 이를 다시 포인터연산(*)을 수행하여 참조한다. 

 


19. 다음 JAVA 언어 프로그램을 분석하여 실행 결과를 쓰시오.

int a=3, b=4, c=3, d=5;
if( (a==2 | a==c) & !(c>d)&(1==b^c!=d) ){
	a = b + c;
	if(7==b^c!=a){
		System.out.println(a);
	} else {
		System.out.println(b);
	}
} else {
	a = c+d;
	if(7==c^d!=a) {
		System.out.println(a);
	}else {
		System.out.println(d);
	}
}
 
7

 

  • 해당 프로그램에는 비트 논리 연산자인 비트 AND 연산자(&), 비트 XOR 연산자(^), 비트 OR 연산자(|)가 사용되어 if문의 조건식을 구성하고 있다. 
  • 비트 논리 연산자의 결과는 연산의 대상에 따라 달라진다. 예를 들어 다음과 같이 정수를 대상으로 하는 경우는 결과가 정수 0 또는 1이 결과 값을 얻을 수 있고, 논리상수를 대상으로 비트 논리 연산을 수행하면 true와 false의 결과를 얻는다. 
  • 비트 논리 연산자의 우선순위 : 비트 AND 연산자(&) → 비트 XOR 연산자(^) →  비트 OR 연산자(|)
  • 관계 연산자(==, !=, <, <=, >, >=)는 비트 논리 연산자보다 연산의 우선순위가 높음
조건식 1
a==2 | a==c
단계1 a==2 | a==c
단계2 3==2 | 3==3
단계3 false | true
결과 true
조건식 2
!(c > d)
단계1 !(c > d)
단계2 !(3 > 5)
단계3 !(false)
결과 true
조건식 3
1==b ^ c!=d
단계1 1==b ^ c!=d
단계2 1==4 ^ 3!=5
단계3 false ^ true
결과 true
  • if (조건식 1 & 조건식 2 & 조건식 3 )은 if(true&true&true)를 수행하여 true의 결과로 참인 블록을 수행하게 된다. 
  • a = b + c; 를 수행하여 변수 a의 값을 7로 변경 후, if(7==b ^ c!=a) 조건식을 다음가 같이 수행한다. 
if 조건식 단계1 7==b ^ c!=a
단계2 7==4 ^ 3!=7
단계3 false ^ true
결과 true
  • 조건식의 결과 true이므로 참인 블록 내의 System.out.println(a); 명령문을 수행하여 최종 출력 결과는 7이다. 

 


20. 다음 JAVA 언어 프로그램을 분석하여 실행 결과를 쓰시오.

class Singleton {
  private static Singleton instance = null;
  private int count = 0;
  static public Singleton getInstance() {
    if(instance == null){
      instance = new Singleton();
      return instance
    }
    return instance;
  }
  public void count() { count++; }
  public int getCount() { return count; }
}
public class testcon{
  public static void main(String[] args){
    Singleton sg1 = Singleton.get();
    sg1.count();
    Singleton sg2 = Singleton.get();
    sg2.count();
    Singleton sg3 = Singleton.get();
    sg3.count();

    System.out.print(sg1.getCount());
  }
}
 
3

 

  • 해당 프로그램은 싱글톤 패턴(Singleton pattern)이 적용된 프로그램으로 프로그램이 실행되는 동안 클래스를 생성하는 객체(인스턴스)가 오직 하나이다. 
  • 싱글톤 패턴을 자바로 구현하는 3단계
    1. 생성자 메서드를 private로 접근 제한
    2. private static 인스턴스 변수 선언(오직 하나의 같은 오브젝트를 참조)
    3. public static Singleton getInstance() 메소드 구현
  • 참조 변수 sg1, sg2, sg3는 같은 객체를 참조하며, 객체 내의 필드 count가 0으로 초기화 된 후, sg1.count(); 메소드 호출로 count가 1, sg2.count(); 메소드 호출로 count가 2, sg3.count(); 메소드 호출로 count가 3이 되어 최종 출력 결과는 3이다. 

 


해설은 유투브 흥달쌤 강의와, 이기적 실기 기본서를 참고하였습니다 :)

https://youtu.be/pFFxbmTkl98?si=fgSwbUqX5QbDUQtF

 

https://youtu.be/yKwtDoTKcLU?si=-8gBflGL4CnuWyVl

 

 

728x90
반응형