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

프로그래밍 언어란? 컴퓨터 시스템을 동작시키기 위한 프로그램 작성 언어를 의미합니다.
주로 C++, Java, Python을 많이 사용하죠.
프로그램은 다소 단순해 보이는 명령어들의 조합으로 구성됩니다.
이러한 조합들은 우리가 흔히 부르는 32bit, 64bit같은 비트(bit)라고 불리는 0과 1의 값으로 작성되거나 변환되어 컴퓨터가 이해할 수 있도록 합니다.
공고 출신분들이라면 왜 귀찮게 bit로 바꿔서 하는지 아실겁니다.
이 멍청한 컴퓨터는 우리가 사용하는 한국어, English, 中國語, 日本語를 알아먹지 못합니다.
그래서 컴퓨터한테 한국어로 ~~해줘! 하고 하면 컴퓨터는 몰?루을 내뿜기때문에 bit 변환이 필요하죠.
비트(Binary Digit의 약칭 Bit)
위에서 설명한대로 비트는 컴퓨터를 이해하기(시키기) 위한 가장 기본적인 용어입니다.
우리가 흔히 사용하는 컴퓨터에서 1byte는 8비트를 의미합니다.

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

중앙처리장치에서는 목적에 따라 연산을 수행합니다.
연산을 위한 명령어를 실행하고 기록하기 위해서는 일반적으로 인출, 해석, 실행, 기록의 단계를 거쳐야 된다네요.
저번 알고리즘 챕터에서 변수에 대해 잠깐 다뤘었지만, 여기서 다시 다루도록 합시다.
int a = 10;int, float, string, char, etc...int main(){
int a = 10;
if ( a == 10 ) {
printf(a);
} else {
printf("없음);
}
}변수
변수는 저장하고자 하는 어떠한 값이 있을 때, 그 값을 주기억장치에 기억하기 위한 공간을 의미합니다.

변수 선언 규칙
변수는 프로그램 소스코드의 공유, 유지 보수, 표준화 등을 위해 일정한 규칙에 따라 작성되어야 합니다.
변수선언에 대표적인 규칙은 다음과 같습니다.
데이터 타입
변수의 들어갈 값의 특성을 구분하여 그 특성에 맞게 저장할 수 있도록 하는 데이터 속성값의 길이 및 성질을 의미합니다.
데이터 타입 유형
프로그래밍 언어에 따라 데이터 타입의 유형을 구분하는 기준에 차이가 있습니다.
일반적으로는 아래와 같은 유형으로 나뉜다네요.
char a = 'A' String a = "welcome" C언어에서는 지원하지 않습니다. (C언어는 배열을 사용)Array[5] = [1,2,3,4,5];Array[] = [1,2,3,4,5];서식 지정자
변수 혹은 값을 출력하기 위해 사용합니다.
#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로 출력하면 아스키코드가 출력됩니다.
위에 사용한것 이외에도 서식 지정자는 많이 있습니다.

프로그램 실행을 위해 연산을 표현하는 기호입니다.
프로그램 내에서는 +, -와 같은 연산자가 사용됩니다.
연산자에는 산술 연산자, 시프트 연산자, 관계 연산자, 논리 연산자 등이 있다네요.
산술 연산자
기본적인 연산자. 알고리즘 편에서 설명했었으니 간단하게 짚고 넘어갑시다.
+,- = 더하기, 빼기
*, / = 곱하기, 나누기 ( 전에 말했었죠? 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
풀이법은 생각보다 간단합니다.
이런식으로 우선순위가 있는 것을 괄호로 묶고 계산한다면, 결과값이 나올것입니다.
시험시간은 많으니까, 수학문제는 이런식으로 풀고 답을 다시기 바랍니다.
시프트 연산자
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
}
관계 연산자
두 피연산자 사이의 크기를 비교하는 연산자
참(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)이 나와요.
}
논리 연산자
두 피연산자 사이의 논리적인 관꼐를 정의하는 연산자입니다.
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(강제개행)과 띄어쓰기에 주의해야합니다. 답안에 줄바꿈 처리를 하지 않고 한줄로 적을 시 오답처리 되니 꼭! 주의하시기 바랍니다!
비트연산자
비트연산자는 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기호를 햇갈릴 수 있으니 조심합시다.
증감 연산자
피연산자를 1씩 증가시키거나 감소시킬 때 사용하는 연산자
부호의 위치에 따라 전위 연산자와 후위 연산자로 구분됩니다.
// 전위연산자 예시
int a = 5; b = 5;
printf("%d %d", ++a, --b); // 출력 : 6 4
printf("%d %d", a, b); // 출력 : 6 4// 후위연산자 예시
int a = 5; int b = 5;
printf("%d %d", a++, b--); // 출력 : 5 5
printf("%d %d", a, b); // 출력 : 6 4복합 대입 연산자
산술 연산자와 대입 연산자(=)를 간결하게 사용하는 연산자이다.
예를 들어 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
삼항 연산자
뒤에서 배울 if문에 프로토타입격인 연산자
조건에 부합할 경우 True와 False에 해당하는 값을 출력하는 연산자입니다.
// 삼한연산자 식
조건 ? True : False
// ? = 조건과 결과를 구분한다.
// : = 참과 거짓을 구분한다.
// 삼항연산자 예제
int a = 10; int b = 3;
char result;
result = num1 > num2 ? 'A' : 'B'
printf("%c", result);
// 출력 : A
// 위 조건이 부합하기 때문에 True값인 A가 출력된다.
진법 입력 및 출력 연산자
직접 진법을 입력하고, 출력시키는 연산자
프로그래밍에서 기본적으로는 10진법 형태의 숫자를 사용합니다.
하지만 진법으로 입,출력하고 싶다면 다음 표를 참고하시면 됩니다.
진법 입력 및 출력 언어 별 표
프로그래밍 언어 활용은 너무 방대하네요;
그럴 만큼 문제에서도 많이 나오고, 틀리면 안되는 문제이기도 합니다.
프로그래밍 언어 활용 #2에서 계속 보도록 합시다.
그럼 다음 시간때 다시 보죠.
