정보처리기능사 실기 Part 1 - Chapter 2. 프로그래밍 언어 활용 #1

HongInSung·2022년 7월 15일
post-thumbnail

이 글은 이기적 정보처리기능사 실기 기본서를 기반으로 제작되었습니다.

소개

어떤 의미로는 가장 어렵기도, 가장 쉽기도 한 챕터입니다.
그만큼 정보처리기능사에 있어서 가장 중요한 챕터라는 겁니다,
이 챕터에서는 시험에 있어서 중요한 부분들이 많습니다.
그러므로, 꼭 읽어보시는 것을 추천드립니다.

프로그래밍 언어 활용의 개요

프로그래밍 언어란? 컴퓨터 시스템을 동작시키기 위한 프로그램 작성 언어를 의미합니다.
주로 C++, Java, Python을 많이 사용하죠.
프로그램은 다소 단순해 보이는 명령어들의 조합으로 구성됩니다.
이러한 조합들은 우리가 흔히 부르는 32bit, 64bit같은 비트(bit)라고 불리는 0과 1의 값으로 작성되거나 변환되어 컴퓨터가 이해할 수 있도록 합니다.

공고 출신분들이라면 왜 귀찮게 bit로 바꿔서 하는지 아실겁니다.
멍청한 컴퓨터는 우리가 사용하는 한국어, English, 中國語, 日本語를 알아먹지 못합니다.
그래서 컴퓨터한테 한국어로 ~~해줘! 하고 하면 컴퓨터는 몰?루을 내뿜기때문에 bit 변환이 필요하죠.

  • 비트(Binary Digit의 약칭 Bit)
    위에서 설명한대로 비트는 컴퓨터를 이해하기(시키기) 위한 가장 기본적인 용어입니다.
    우리가 흔히 사용하는 컴퓨터에서 1byte는 8비트를 의미합니다.

    그냥 2에 10승, 20승식으로 더하시면 됩니다.

  • 컴퓨터 시스템의 구조
    컴퓨터는 전달받은 0과 1의 값들을 정해진 순서대로 실행, 그 과정에서 처리, 저장 등을 수행합니다.
    프로그램 실행 및 데이터 처리는 CPU가, 저장은 기억장치(Memory)가 수행합니다.
    중앙처리장치(CPU)로부터 명령을 받아 데이터를 입력 또는 출력하는 일은 입출력장치가 수행합니다.

    중앙처리장치에서는 목적에 따라 연산을 수행합니다.
    연산을 위한 명령어를 실행하고 기록하기 위해서는 일반적으로 인출, 해석, 실행, 기록의 단계를 거쳐야 된다네요.

프로그래밍 언어의 기본 문법 및 용어

프로그래밍 기본 용어

저번 알고리즘 챕터에서 변수에 대해 잠깐 다뤘었지만, 여기서 다시 다루도록 합시다.

  1. 변수 : 변하는 수라는 의미입니다. 저번 챕터에서 소개드렸듯이 변하는 값을 저장하는 공간입니다.
  2. 식별자 : 프로그램의 구성요소를 식별하기 위한 기준입니다. 변수명이 식별자에 속하죠.
  3. 바인딩 : 변수와 변수에 관련된 속성을 연결하는 과정입니다. 정적 바인딩과 동적 바인딩으로 구분됩니다.
    • 정적 바인딩
      프로그램 실행 시간 전에 속성을 연결하는 방식
    • 동적 바인딩
      프로그램 실행 시간에 속성을 연결하는 방식
  4. 선언 : 변수의 이름, 데이터 타입 등의 속성을 부여하는 작업입니다. 명시적 선언과 묵시적 선언으로 구분됩니다.
    • 명시적 선언
      선언문을 이용하며 변수 이름을 나열하고 속성을 부여하는 방식입니다.
      int a = 10;
    • 묵시적 선언
      별도의 선언문 없이 디폴트 규칙에 의해 속성을 부여하는 방식입니다.
  5. 영역 : 이름이 사용되는 범위를 의미합니다. 정적 영역과 동적 영역으로 구분됩니다.
    • 정적 영역
      변수를 찾을 떄 구조에 기반하는 방식
    • 동적 영역
      변수를 찾을 때 구조보다는 순서에 기반하는 방식
  6. 할당 : 변수에 메모리 공간을 바인딩하는 작업을 의미합니다. 할당은 연결이 아닙니다.
  7. 데이터 타입 : 변수가 가질 수 있는 속상값의 길이 및 성질을 의미합니다.
    int, float, string, char, etc...
  8. 연산자 : 데이터 처리를 위해 연산을 표현하는 기호입니다. +, -등과 같은 연산자를 포함합니다.
  9. 명령문 : 프로그램을 구성하는 문장으로, 지시 사항을 처리하는 단위를 의미합니다.
    int main(){
      int a = 10;
      if ( a == 10 ) {
        printf(a);
      } else {
        printf("없음);
      }
    }

변수와 데이터 타입

  1. 변수
    변수는 저장하고자 하는 어떠한 값이 있을 때, 그 값을 주기억장치에 기억하기 위한 공간을 의미합니다.

  2. 변수 선언 규칙
    변수는 프로그램 소스코드의 공유, 유지 보수, 표준화 등을 위해 일정한 규칙에 따라 작성되어야 합니다.
    변수선언에 대표적인 규칙은 다음과 같습니다.

    • 영문 대문자 / 소문자 ( 대소문자 구분 ), 숫자, 밑줄(_), 의 사용이 가능합니다. 이 이외에 문자는 사용하면 안되요.
    • 첫 번째 자리는 숫자로 시작할 수 없습니다.
    • 변수 이름의 중간에는 공백이 들어가면 안됩니다.
    • 이미 사용되고 있는 예약어 ( 키워드 )를 사용하면 안되요.
    • 여기서 예약어는 for, char, short, if 등과 같이 프로그래밍 언어에서 이미 사용하고 있는 단어를 의미합니다.
  3. 데이터 타입
    변수의 들어갈 값의 특성을 구분하여 그 특성에 맞게 저장할 수 있도록 하는 데이터 속성값의 길이 및 성질을 의미합니다.

  4. 데이터 타입 유형
    프로그래밍 언어에 따라 데이터 타입의 유형을 구분하는 기준에 차이가 있습니다.
    일반적으로는 아래와 같은 유형으로 나뉜다네요.

    • 불린 타입
      True, False 즉, 참과 거짓을 의미하는 데이터 타입

    • 문자 타입
      문자 하나를 저장할 때 사용하는 데이터 타입
      char a = 'A'

    • 문자열 타입
      문자열을 저장할 때 사용하는 데이터 타입
      String a = "welcome"
      C언어에서는 지원하지 않습니다. (C언어는 배열을 사용)

    • 정수 타입
      정수값을 저장할 때 사용하는 데이터 타입
      JAVA와 C/C++에서 사용하는 타입들이 다르고, 범위도 다릅니다.
      여기서 Java와 C/C++에서 사용하는 정수형 타입을 확인할 수 있습니다

    • 부동 소수점( float ) 타입
      소수점을 포함하는 실숫값을 저장하고자 할 때 사용하는 데이터 타입

    • 배열 타입
      여러 데이터를 하나로 묶어서 저장하고자 할 때 사용하는 데이터 타입
      C언어에서는 배열의 공간을 선언하여 사용합니다.
      Java에서는 배열의 공간을 선언할 필요가 없습니다.
      Array[5] = [1,2,3,4,5];
      Array[] = [1,2,3,4,5];
  5. 서식 지정자
    변수 혹은 값을 출력하기 위해 사용합니다.

    • printf를 이용해 서식지정자를 사용합니다.
    • 이스케이프문과 같이 문자열 선언을 탈출하여 변수를 인식시키는 것을 서식 지정자라고 한다.
    #include <stdio.h>
    
    int main(void){
    	char num1 = 'A' // num1에 A 대입 ( char형 )
        int num2 = 2000; // num2에 2000 대입 ( int형 )
        float num3 = 1.23 // num3에 1.23 대입 ( float형 )
        
        //printf(서식 지정자, 값(변수 or 상수))
        printf("%c %d", num1, num2) // A, 2000이 결과값으로 나옵니다
        printf("%f", num3) // 1.230000이 결과값으로 나옵니다
        printf("%d", num1) // 65가 결과값으로 나옵니다 ( 아스키코드 )
    }

    char을 %d로 출력하면 아스키코드가 출력됩니다.
    위에 사용한것 이외에도 서식 지정자는 많이 있습니다.

연산자

프로그램 실행을 위해 연산을 표현하는 기호입니다.
프로그램 내에서는 +, -와 같은 연산자가 사용됩니다.
연산자에는 산술 연산자, 시프트 연산자, 관계 연산자, 논리 연산자 등이 있다네요.

  1. 산술 연산자
    기본적인 연산자. 알고리즘 편에서 설명했었으니 간단하게 짚고 넘어갑시다.
    +,- = 더하기, 빼기
    *, / = 곱하기, 나누기 ( 전에 말했었죠? X, ÷ 아닙니다. )
    % = 나머지

    프로그래밍 언어도 연산자 우선순위가 있습니다.

    #include <stdio.h>
    
    int main(){
     int result1, result2;
     result1 = 10 + 15 % 4 - 20 % 9;
     result2 = 10 * 15 % 4 - 20 % 9 + 5;
     
     printf("결과 : %d %d", result1, result2);
     
     return 0;
    }

    위 코드를 해석해보자.
    위와 같은 연산자 우선순위를 따르자면 result1에 풀이는 다음과 같아집니다.

      = 10 + ( 15 % 4 ) - ( 20 % 9 )
      = 10 + 3 - 2
      = 11
      result1 = 11

    같은 방식으로 result2도 풀어봅시다.

      = (( 10 * 15 ) % 4 ) - ( 20 % 9 ) + 5
      = 150 % 4 - 2 + 5
      = 2 - 2 + 5
      = 5
      result2 = 5

    풀이법은 생각보다 간단합니다.
    이런식으로 우선순위가 있는 것을 괄호로 묶고 계산한다면, 결과값이 나올것입니다.
    시험시간은 많으니까, 수학문제는 이런식으로 풀고 답을 다시기 바랍니다.

  2. 시프트 연산자
    10진수의 값을 2진수로 변환하여 비트의 위치를 이동시키는 연산자
    2진수는 들어봤죠? 정보처리기능사 필기에서 꼭 나오는 부분이니 당연하죠.
    << (Left) = 우측 값만큼 비트의 위치를 좌측으로 이동.

    // Shift <<
    int num = 5; // 0000 0101
    int result = num << 2; // 0001 0100 두자리 왼쪽으로 땡겨진것을 알 수 있다. 
    printf("%d", result)

    >> (Right) = 우측 값만큼 비트의 위치를 우측으로 이동

    // Shift >>
    int num = 5; // 0000 0101
    int result = num >> 2 ; // 0000 0001 두자리 오른쪽으로 땡겨진것을 알 수 있다. 
    printf("%d", result)
    // Shift Example
    #include <stdio.h>
    int main(){
    	int num1, num2, result
        num1 = 15;
        num2 = 4
        result = num1 >> 3 << num2
    }
  3. 관계 연산자
    두 피연산자 사이의 크기를 비교하는 연산자
    참(True)과 거짓(False)를 구분합니다.
    - >, < : 초과, 미만
    - >=, <= : 이상, 이하
    - == : 같다
    - != : 다르다
    순서도에서 다르다는 <>, !=, ≠기호 사용이 가능합니다.
    하지만, 프로그래밍 언어에서는 !=만 사용 가능합니다!

    // Example Relational Operator
    #include <stdio.h>
    int main(){
    	int a = 10;
    	int b = 20;
    	
      printf("%d", a < b) // 결과 : 0 ( False )
    // 결과값 20 아닙니다. 더 높은게 나오는게 아닌, True(1) 또는 False(0)이 나와요.
    }
  4. 논리 연산자
    두 피연산자 사이의 논리적인 관꼐를 정의하는 연산자입니다.
    AND와 OR를 생각하시면 됩니다.
    &&(AND) : 모두 참일 경우 True 그렇지 않으면 False
    ||(OR) : 하나라도 참일 경우 True 그렇지 않으면 False

    // Example Logic Operator
    #include <stdio.h>
    
    int main(){
    	int num1 = 7, int num2 = 22;
        int num3 = 10, int num4 = 90;
        
        printf("결과1 : %d\n", num1 < num2 && num3 > num4)
        printf("결과2 : %d\n", num1 < num2 || num3 > num4)
    }
    
    // 출력
    // 결과1 : 0
    // 결과2 : 1
    // 결과1은 AND 논리 연산자이므로, 둘 모두 성립해야 True를 반환하기 때문에 False를 반환
    // 결과2는 OR 논리 연산자이므로, 둘중 하나만 성립해도 True를 반환하기 때문에 True를 반환

    주의 : 출력문 안에서 \n(강제개행)과 띄어쓰기에 주의해야합니다. 답안에 줄바꿈 처리를 하지 않고 한줄로 적을 시 오답처리 되니 꼭! 주의하시기 바랍니다!

  5. 비트연산자
    비트연산자는 2진법에 대한 연산을 수행하는 연산자
    0과 1에 결과값을 가지고 있으며, 연산을 완료하고 10진법으로 다시 치환하여 출력됩니다.
    정보처리기능사 필기때도 나왔던 AND, OR, XOR 연산을 프로그래밍으로 하는것입니다.
    &(AND) : 두 값을 AND로 연산합니다. ( 모두 참이면 1, 아니면 0 )
    |(OR) : 두 값을 OR로 연산합니다. ( 하나라도 참이면 1, 아니면 0 )
    ^(XOR) : 두 값을 XOR로 연산합니다. ( 하나라도 참이면 0, 아니면 1 )
    XOR는 OR연산에 반대라고 생각하시면 됩니다.

    // Example Bit Operator
    #include <stdio.h>
    
    int main(){
    	int num1 = 37;
        int num2 = 13;
        
        printf("result1 = %d ", num1 & num2);
        printf("result2 = %d", num1 | num2);
        
        // 결과값 : result1 = 5 result2 = 45
        // result1 = 37 & 45
        // = 00100101 / 00001101 ( 2진수로 치환 )
        // = 00000101 ( 둘다 1일 경우만 1로 바꾸고 나머진 0 )
        // = 5 ( 10진수로 치환 )
        
        // result2 = 37 | 45
        // = 00100101 / 00001101 ( 2진수로 치환 )
        // = 00101101 ( 하나만 1일 경우만 1로 바꾸고 나머진 0 )
       	// = 45 ( 10진수로 치환 )
    }

    복잡한것같지만, 비트연산자는 굉장히 쉽습니다.
    단, AND기호와 OR기호를 햇갈릴 수 있으니 조심합시다.

  6. 증감 연산자
    피연산자를 1씩 증가시키거나 감소시킬 때 사용하는 연산자
    부호의 위치에 따라 전위 연산자와 후위 연산자로 구분됩니다.

    • 전위연산자 ( ++a / --a )
      먼저 피연산자를 증감시킨 후, 해당 라인에 연산을 수행합니다.
      // 전위연산자 예시
      int a = 5; b = 5;
      printf("%d %d", ++a, --b); // 출력 : 6 4
      printf("%d %d", a, b); // 출력 : 6 4
    • 후위연산자 ( a++ / a-- )
      해당 라인에 연산을 먼저 수행한 후, 피연산자를 증감시킵니다.
      // 후위연산자 예시
      int a = 5; int b = 5;
      printf("%d %d", a++, b--); // 출력 : 5 5 
      printf("%d %d", a, b); // 출력 : 6 4
  7. 복합 대입 연산자
    산술 연산자와 대입 연산자(=)를 간결하게 사용하는 연산자이다.
    예를 들어 a = a + 2를 한다고 했을때 이 복합 대입 연산자를 사용한다면 a += 2로 앞에 연산을 실행시킬수 있다.

    // 복합 대입 연산자 예시
    int num = 12;
    num += 1 // num = num + 1; 현재 13
    num -= 2 // num = num - 2; 현재 11
    num *= 3 // num = num * 3; 현재 33
    num /= 4 // num = num / 4; 현재 8.25
    num %= 5 // num = num % 5; 현재 3.25
  8. 삼항 연산자
    뒤에서 배울 if문에 프로토타입격인 연산자
    조건에 부합할 경우 True와 False에 해당하는 값을 출력하는 연산자입니다.

    // 삼한연산자 식
    조건 ? True : False
    // ? = 조건과 결과를 구분한다.
    // : = 참과 거짓을 구분한다.
    // 삼항연산자 예제
    int a = 10; int b = 3;
    char result;
    result = num1 > num2 ? 'A' : 'B'
    printf("%c", result);
    // 출력 : A
    // 위 조건이 부합하기 때문에 True값인 A가 출력된다.
  9. 진법 입력 및 출력 연산자
    직접 진법을 입력하고, 출력시키는 연산자
    프로그래밍에서 기본적으로는 10진법 형태의 숫자를 사용합니다.
    하지만 진법으로 입,출력하고 싶다면 다음 표를 참고하시면 됩니다.
    진법 입력 및 출력 언어 별 표

마치며

프로그래밍 언어 활용은 너무 방대하네요;
그럴 만큼 문제에서도 많이 나오고, 틀리면 안되는 문제이기도 합니다.
프로그래밍 언어 활용 #2에서 계속 보도록 합시다.
그럼 다음 시간때 다시 보죠.

profile
안녕하세요! 풀스택 노려보고 있는 홍인성입니다!

0개의 댓글