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

HongInSung·2022년 7월 18일
post-thumbnail

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

소개

저번 시간에 이어 계속 프로그래밍 언어 활용을 배워보도록 합시다!

1. 명령문

명령문은 프로그램을 구성하는 문장입니다.
지시 사항을 처리하는 단위라고 볼 수 있겠네요.
기본적인 문법들의 종류가 매우 많은 것은 아닙니다. 그렇다고 적은것도 아닙니다.
각 언어마다 유사한 문법 체계를 사용합니다.

1) 조건문

삼항연산자에 강화판
조건의 참, 거짓 여부에 따라 실행 경로를 달리하는 if, if-else문,
여러 경로 중에 하나를 선택하는 switch case문이 있습니다.

  • if, if-else문
    if문은 FORTRAN에서 처음 사용하였으며, 현재 거의 모든 프로그래밍 언어에서 기본적인 명령문으로 사용하는 구문입니다.
    if문의 경우 단순 if문, 선택 if문, 중첩 if문의 유형으로 구분됩니다.
    프로그래밍 언어마다 기본형태는 조금씩 다릅니다. 다음 코드를 참고하세요.

    // C, Java, JavaScript
    if( 조건 ){ // 만약 조건에 부합한다면
        // Your code...; // 해당 구문을 실행한다. 뒤에 else, else if문은 무시한다.
    } else if ( 조건 ) { // 위 조건에 부합하지 않고 이 조건에 부합하다면
        // Your code...; // 해당 구문을 실행한다. 마찬가지로 뒤에 else를 무시한다.
    } else { // 위 2가지 조건에 모두 부합하지 않을 시
        // your code...; // 해당 구문을 실행한다.
    }
    # Python
    if 조건:
        # Your code...
    elif 조건:
        # Your code...
    else:
        # Your code...
    # 파이썬에서는 if 부분과 아래 부분에 들여쓰기가 없다면 오류가 발생합니다.
    // if Example
    #include <stdio.h>
    void main(){
        int num = 3;
        if ( num >= 5 )
        	printf("Hello"); // 5보다 작으므로 이 구문은 실행되지 않습니다.
        else if ( num >= 3 )
        	printf("Youngjin"); // 3보다 크므로 조건이 맞기에 Youngjin이 출력됩니다.
        else
        	printf("Miracle"); // else if문에 걸렸기 때문에, 이 구문은 실행되지 않습니다.
        return 0; // return 0로 넘어가 프로그램이 종료됩니다.
    }
    
    // 결과값 : Youngjin 
  • switch case문
    위에서 소개시켜준 if문은 산술 또는 논리적 비교가 가능하나, switch case문은 조건이 동일한지의 여부만 확인합니다.
    파이썬은 switch case문이 없으며, c와 java에 switch case문에 기본형태는 다음과 같습니다.

    // switch case by c / java
    switch(변수){ 
        case: // 위 변수값이 가진 value가 [값]과 같다면
            // Your code... // 해당 문법을 실행합니다.
        case:
            // Your code...
        default: // 아무런 조건도 맞지 않는다면 이 구문으로 와집니다.
            // Your code
    }

    여기서 중요한 포인트가 바로 break 입니다.
    해당 문법은 제어문에서 코드를 강제로 종료시켜주는 문법입니다.
    만약 해당 문법을 안쓰고 switch case를 쓸 경우...

    // no break; using switch case
    #include <stdio.h>
    int main(){
        int num;
        num = 1;
        switch(num){
            case 1:
                printf("%d", num + 2);
            case 2:
                printf("%d", num + 1);
            case 3:
                printf("%d", num + 3);
            default:
                printf("%d", num)
        }
    }
    
    // 출력값 : 3241

    이렇게 연속적으로 결과가 출력이 됩니다.
    왜 이럴까요?
    switch case문은 단순히 조건이 동일한지에 여부만 확인합니다.
    앞선 조건이 맞기만 한다면, 아래 구문들도 전부 맞다고 보고 실행시키죠.
    이런 함정 문제들이 문제에 많이 나오기 때문에 조심하는게 좋겠습니다.

    // use break; using switch case
    #include <stdio.h>
    int main(){
        int num;
        num = 1;
        switch(num){
            case 1:
                printf("%d", num + 2);
                break;
            case 2:
                printf("%d", num + 1);
                break;
            case 3:
                printf("%d", num + 3);
                break;
            default:
                printf("%d", num)
                break;
        }
    }
    
    // 출력값 : 3

    이렇게 break의 유무만 잘 파악해도 한문제는 맞히고 들어갈수 있습니다.
    해당 문제가 나온다는 보장은 없지만...

2) 반복문

반복문은 특정 구문을 조건이 만족할 때까지 실행하도록 하는 명령문입니다.
while문for문, do-while문이 있습니다.
FORTRAN의 do문이 시초라고 볼 수 있겠네요.
최근에는 do-while문은 별로 사용되지 않습니다. 대부분 while 또는 for문을 씁니다.

  • for문
    for문은 어떤 언어에서든, 기본적으로 많이 쓰이고 있는 반복문
    시작과 종료 조건을 지정, 참인 동안에는 해당 문장을 반복해서 실행합니다.

    // for c and java
    for ( 기준값; 조건문; 증감문 ){
    	실행문;
    }
    // Example For Loop
    #include <stdio.h>
    int main(){
    	int a = 0;
    	
    	for (int i = 0; i < 10; i++){
    		a += 1;
      } 
      
      printf("%d", a);
    }
    // 출력값 : 10
  • while문
    마찬가지로, for문과 같이 많이 쓰이고 있는 반복문입니다.
    조건문이 거짓이 될 때까지 해당 문장을 반복해서 실행합니다.

    // While c and java
    while (조건문){
    	실행문;
    	증감문;
    {
    // Example while Loop
    #include <stdio.h>
    int main(){
    	int sum, i = 1; // while문에 초기값은 여기서 설정해주셔야 합니다.
    	while (i <= 10){
    		sum += i;
    		i++;
    	}
    	printf("%d", sum);
    }
    // 출력값 : 55
  • do-while문
    이 반복문은 많이 쓰이지는 않지만, 종종 문제에 나오는 반복문입니다.
    이 반복문은 앞에 while과 비슷하지만 서로 다른점이 있습니다.
    while문은 조건이 만족하지 않는다면 반복문을 한번도 실행하지 않습니다.
    하지만, do-while문은 어찌됬든 한번이라도 do안에 있는 문장을 실행합니다.

    // do-while c and java
    do {
    	실행문;
    } while (조건문);
    // Example do-while Loop
    #include <stdio.h>
    int main(){
    	int sum, i = 1;
    	do {
    		sum += i;
    		i++;
      } while (i <= 10);
    	printf("%d", sum)
    }
    
    // 출력값 : 55

    do-while문은 함정문제로 나올 가능성이 있습니다. 조심하세요.

3) 제어문

제어문은 프로그램의 흐름을 제어할 수 있도록 도와주는 실행문을 말합니다.

  • break, continue
    일반적으로 특정 조건에서 빠져 나가기 위해 조건문 구문과 같이 사용하거나, 반복문 내에서 반복된 흐름을 벗어나기 위해 사용하는 제어문입니다.

    • break
      switch-case에서 사용했었죠.
      해당 반복문을 멈추고, 바로 밖으로 빠져나갑니다.

      // break
      #include <stdio.h>
      int main(void) {
          int sum;
          for (int i = 0; i <= 10; i++){
              if ( i >= 2 ) { // i가 2 이상이면
                  break; // break로 반복문을 멈춥니다.
              }
              sum += 1;
          }
          printf("%d", sum);
          return 0;
      }
      // 출력값 : 2
    • continue
      continue는 조건에 맞는다면 그 구문을 무시합니다.
      break와는 다르게 다음 반복으로 넘어가죠.

      // continue
      #include <stdio.h>
      
      int main(void) {
          int sum;
          for (int i = 0; i <= 10; i++){
              if ( i % 2 != 0 ) {
                  continue; // 홀수일 경우 밑 구문을 무시합니다.
              }
              sum += i;
          }
          printf("%d", sum);
          return 0;
      }
      // 출력값 : 30
      // 0 + 2 + 4 + 6 + 8 + 10이 되서 30이 됩니다.
  • 함수
    프로그래밍 언어에 꽃, 함수입니다.
    반복적인 코드의 사용을 방지하기 위해서 만들어진 것입니다.
    새로운 컨테이너를 만들고, 안에 재료를 주고 그 재료로 작업을 하고
    그 작업물을 다시 건네준다고 생각하시면 됩니다

    많은 비전공자들이 가장 어렵다고도 생각합니다만, 실제로는 아주 간단합니다.

    // Create Function
    자료형 함수명(매개변수){
    	실행문;
    	return 함수명;
    }
    // 자료형 = int, float등 여러가지 자료형
    // 매개변수 = 넘겨줄 값을 저장할 변수

    자바에서는 메소드라고 불립니다.
    자, 아래 예시를 보고 넘어가도록 하죠.

    #include <stdio.h>
    
    int testFunc(int num1, int num2){
    	printf("%d %d", num1, num2);
    }
    
    int main(void) {
    	testFunc(1, 2);
    	return 0;
    }
    
    // 출력값 : 1 2

    함수에서는 조심해야 하는 부분이 있습니다.

    #include <stdio.h>
    
    int testFunc(int num1){
        return num1 += 1;
    }
    
    int main(void) {
        int num = 1;
        testFunc(num);
        printf("%d", num);
        return 0;
    }
    
    // 출력값 : 1

    함수를 불러온다고 해서 num에 적용되는 것은 아닙니다.
    num은 전역변수가 아닌 지역변수이기 때문에 지역을 벗어나면 변수 변경이 불가능합니다.
    그래서 return으로 값을 불러오는 함수는 원래 있는 변수를 대입연산자로 바꾸거나, 새로운 변수를 만들어서 거기에 저장해야 합니다.
    이런 함정문제도 많이 나오니, 각별히 주의하도록 하는게 좋겠습니다.

    #include <stdio.h>
    
    int testFunc(int num1){
        return num1 += 1;
    }
    
    int main(void) {
        int num = 1;
        num = testFunc(num);
        printf("%d", num);
        return 0;
    }
    
    // 출력값 : 2

2. 사용자 정의 자료형

이 문제는 기능사에서 거의 출제되지 않습니다
C/C++, JAVA와 같은 프로그래밍 언어는 사용자가 직접 자료형을 만드는 것이 가능합니다.
이렇게 직접 만드는 자료형을 사용자 정의 자료형이라고 합니다.
C++의 경우 열거체, 구조체, 공용체로 구분하여 사용자 정의 자료형의 작성이 가능합니다.

1) 열거체

괄호 안에 연속적인 값이 들어가는 자료형입니다.
특정 값을 넣어주지 않으면 1씩 늘어나기 때문에 상수 배열이라고도 하죠.

// 열거체 구조
enum {
	상수 멤버1
    상수 멤버2
	상수 멤버3
};
// 열거체 예시
enum color{
	black,
    red,
    yellow = 10,
    green
};
// 열거체에서 아무 값도 지정해 주지 않으면 초기값은 0이 됩니다.
// 숫자를 지정하게 되면 그 숫자로 초기화가 되죠.
// 지정한 다음부터는 별도로 지정해 주지 않아도 1씩 증가합니다.
// 따라서 black = 0, red = 1, yellow = 10, green = 11로 정의됩니다.

2) 구조체

괄호 안에 멤버 변수를 사용하는 자료형입니다.
내부에 멤버 변수 자료형을 마음대로 선언할 수 있죠.
안에 멤버 함수를 넣는것도 가능합니다.

// 구조체 구조
struct{
	자료형 변수명1
    자료형 변수명1
	자료형 변수명1
    반환자료형 함수명(){
    
    };
}
// 구조체 예시
struct Test{
	int kor;
    int eng;
    int mat;
}

main(){
	struct Test t1;
    t1.kor = 90;
    t1.eng = 80;
    t1.mat = 100;
}

3) 공용체

공용체는 구조체와 거의 유사하지만, 조금 더 범주가 크다고 볼 수 있습니다.
열거체나 구저체와 달리 공종체명을 작성하여야 하며, 구조체를 멤버로 사용할 수 있습니다.
쉽게 말해, Java에 객체라고 생각하시면 됩니다.

// 공용체 구조
union 공용체명{
	자료형 변수명1	
    자료형 변수명2
	자료형 변수명3
    struct{
    };
}
// 공용체 예시
union Test{
	int kor;
    int eng;
    int mat;
}

main(){
	union Test t1;
    t1.kor = 90;
    t1.eng = 80;
    t1.mat = 100;
}
// 공용체는 구조체와 달리 메모리 공간을 공유하여 크기를 작게 사용합니다.
// 임베디드나 통신 분야에서 많이 쓰인다.

4) 추상화와 상속

  • 추상화
    복잡한 문제의 본질을 이해하기 위해 세부 사항을 배제하고 중요한 부분을 중심으로 간략화 하는 기법입니다.
    • 추상화의 종류
      1. 기능 추상화 : 입력을 출력 으로 변환하는 과정을 추상화 하는 방법
      2. 자료 추상화 : 자료와 자료에 적용할 수 있는 오퍼레이션을 함께 정의하는 방법
      3. 제어 추상화 : 외부 이벤트에 대한 반응을 추상화 하는 방법
  • 상속
    상위 수준 그룹의 모든 특성을 하위 수준 그룹이 이어받아 재사용 또는 확장하는 특성입니다.
    상속에는 단일 상속다중 상속이 있으며, 상위 수준의 그룹이 하나만 존재할 때 이를 단일 속성이라 부르죠
  • 구체화
    하위 수준 그룹이 상위 수준 그룹의 추상적인 부분을 구체화 시키는 것을 의미합니다.

마치며

드디어 프로그래밍 언어 활용이 끝났네요.
추상화, 상속같은 경우 문제에 내는 경우가 거의 없어서 한번씩 훑어보고 가시면 될 것 같습니다.
다음 시간때 다시 보죠.

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

0개의 댓글