정처기 실기 : 2024년 3회차 기출, 1️⃣1️⃣ ~ 2️⃣0️⃣

m_ngyeong·2025년 3월 10일
0
post-thumbnail

정보처리기사 실기


📝 2024년 3회차 기출, 1️⃣1️⃣ ~ 2️⃣0️⃣

11.


추가적인 질의를 제공하는 부분으로, 웹 서버에 전달할 추가 데이터를 나타낸다. ( )

자원 경로를 나타내며, 서버 상에서 해당 리소스의 위치를 지정한다. ( )

웹 프로토콜을 정의하는 부분으로, 예를 들어 HTTP, FTP 등의 방식을 나타낸다. ( )

호스트와 포트 번호를 나타내는 부분으로, 서버 주소와 함께 포트번호를 나타낸다. ( )

특정 페이지 내의 위치를 가리키며, 문서 내 특정 섹션으로 이동하는 데 사용된다. ( )

🖍 ④③①②⑤
① scheme : 통신 방식 결정
② authority : 사용자 정보, 호스트, 포트 번호 조합
③ path : 리소스, 계층적 구조
④ query : 웹에서 제공하는 파라미터
⑤ fragment : html 내부 북마크, 하위

12. C Lang. - 구조체 포인터(링크리스트)

# include <stdio.h>

struct Node{
	int value;
	struct Node* next;
};
void func(struct Node* node){
	while(node != NULL && node -> next != NULL) { // 현재 노드와 다음 노드가 NULL이 아닌 경우
		int t = node -> value;
		node -> value = node -> next -> value;
		node -> next -> value = t;
		node = node -> next -> next;
	}
}

int main(){
	struct Node n1 = {1, NULL};
	struct Node n2 = {2, NULL};
	struct Node n3 = {3, NULL};
	n1.next = &n3; // n1이 가지고 있는 next 노드 포인터는 n3의 주소를 가리킴
	n3.next = &n2;
	func(&n1);     // n1을 기준으로 while 조건문 실행
	
	struct Node* current = &n1;
	while(current != NULL) {
		printf("%d", current -> value);
		current = current -> next;
	}
}

🖍 312

  • n1.next = &n3; n3.next = &n2; → 132
  • func()에 의해 값이 교환 됨 n1 → n3 → n2, 312
  • node = node -> next -> next;n2 다음이 null이라서 종료

13. DB - 무결성

데이터베이스의 테이블에서 기본 키(Primary Key)를 구성하는 모든 속성은 널(null) 값을 가지면 안되는 무결성 제약조건

🖍 개체

14. Python Lang. - type()

def test(v):
	if type(v) == type(""):
		return len(v)
	elif type(v) == type(100):
		return 101
	else:
		return 20
a = "100.0"  
b = 100.0 
c = (100.0, 200.0)
print(test(a) + test(b) + test(c))

🖍 45

  • test(a) = 5 : 데이터 타입이 string이라서 true
  • test(b) = 20 : 데이터 타입이 flaot이라서 false
  • test(c) = 20 : 데이터 타입이 tuple이라서 false

isinstance(인스턴스, 데이터/클래스 타입)

  • 첫 번째 매개변수 : 확인하고자 하는 데이터의 값, 객체, 인스턴스
  • 두 번째 매개변수 : 확인하고자 하는 데이터의 타입, 클래스
  • 반환 값 : 인스턴스와 타입이 같으면 True를 반환하고, 다르면 False를 반환

15. UML 관계

🖍 ① ㉠의존, ② ㉢일반화, ③ ㉡연관

16. Java Lang. - try~catch~finally

public class Main {
	public static void main(String[] args) {
		int sum = 0;
		try {
			func();
		} catch(NullPointerException e) {
			sum = sum + 1;
		} catch(Exception e) {
			sum = sum + 10;
		} finally {
			sum = sum + 100;
		}
		System.out.print(sum);
	}
	static void func() throws Exception {
		throw new NullPointerException();
	}
}

🖍 101
throw new NullPointerException(); 구문에 의해 catch(NullPointerException e)가 실행되고 sum은 1이 된다. finally은 예외처리와 상관없이 실행되므로 sum = 1 + 100

try catch 를 처리하는 방식:

  1. try 블록 안에서 예외가 발생하면 그 순간에 코드 실행을 중단
  2. 발생된 예외 종류가 catch 블럭의 안에 지정한 예외와 일치하면 그 안의 코드를 실행
  3. catch 블록 안의 코드가 모두 실행되면 try catch 블록 넘어감
  • try: 예외 발생을 조사하는 문장
  • catch: 예외가 발생했을 때 실행시킬 코드

finally:

예외처리 발생여부와 상관없이 무조건 실행되는 구문

17. Java Lang. - 상속, 오버라이딩

public class Annotation {
	public static void main(String[] args) {
		B b1 = new A();
		A b2 = new A();
		System.out.print(b1.getX() + b1.x + b2.getX() + b2.x);
	}
}

class B {
	int x = 3;
	int getX() {
		return x * 2;
	}
}
class A extends B {
	int x = 7;
	@Override
	int getX() {
		return x * 3;
	}
}

🖍 52

  • b1.getX() = 7*3
  • b1.x = 3
    B b1 = new A();: 업캐스팅, A의 객체를 B 타입 변수에 저장
  • b2.getX() = 7*3
  • b2.x = 7

18. Java Lang. - 제네릭(Generic), 오버로딩

class Printer {
	void print(Integer a) {
		System.out.print("A" + a);
	}
	void print(Object a) {
		System.out.print("B" + a);
	}
	void print(Number a) {
		System.out.print("C" + a);
	}
}

public class Generic {
	public static void main(String[] args) {
		new Container<>(0).print();
	}
	public static class Container {
		T value;
		public Container(T t) {
			value = t;
		}
		public void print() {
			new Printer().print(value);
		}
	}
}

🖍 B0

  • 제네릭 T는 매개변수에 맞춰 타입을 변경해서 사용할 수 있게 하지만 T 자체의 type은 Object
// Printer 클래스는 파라미터에 따라 오버로딩되며, 해당되는 객체 형태에 따라 다르게 출력 됨.
class Printer {  
   void print(Integer a) {  // Integer 타입을 인자로 받아 출력하는 메서드
       System.out.print("A" + a);  
   }  
   void print(Object a) {  // Object 타입을 인자로 받아 출력하는 메서드(모든 타입을 받을 수 있음)
       System.out.print("B" + a);  
   }  
   void print(Number a) {   // Number 타입을 인자로 받아 출력하는 메서드
       System.out.print("C" + a);  
   }  
}  
public class Generic {  
   public static void main(String[] args) {  
       // Container라는 제네릭 클래스를 사용해서 Integer 타입을 가진 값을 전달하고 print() 호출
       new Container<>(0).print(); 
   }  
   public static class Container<T> {  // 제네릭 타입 T로 선언된 Container 클래스
       T value;  // T 타입의 value 변수 선언
       public Container(T t) {  // 생성자: 전달된 값을 value에 저장
           value = t;  
       }  
       public void print() {  // Printer 클래스의 print() 메서드를 호출
           new Printer().print(value);  // value를 Printer에 전달하여 print() 호출
       }  
   }  
} 
  • 0은 intInteger로 바뀌는데(박싱) 타입 선언이 없다면, 제네릭 타입으로 들어가는 순간 컴파일 타임에서 타입이 소거됨
  • 이를 타입 소거라고 하며, 타입을 작성하지 않고 T로 하면 Object가 됨
  • Integer 타입으로 만들기 위해서는
public static class Container<T> {
	Integer value;  
	public Container(Integer t) {  
	value = t;  
}
// 또는 
public void print() { 
	new Printer().print((Integer)value);  
}  

19. C Lang. - 이중 포인터


# include <stdio.h>

void func1(int** arr, int size) {
	for(int i=0; i<=sizeof(arr); i++) {
		*(*arr + i) = (*(*arr + i) + i) % size;
	}
}
void func2(int* num, int* arr) {
	*num = arr[*num % 4];
}

int main() {
	int arr[] = {3, 1, 4, 1, 5};
	int* p = arr;
	int** pp = &p;
	int num = 6;
	func1(pp, 5);
	func2(&num, arr);
	printf("%d", num);
}

🖍 1
배열을 가리키는 포인터의 주소를 다시 포이터를 가리키는 포인터에 할당함.
arr[i] == *(arr+i)

func1(pp, 5);

  • int i=0:
    arr[0] = (arr[0]+0)%5 = (3+0)%5 = 3 arr={3, 1, 4, 1, 5}
  • int i=1:
    arr[1] = (arr[1]+1)%5 = (1+1)%5 = 2 arr={3, 2, 4, 1, 5}
  • int i=2:
    arr[2] = (arr[2]+2)%5 = (4+2)%5 = 1 arr={3, 2, 1, 1, 5}
  • int i=3:
    arr[3] = (arr[3]+3)%5 = (1+3)%5 = 4 arr={3, 2, 1, 4, 5}
  • int i=4:
    arr[4] = (arr[4]+4)%5 = (5+4)%5 = 4 arr={3, 2, 1, 4, 4}

func2(&num, arr);

num = arr[6%4] = arr[2] = 1

20. 신기술 용어

중앙 집중식 인프라 없이, 즉 사전 설정된 네트워크 기반 시설이 없이 구성된 자율형 네트워크를 의미합니다. 이러한 네트워크는 노드(주로 무선 장치)가 서로 직접 연결하여 통신하며, 군사 작전 중에 실시간으로 정보를 공유하기 위한 네트워크로 사용된다.

🖍 애드혹 네트워크(Ad-hoc network)



참고,

profile
ʚȉɞ

0개의 댓글