본문 바로가기

자격증 공부/정보처리기사 실기

[흥달쌤] 기출해설특강) 라우팅 영역에 따른 분류(IGP, EGP)

[2020년 3회 영상]

 

11. 다음 설명에 해당하는 라우팅 프로토콜을 쓰시오.

• 최단 경로 탐색에 다익스트라 알고리즘 기반 방식 사용
• 최적 경로 선택을 위해 홉수, 대역폭, 지연시간 등을 고려
링크 상태 변화시에만 라우팅정보전송

 

→ OSPF

 

 

라우팅 영역에 따른 분류 ★★★

IGP
(Interior Gateway
Protocol)
• AS(Autonomous System) 내부 라우터 간
• RIP(거리 벡터 알고리즘), OSPF((전체적인)링크 상태 프로토콜(링크드 상태 최적의 판단)), IGRP
→ 난 개인적으로 내향인(I)이라 집순이/집돌이 같은 느낌으로 외움
EGP
(Exterior Gateway
Protocol)
• AS(Autonomous System) 외부 라우터 상호간
• EGP, BGP
→ 이건 외향인(E)이라 밖으로 나도는 느낌?

 

* 라우터 : 서로 다른 네트워크 간에서 데이터 패킷의 최적 경로를 결정하고 전달하는 장치

 


 

 

12. 인터넷 프로토콜의 비신뢰적인 특성을 보완하기 위한 프로토콜로 IP 패킷

      전송 중 에러 발생 시 에러 발생 원인을 알려주거나 네트워크 상태를 진단해

      주는 기능을 제공하는 프로토콜을 무엇이라고 하는지 영문 약어로 쓰시오.

 

→ ICMP

 


 

 

13. 헝가리안 표기법에 대해 간략히 설명하시오.

→ 프로그래밍 언어에서 변수 및 함수의 인자 이름 앞에 데이터 타입을 명시하는 코딩 규칙

(출제자... 장난하나;;)

 


 

 

14. 리팩토링(Refactoring)의 목적에 대해 간략히 설명하시오.

→ 결과의 변경 없이 코드의 구조를 재조정한다.

 


 

 

15. 빈 칸 안에 공통으로 들어갈 가장 적합한 용어를 쓰시오.

심리학자 톰 마릴은 컴퓨터가 메시지를 전달하고, 메시지가 제대로 도착했는지 확인(흐름제어/오류제어)하며,
도착하지 않았을 경우 메시지를 재전송하는 일련의 방법을 가리켜 '기술적 은어'라는 뜻으로 ( )(이)라 불렀다.

 

→ 프로토콜(Protocol)

 


 

 

16. 다음은 C언어로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오.

void main()
{
    int i = 0, c = 0;
    while (i < 10) {
        i++;
        c *= i;
    }
    printf("%d", c);
}

 

→ 0

// 해석.

void main()
{
    int i = 0, c = 0;   // i=0, c=0으로 초기화
    while (i < 10) {    // i가 10보다 작을 때 반복
        i++;            // i: 1 → 10까지 증가
        c *= i;         // c = c * i (초기 c=0이므로 계속 0)
        // 반복 과정
        // i=1 → c=0*1=0
        // i=2 → c=0*2=0
        // ...
        // i=10 → c=0*10=0
    }
    printf("%d", c);    // 최종 c 출력
    // 결과: 0
}

 

 


 

 

17. 다음은 C언어로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오.

int r1() {
    return 4;
}
int r10() {
    return (30 + r1());
}
int r100() {
    return (200 + r10());
}
void main() {
    printf("%d", r100());
}

 

→ 234

// 해석.

int r1() {
    return 4;                  // r1() → 4 반환
}
int r10() {
    return (30 + r1());        // r1() 호출 → 4 → 30 + 4 = 34 반환
}
int r100() {
    return (200 + r10());      // r10() 호출 → 34 → 200 + 34 = 234 반환
}
void main() {
    printf("%d", r100());      // r100() 호출 → 234 출력
    // 최종 결과: 234
}

 


 

 

18. 다음은 JAVA 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오.

public static void main(String[ ] args) {
    int i = 0;
    int sum = 0;
    while ( i < 10 ) {
        i++ ;
        if( i%2 = = 1 )
            continue;
        sum + = i;
    }
    System.out.print(sum);
}

 

→ 30

public static void main(String[ ] args) {
    int i = 0;                 // i를 0으로 초기화
    int sum = 0;               // sum을 0으로 초기화

    while ( i < 10 ) {         // i가 10보다 작을 동안 반복
        i++ ;                  // i를 1씩 증가: 1 → 10

        if( i%2 = = 1 )        // i를 2로 나눈 나머지가 1이면 홀수
            continue;          // 홀수면 아래 sum += i 실행하지 않고 다음 반복으로 이동

        sum + = i;             // 짝수일 때만 sum에 더함: 2 + 4 + 6 + 8 + 10
    }

    System.out.print(sum);     // 최종 sum 출력
    // 최종 결과: 30
}

 


 

 

19. 다음은 JAVA 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오.

abstract class Vehicle {
    String name;
    public Vehicle(String val) {
        this.name = val;
    }
    public String getName() {
        return "Vehicle name : " + name;
    }
}

class Car extends Vehicle {
    private String name;
    public Car(String val) {
        name = super.name = val;
    }
    public String getName(String val) {
        return "Car name : " + val;
    }
    public String getName(byte val[]) {
        return "Car name : " + val;
    }
}

Vehicle obj = new Car("Spark");
System.out.println(obj.getName());

 

→ Vehicle name : Spark

// 해석.

abstract class Vehicle {
    String name;
    public Vehicle(String val) {
        this.name = val;             // 부모 클래스 name = "Spark"
    }
    public String getName() {
        return "Vehicle name : " + name;  // 기본 메서드 (오버라이딩 대상)
    }
}

class Car extends Vehicle {
    private String name;
    public Car(String val) {
        name = super.name = val;     // 자식 name과 부모 name 모두 "Spark"
    }
    public String getName(String val) {
        return "Car name : " + val;  // 오버로딩 (사용 안됨)
    }
    public String getName(byte val[]) {
        return "Car name : " + val;  // 오버로딩 (사용 안됨)
    }
}

Vehicle obj = new Car("Spark");   // 업캐스팅: 타입은 Vehicle, 실제 객체는 Car
System.out.println(obj.getName()); 
// obj.getName() 호출 → Car에 동일한 시그니처 getName() 없음 → Vehicle의 getName() 호출
// 결과: "Vehicle name : Spark"

 


 

 

20. C++에서 생성자(Constructor)에 대해 간략히 설명하시오.

 

→ 생성자는 객체 생성 시 자동으로 호출되는 메서드로 멤버를 초기화하는 목적으로 주로 사용된다.

// 생성자(Constructor)
// 객체가 생성될 때 자동으로 호출되는 특수한 함수

class A {
public:
    int x;
    A() {          // 생성자
        x = 10;    // 멤버 변수 초기화
    }
};

A obj;            // 객체 생성 시 생성자 자동 호출 → x = 10 초기화

// 핵심 흐름
// 객체 생성 → 생성자 호출 → 멤버 초기화

// 결론
// 생성자는 객체 생성과 동시에 실행되어 초기값 설정 역할 수행