정처기 실기 : 2023년 3회차 기출, 1️⃣~5️⃣

m_ngyeong·2024년 4월 1일
0
post-thumbnail

정보처리기사 실기


📝 2023년 3회차 기출, 1️⃣~5️⃣

1. Java Lang. - Overriding

public class Soojebi {
    public static void main(String[] args) {
    A b = new B();
    b.paint();
    b.draw();
    }
}

class A {
    public void paint() {
        System.out.print("A");
        draw();
    }
    public void draw() {
        System.out.print("B");
        draw();
    }
}

class B extends A {
    public void paint() {
        super.draw();
        System.out.print("C");
        this.draw();
    }
    public void draw() {
        System.out.print("D");
    }
}

🖍 BDCDD
1️⃣ main에서 코드 시작.
2️⃣ b 변수에 B class 생성. B의 생성자 B()와 B의 부모인 A의 생성자 A()를 호출해야 하지만 없어 호출할 수 없음.
3️⃣ b.print(); 구문에 의해 b는 B class이므로 B class의 paint()호출.
4️⃣ super.draw(); 구문에 의해 B의 부모인 A class를 호출해 A의 draw()에서 B 출력.
5️⃣ draw(); 구문에 의해 B의 draw()에서 D 출력.
왜냐하면, 부모클래스와 자식클래스가 상속관계에 있으며, 동일한 메소드명과 동일한 타입 파라미터(변수)를 가지면 오버라이딩 관계가 형성되어 자식클래스의 동일한 메서드로 이동하기 때문.
6️⃣ System.out.print("C"); 구문에 의해 C 출력.
7️⃣ this.draw(); 구문에 의해 B class에 있는 draw()를 호출하여 D 출력.
8️⃣ b.draw(); 구문에 의해 B의 draw()에서 D 출력.

  • Overloading(오버로딩): 메서드의 이름은 같고 매개변수의 유형과 개수가 다르도록 하는 것을 의미.
    • 기존에 없던 새로운 메서드를 정의 함.
  • Overriding(오버라이딩): 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 것을 의미.
    • 메서드의 이름은 물론 파라미터의 개수나 타입도 동일해야 하며, 주로 상속받은 메서드의 내용만 변경하기 위해 사용 됨.

2.

• 사용자가 자격 증명을 공유하지 않고도 타사 앱의 데이터 또는 리소스에 액세스 할 수 있도록 권한을 부여할 수 있는 개방형 프로토콜.
• Facebook, Twiiter와 같은 소셜 미디어 플랫폼에서 널리 사용되며 외부 계정을 기반으로 토큰을 이용하여 간편하게 회원가입 및 로그인 가능.

🖍 OAuth

  • NFT(Non-Fungible Token): 대체 불가능한 토근의 약자로 블록체인 기술을 이용해서 디지털 자사의 소유를 증명하는 가상의 토큰이다.
  • SAML(Security Assertion Markup Lang): 보안 검증 마크업 언어의 약자로 ID 제공자(idP)가 사용자를 인증한 다음 SP(서비스 제공자)라고 하는 다른 애플리케이션에 인증 토큰을 전달할 수 있는 공개 통합 표준이다.
    • 자체 인증을 수행하지 않고도 SP가 작업을 수행하고 ID를 전달하여 내부 및 외부 사용자를 통합할 수 있다.
    • SSO가 하나 이상의 애플리케이션 대신 여러 보안 기능을 수행할 수 있다.
  • JWT(JSON Web Token): 인터넷 표준 인증 방식으로, 인증에 필요한 정보들을 토큰에 담아 암호화시켜 사용하는 토큰이다.
    • 서명된 토큰으로 공개/개인 키를 쌍으로 사용하여 토큰에 서명할 경우 서명된 토큰은 개인 키를 보유한 서버가 이 서명된 토큰이 정상적인 토큰인지 인증할 수 있다.
  • AccessToken: 유효기간인 짧은 코튼
  • RefreshToken: 유효기간이 긴 토큰
  • SSO(Single Sign-On): 1회 사용자 인증으로 다수의 애플리케이션 및 웹 사이트에 대한 사용자 로그인을 혀용하는 인증 솔루션이다.
    • 한 번 자격이 검증된 사용자에게는 반복되는 로그인 없이 모든 암호 보호 리소스에 액세스하도록 하여 보안과 사용자의 경험을 모두 충족할 수 있다.
  • OIDC(OpenID Connect): OAuth 2.0 프로토콜을 기반으로 상위계층에서 간편하게 인증을 처리하며, 신원확인 스비스(IdP)를 통해 보다 안전한 방식으로 사용자 정보를 제공할 수 있다.
  • Authentication : 인증
  • Authorization : 인가
  • Cookie: 웹사이트에 접속할 때 서버에 의해 사용자의 컴퓨터에 저정되는 정보(사이트가 사용하게 되는 일련의 작은 기록 파일)이다.
    • 서버가 클라이언트에 정보를 전달할 때 저장하고자 하는 정보를 응답 헤더(cookie)에 저정하여 전달하며 key-value형식의 문자열 형태로 저장한다.
  • Session: 웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법이다. 사용자가 브라우저를 닫아 서버와의 연결을 끝내는 시점을 세션이라고 한다.
    • 서비스가 돌아가는 서버 측에 데이터를 저장하고, 세션의 키값만을 클라이언트 측에 남긴다.

3. LINUX/UNIX 기본 명령어

Linux에서 사용자에게 읽기/쓰기/실행 권한을 부여하고, 그룹에게는 읽기/실행을 부여하고, 그 이외에는 실행 권한을 test.txt파일에 부여하기 위한 명령어를 작성하시오.(8진법 사용)

🖍 chmod 751 test.txt
1️⃣ rwx r-x --x
        ↓ ('-'는 0, 나머지는 1로 바꿈)
2️⃣ 111 101 001
        ↓ (3자리 2진수를 8진로 변환)
3️⃣ 7 5 1

  • UNIX에서 파일의 권한(permission)을 10자리로 표현.
    1번째 : d(디렉토리) / -(파일)
    2~4번째 : 소유자(Owner) 권한
    5~7번째 : 그룹(Group) 권한
    8~10번째 : 기타 사용자(Other) 권한
  • r(읽기), w(쓰기), x(실행), -(권한없음)
  • 권한 표현 방식을 8진수로 변경
    각 권한을 권한있음(1) / 권한없음(0)으로 변경 뒤 8진수로 변환

Linux는 1991년 리누스 토발즈(Linus Torvalds)가 UNIX를 기반으로 개발한 운영체제이다. 프로그램 소스 코드가 무료로 공개되어 있기 깨문에 프로그래머가 원하는 기능을 추가할 수 있고, 다양한 플랫폼에 설치하여 사용이 가능하다.

  • 시스템 관련
    • cat : 파일 내용을 화면에 표시
  • 파일 권한
    • chmod : 파일의 보호 모드를 설정하여 파일의 사용허가를 지정
    • chown : 파일 소유자와 그룹을 변경
  • find : 파일을 찾음
  • 파일 처리
    • ls : 현재 디렉터리의 파일 목록 표시
    • pwd : 현재 작업중인 디렉토리 경로를 화면에 표시
    • cp : 파일을 복사
    • rm : 파일을 삭제
    • mv : 파일 이동
  • cd : 디렉터리의 위치를 변경
  • mkdir : 디렉터리 생성
  • rmdir : 디렉터리 삭제
  • 프로세스
    • kill : PID(프로세스 고유 번호)를 이용하여 프로세스를 종료
  • fork : 새로운 프로세스 생성
  • ps : 현제 실행중인 프로세스를 표시
  • 사용자
    • who : 현재 시스템에 접속해 있는 사용자를 표시

4. C Lang. - 완전수

#include <stdio.h>

int perfect_number(int n) {
  int i, sum = 0;
  
  for (i = 1; i <= n / 2; i++){
    if (n % i == 0) // 나머지가 0이면 true
      sum += i;
  }

  if (n == sum) 
    return 1;
    
  return 0;
}

int main(){
  int i, sum=0;

  for (i = 2; i <= 100; i++){ 
    if (perfect_number(i)) // return된 값이 0이면 거짓이므로 if문 안의 코드를 실행하지 않음
      sum += i;
  }

  printf("%d ", sum); 
  return 0;
}

🖍 34
1️⃣ main에서 코드 시작.
2️⃣ i = 6, perfect_number(i)
3️⃣ n = 6, for (i = 1; i <= n / 2; i++)
if (6 % 1 == 0)
sum += 1;
if (6 % 2 == 0)
sum += 2;
if (6 % 3 == 0)
sum += 3;
∴ sum = 1+2+3
4️⃣ n = 6, sum = 6, if (n == sum)
return 1;
5️⃣ i = 6, perfect_number(i) = 1, if (perfect_number(i))
∴ sum = 6
7️⃣ ∴ sum = 6 + 28
완전수란? 자기 자신을 제외한 약수(진약수)들의 합이 자기 자신이 되는 수이다.
최초 7개의 완전수 6, 28, 496, 8128, 33550336이다.

5. C Lang. - 구조체

C언어에서 구조체 멤버에 접근하기 위해 괄호안의 '기호'를 작성하시오.

#include <stdio.h>
#include <stdlib.h>

typedef struct Data{
    char c;
    int *numPtr;
} Data;

int main(){
  int num = 10;
  Data d1;
  Data *d2 = malloc(sizeof(Data));

  d1.numPtr = &num;
  d2(   )numPtr = &num;

  printf("%d\n ", *d1.numPtr); //10
  printf("%d\n ", d2(   )numPtr); // -1556740108, 메모리의 첫번째 주소 리턴
  
  free(d2); //더 이상 필요없을 때 해제
  return 0;
}

🖍
구조체는 구조체 변수로 접근할 때는 ., 구조체 포인터로 접근할 때는 로 접근한다.

#include <stdlib.h>
void* malloc(size_t size)

malloc() 함수를 사용하기 위해서는는 <stdlib.h> 헤더나 <malloc.h> 헤더를 포함해야 한다.

  • 인자 값(size_t) : 동적으로 할당할 메모리의 크기
  • 반환 값: 성공시 할당한 메모리의 첫번째 주소 리턴, 실패시 NULL리턴
#include <stdlib.h> // free함수가 포함된 헤더파일
void free(void *ptr);

malloc() 함수를 사용한 뒤 꼭 메모리를 해제시켜줘야 한다.

  • 인자 값(ptr) : 해제하고자 하는 메모리의 포인터

malloc() 함수를 호출하면 메모리만 할당하며 할당한 메모리의 값을 초기화하지 않는다. 즉, 메모리를 동적 할당하면 힙 메모리에 공간이 생성된다. 이 공간은 프로그램이 종료될 때까지 존재해, 동적으로 할당받은 힙 메모리를 해제하지 않으면 사용하지 않는 메모리량이 증가하게 되어 메모리의 낭비를 초래한다. 이러한 현상을 메모리 누수라고 한다. 사용하지 않는 메모리는 free() 함수를 호출하여 해재해야 한다.



참고,
https://m.blog.naver.com/javrin4/220956809081
https://coding-factory.tistory.com/671

profile
사용자 경험 향상과 지속적인 성장을 추구하는 프론트엔드 개발자 ʚȉɞ

0개의 댓글