본문 바로가기

개발/정보처리기사

[수제비 출처] 2020년 기사 실기 출제예상 문제[Daily 123-130번]

123. 다음은 하향식 통합 테스트 수행 단계이다. 괄호 ( ) 안에 들어갈 정확한 용어를 쓰시오.

- 1단계 : 메인 제어 모듈은 작성된 프로그램을 사용하고, 아직 작성되지 않은 하위 모듈을 제어함
- 2단계 : 위에서 아래로 내려오기 때문에 검사 초기에 시스템의 구조가 파악되어야 함
- 3단계 : 모듈 및 모든 하위 컴포넌트를 대신하여 더미 모듈인 ( ​ ① ) 개발
- 4단계 : ( ​ ② ) 또는 ( ​ ③ )에 따라, 하위 모듈인 ( ​ ① )이 한 번에 하나씩 실제 모듈로 대체
- 5단계 : 각 모듈 또는 컴포넌트를 통합하면서 테스트 수행
- 6단계 : 테스트가 완료되면 ( ​ ① )이 실제 모듈 또는 컴포넌트로 작성

답)

①_________________________________________

​​②_________________________________________

​③_________________________________________

 

① 스텁

​​② 깊이-우선 방식

​③ 너비-우선 방식

 


124. 다음 C 프로그램 실행 결과를 쓰시오

#include <stdio.h>

int main()
{
    int a = 10;
	int *p = &a;
	printf("%d %d\n", a, *p);
	
	a = 30;
	printf("%d %d\n", a, *p);
	
    return 0;
}

답)

10 10

30 30

해설에 앞서 이번 문제는 비전공 이신분들에게 다소 어려운 문제임을 말씀 드립니다

C언어의 포인터는 전공자들도 C언어를 포기하게 만들어 버리는 무시무시한 놈인데요

정보처리 기능사 시험에 유사 문제가 출제가 되었기에

기사에도 나올 가능성이 있어서 데일리 문제로 출제하였습니다

아마도 기사 문제도 기능사와 유사하거나 약간 더 어려운 수준으로 나올수 있을꺼 같네요

해설)

int a = 10; 을 하게 되면 4바이트의 정수형 변수 a 를 만들고 10을 assign 합니다 (변수a에 10을 저장)

int *p = &a; 이부분이 바로 포인터 인데요

포인터 변수는 변수명 앞에 별 '*'을 붙입니다

즉, 정수형 포인터 변수 p를 만들고 변수 a의 주소값을 assign 합니다 (a의 주소값을 포인터 변수 p에 저장)

printf("%d %d\n", a, *p); 변수 a에 저장된 10을 %d로 출력 합니다.

그리고 한칸 띄고 포인터변수가 가리키는 변수 a의 값 10을 %d로 출력 합니다

a=30; 에서 a에 있던 10은 날라가고 30이 새로 저장 됩니다

그리고 나서 다시 printf함수로 출력을 합니다

printf("%d %d\n", a, *p); 변수 a에 저장된 30을 %d로 출력 합니다.

그리고 한칸 띄고 포인터변수가 가리키는 변수 a의 값 30을 %d로 출력 합니다

 

추가해설)

포인터 변수는 주소값을 저장하는 변수 입니다

데이터타입에는 int, long, char, char[] 등 다양하게 있는데요

포인터 변수는 데이터타입은 동일하게 작성하고 위에도 설명 했듯이 변수명 앞에 '*'을 붙입니다

또한 주소값은 위의 예제 처럼 일반 변수명 앞에 '&'를 붙이면 됩니다

 

그리고 포인터 변수는 printf() 함수에서 출력을 할 때,

값을 출력하는 경우에는 '*'를 붙이고,

주소값을 출력하는 경우에는 '*'을 붙이지 않습니다

 


125. 다음은 UML의 관계(Relationships)를 나타내는 그림이다. 해당 그림에 가장 올바른 "관계의 유형"을 쓰시오.

정답)

집합 관계(Aggregation)

실체화 관계(Realization)

해설) 필기 기출 연계된 문제로 내봤습니다.

집합 관계(Aggregation)

- 집합 관계는 하나의 사물이 다른 시물에 포함되어 있는 관계를 표현. 표시 형식은 포함되는 쪽에서 포함하는 쪽(전체)으로 빈 마름모로 연결

* 포함 관계는 속이 찬 마름모로 표현

- 실체화 관계는 사물이 할 수 있거나 해야 하는 기능으로서 서로를 그룹화 할 수 있는 관계(Can do this)를 표현, 기능 쪽으로 빈 점선 화살표 연결


126. 다음 Java 프로그램에서 Child.java, Main.java, 출력결과의 빈칸을 채우시오

Parent.java

public class Parent {
    String className = "Parent Class";
    public void info() {
        System.out.println( className );
    }
}

Child.java

public class Child (   ①   ) Parent {
    String className = "Child Class";
    public void info() {
        super.info();
        System.out.println( className );
    }
}

Main.java

public class Main {
    public static void main(String args[]) {
        Parent p = (  ②  ) Parent();
        p.info();

        Child c = (   ②   ) Child();
        c.info();
    }
}

출력결과

Parent Class
( ③ )
Child Class

 

답)

① extends

② new

③ Parent Class

해설)

Parent.java

Parent클래스는 부모 클래스이다.

Child.java

Child클래스는 자식 클래스이다.

Child클래스는 Parent클래스를 상속 받는다

상속은 extends 키워드를 사용한다.

super는 부모클래스 접근할때 사용한다.

Main.java

Parent 클래스와 Child 클래스의 객체를 생성하기 위해

new 키워드를 사용한다.


127. 다음 빈칸에 들어갈 용어와 Java 프로그램의 결과를 쓰시오

( ① )은/는 동일 이름의 메소드를 여러개 정의할 수 있는 특성이다.

ExamSample.java

public class ExamSample { 
    void func() { 
        System.out.println("매개변수 없음"); 
    } 
    void func(int i) { 
        System.out.println( i ); 
    } 
    void func(int i, int j) { 
        int k = i + j; 
        System.out.println( k ); 
    } 
}

 

Main.java

public class Main { 
    public static void main(String args[]) { 
       ExamSample es = new ExamSample(); 
       es.func(2, 3); 
    } 
}

 

답)

① : 오버로딩

실행결과 : 5

해설)

ExamSample.java

첫번째 func()는 매개변수, 리턴타입이 없다.

두번째 func()는 매개변수가 1개, 리턴타입이 없다.

세번째 func()는 매개변수가 2개, 리턴타입이 없다.

Main.java

es.func(2, 3); 에서 매개변수는 2개이다.

ExamSample.java의 세번째 func()가 호출 된다.

 

오버로딩, 오버라이딩은 시험에 나오기 아주 좋은 애들이에요

둘간의 차이점 꼭 확인해 두세요!

오버로딩 - 메소드명이 동일, 매개변수, 리턴타입은 다를 수 있음

오버라이딩 - 메소드명, 매개변수, 리턴타입 모두 동일, 상속받아서 재사용

 

+ 페코페코님 댓글

오버로딩은 한자어로 '다중정의(多重定義)'라고 하며, 같은 이름의 메소드가 여러 개 있는 데서 구분이 가능합니다.

위의 예문을 살펴보면 func()이라는 메소드가
void func() /// void func(int i), void func(int i, int j)의 3개 메소드로 구분된 데서 오버로딩을 확인할 수 있습니다.
---------------------
오버라이딩은 한자어로 '재정의(再定義)'라고 하고,
클래스 옆에 상속(extends)키워드가 있거나 애노테이션 마크, @Override가 있어서 쉽게 구분이 가능합니다.

부모 클래스(또는 슈퍼클래스)가 갖고 있는 메소드를 그대로 물려 받아서
내용물만 '새로 정의'하여 사용하는 특징을 갖습니다.

둘다 객체지향 언어의 특징인 다형성(Polymorphism)의 예시로 거론되니 꼭 확인해두시기 바랍니다!


128. 다음 빈칸에 들어갈 용어와 Java 프로그램의 결과를 쓰시오

ICar.java

interface ICar { 
    void move(); 
}

ConCar.java

class ConCar (    ①    ) ICar { 
    public void move() { 
        System.out.println("이동합니다"); 
    } 
}

Main.java

class Main { 
    public static void main(String args[]) { 
        ICar car = new ConCar(); 
        car.move(); 
    } 
}

답)

① : ( implements )

실행결과 : ( 이동합니다 )

해설)

ICar.java

인터페이스를 선언한다.

구현몸체는 없이 선언만 존재한다.

ConCar.java

인터페이스는 implements 키워드를 이용한다.

move() 메소드를 실제 구현한다.

Main.java

car.move()는 "이동합니다" 를 출력한다.


129. 다음 Python 프로그램의 결과를 쓰시오

>>> sum=0 
>>> a=[1,2,3,4,5] 
>>> for i in range(0,5): 
...     sum += a[i] 
>>> print(sum) 
15

답)

①____________

해설)

답) 15

해설)

파이썬 for 반복은 range로 범위를 줄 수 있다.

모두 더한 15를 출력한다.

a[0]=1

a[1]=2

a[2]=3

a[3]=4

a[4]=5

range()함수의 3번째 인자를 2로 하면 2씩 건너뛰면서 반복 한다.

>>> sum=0 
>>> a=[1,2,3,4,5]
>>> for i in range(0,5,2):
...     sum += a[i]
...
>>> print(sum)
9

>>> a=[1,2,3,4,5] 
>>> for i in range(0,5,2):
...     print(a[i])
...
1
3
5
>>>        

 


130. 다음 Python 프로그램의 빈칸을 쓰시오

>>> i=1 
>>> a=4 
>>> while i <= 9: 
...     print(a, '*', i, '=', a*i) 
...     i = i + 1 
... 
4 * 1 = 4 
4 * 2 = 8 
4 * 3 = 12 
4 * 4 = 16 
4 * 5 = 20 
4 * 6 = 24 
4 * 7 = 28 
4 * 8 = 32 
4 * 9 = 36 
>>>print( i ) 
10

답) ① 10

해설) 구구단 4단을 출력한다.

while 문을 이용하여 반복하면서 4단을 출력한다.

i는 1씩 증가하며 9보다 크면 while의 반복을 중단한다.

최종적으로 i는 10이 된다.

추가해설)

while 문의 문법을 익혀 두시라고 출제 하였습니다

추가로 파이썬은 i++은 안되고 i = i + 1 과 같이 사용 합니다

>>> i=0
>>> i = i + 1
>>> i
1
>>> i=0
>>> i++
  File "<stdin>", line 1
    i++
      ^
SyntaxError: invalid syntax