[정보처리기능사-실기]02. 프로그래밍 언어 활용 (프로그래밍 언어 활용)
1. 프로그래밍 언어의 기본 문법
1) 데이터 타입
- 데이터 타입 : 변수에 들어갈 값의 특성을 구분 -> 특성에 맞게 저장할 수 있도록 하는 데이터 속성값의 길이 및 성질
- 데이터 타입 유형
불린 타입 | - 참(true)과 거짓(false)를 의미함 - 컴퓨터 언어에서는 1이 참(true), 0이 거짓(false)이다. |
문자 타입 | - '문자 하나'를 저장할 때 사용 ex) char a = 'A' (작은 따옴표로 감싸줘야 함) |
문자열 타입 | - "문자열"을 저장할 때 사용 ex) string a = "Hello" (큰 따옴표로 감싸줘야 함) |
정수 타입 | - 정수값을 저장할 때 사용 |
부동 소주점 타입 | - 소수점을 포함하는 실숫값을 저장할 때 사용 |
배열 타입 | - 여러 데이터를 하나로 묶어서 저장할 때 사용 - C언어 : 배열의 크기를 선언, JAVA : 배열의 크기를 비워 둠 ex) C언어 정수형 배열 선언 : Array[3] = {1, 2, 3}; JAVA 정수형 배열 선언 : Array[] = {1, 2, 3}; |
- 서식 지정자
- 변수 혹은 값 출력문을 통해 출력하기 위해 사용
- printf 는 문자열만을 출력, 이스케이프(탈출)문과 같이 문자열 선언을 탈출하여 변수를 인식시키는 것
이스케이프(탈출)문의 예 (printf문에 \n 이나 \t 가 있을 시 반드시 줄바꿈 하여 서술한다.)
☞ \n : 강제 개행, \t : 탭
정수형 | %d | 부호 있는 10진수 정수 (가장 많이 쓰임) |
%u | 부호 없는 10진수 정수 | |
%o | 부호 없는 8진수 정수 | |
%x | 부호 없는 16진수 정수 | |
실수형 | %f | 소수점 6번째까지의 실수 (가장 많이 쓰임) |
%e | 0.000000e+00, 실수 지수 표현 | |
%g | 숫자 값의 크기에 따라 %e 나 %f 로 표현 | |
문자형 | %c | 단일 문자 출력 |
%s | 문자열 출력 |
2. 연산자
1) 산술 연산자
- 종류
- + : 더하기
- - : 빼기
- * : 곱하기
- / : 나누기
- % : 나머지
- 산술 연산자 우선 순위 : 수학과 동일한 우선순위를 따른다.
- (괄호)
- * (곱하기), / (나누기), % (나머지)
- + (더하기), - (빼기)
※ 같은 우선순위 안에서는 왼쪽부터 차례로 연산함
2) 시프트 연산자
- 10진수의 값을 2진수로 변환하여 비트의 위치를 이동시키는 연산자
<< (Left) |
해당 값만큼 비트의 위치를 좌측으로 이동 | ex) int num = 5; // 0000 0101 int result = num << 2; // 0001 0100 printf("%d", result); // 20출력 |
>> (Right) |
해당 값만큼 비트의 위치를 우측으로 이동 |
3) 관계 연산자
- 두 피연산자 사이의 크기를 비교하는 연산자 (참과 거짓을 구분함)
> , < (초과) , (미만) |
ex) printf("%d", 10 < 3); // 결과 : 0(false) |
>= , <= (이상) , (이하) |
ex) printf("%d", 5 <= 5); // 결과 : 1(true) |
== (같다) |
ex) printf("%d", 10 == 3); // 결과 : 0(false) |
!= (다르다) |
ex) printf("%d", 5 != 3); // 결과 : 1(true) |
4) 논리 연산자
- 두 피연산자 사이의 논리적인 관계를 정의하는 연산자
&& (AND) |
두 논릿값이 모두 참일 때 참(true)을 반환, 그렇지 않으면 거짓(false)을 반환함 |
ex) 10 > 5 && 5 < 10 // 결과 : 1(true) |
|| (OR) |
두 논릿값 중 하나라도 참이면 참(true)을 반환, 그렇지 않으면 거짓(false)을 반환함 |
ex) 10 > 5 || 5 > 10 // 결과 : 1(true) |
5) 비트 연산자
- 0과 1의 각 자리에 대한 연산을 수행하며, 0 또는 1의 결과값을 가짐
& (and) |
두 값을 비트로 연산하여 모두 참일 때 참(true)을 반환, 그렇지 않으면 거짓false)을 반환함 |
| (or) |
두 값을 비트로 연산하여 하나라도 참이면 참(true)을 반환, 그렇지 않으면 거짓false)을 반환함 |
^ (xor) |
두 값을 비트로 연산하여 서로 다르면 참(true)을 반환, 그렇지 않으면 거짓false)을 반환함 |
6) 증감 연산자
- 피연산자를 1씩 증가시키거나 감소시킬 때 사용
- 전위 연산자 (++a / --a) : 먼저 증감 후, 연산 수행
int a = 5; int 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 += 2 → a = a + 2 |
-= | s -= 2 → a = a - 2 |
*= | a *= → a = a * 2 |
/= | a /= 2 → a = a / 2 |
%= | a % = 2 → a = a % 2 |
8) 삼항 연산자
- 조건에 부합할 경우, ture와 false에 해당하는 값을 출력하는 연산자
구문 )
조건 ? true : false
// ? ☞ 조건과 결과 구분
// : ☞ 참과 거짓 구분
9) 진법 입력 및 출력 연산자
- 프로그래밍에서 기본적으로 10진법 형태의 숫자를 사용하지만 다른 진법으로 표현하면 다음과 같다.
구분 | C언어 | 파이썬 | JAVA |
입력 | 2진법 = 0b 8진법 = 0 16진법 = 0x |
2진법 = 0b 8진법 = 0o 16진법 = 0x |
2진법 = Integer.ValueOf(int, 2) 8진법 = Integer.ValueOf(int, 8) 16진법 = Integer.ValueOf(int, 16) |
출력 | 10진법 = %d 8진법 = %o 16진법 = %x |
10진법 = bin() 8진법 = oct() 16진법 = hex() |
10진법 = Integer.toBinaryString(int) 8진법 = Integer.toOctalString(int) 16진법 = Integer.toHexString(int) |
3. 명령문
1) 조건문
① if / else if / else 문
- C언어, JAVA
// 중괄호의 경우 두 줄 이상 시에 작성
// if문은 중괄호 없을 시 하단 1줄까지만 인식
if( 조건문 ) {
실행문;
}
else if( 조건문 ) {
실행문;
}
else {
실행문;
}
- 파이썬
# 들여쓰기 없으면 오류 발생
if 조건문 :
실행문;
elif 조건문 :
실행문;
else :
실행문
② switch / case문
- C언어, JAVA
switch(변수) {
case 값 :
실행문;
default :
실행문;
}
- 파이썬은 switch / case문이 없음
※ break문이 없다면 조건이 만족하는 부분부터 switch문이 종료되는 곳까지 실행문이 모두 실행
ex)
- break문 있을 때
int main() {
int num;
num = 1;
switch(num) {
case 1 :
printf("%d\n"num + 2); // 3출력
break; // 반복문 탈출하기 때문에 코드 종료됨
case 2 :
printf("%d\n", num + 1);
break;
default :
printf("%d\n", num);
break;
}
}
- break문 없을 때
int main() {
int num;
num = 1;
switch(num) {
case 1 :
printf("%d\n"num + 2); // 3출력
case 2 :
printf("%d\n", num + 1); // 2 출력
default :
printf("%d\n", num); // 1 출력
}
}
2) 반복문
- for문
// 시작과 종료 조건을 지정해 참인 동안에 해당 문장을 반복해서 실행
for(기준값; 조건문; 증감문) {
실행문;
}
- while문
// 수식이 거짓이 될 때까지 문장을 반복해서 실행
while(조건문) {
실행문;
}
- do while문
// 조건이 부합하지 않더라도 한 번은 반복
do {
실행문;
} while(조건문);
※ 반복문에서 for문은 구문 안에 기준값이 있어서 초기값에 다른 수가 설정 되어 있지 않아도 실행에 문제가 없지만,
while문과 do while문은 초기값 선언을 반드시 해줘야 한다. (선언 하지 않으면 오류 발생)
3) 제어문
① break, continue
- break : 해당 반복문을 멈추고, 탈출하는 데 사용
- continue : 반복문을 유지하면서, 다음 반복으로 건너뛴다
② 함수(JAVA : 메소드)
- 반복적인 코드의 사용을 방지하기 위해, 하나의 항을 만들어 필요할 때마다 해당 값 호출하여 반환
자료형 함수명(매개변수) {
실행문;
return 함수명;
}
ex)
int main(void) {
int n = 10;
n = num(n)
printf("%d", n); // 11 출력
}
int num(int s) {
S = S + 1;
return s;
}
int main(void) {
int n = 10;
num(n)
printf("%d", n); // 1 출력
}
int num(int s) {
S = S + 1;
return s;
}
※ 위 두 예제에서 첫 번째 예제에는 함수 호출 후 저장되는 부분이 있지만, 두 번째 예제에서는 저장되는 부분이 없기 때문에
각각 11 과 1 을 출력한다.
4. 사용자 정의 자료형
※ 각 자료형의 키워드를 잘 기억하자 ~
1) 열거체
- 괄호 안에 연속적인 값이 들어가는 자료형
- 특정 값을 넣어주지 않으면 1씩 늘어남
enum {
상수 멤버1
상수 멤버2
상수 멤버3
}
ex)
enum color {
black; // 0
red; // 1
yellow = 10; // 10
green; // 11
}
※ 열거체에서 아무 값도 지정하지 않았을 때 초기값은 0, 중간에 숫자를 지정하게 되면 그 숫자로 초기화 된다.
2) 구조체
- 괄호 안에 멤버 변수를 사용하는 자료형
- 내부에 멤버 변수 자료형을 마음대로 선언 할 수 있고, 멤버 변수 함수 작성도 가능
struct {
자료형 변수명1
자료형 변수명2
자료형 변수명3
반환자료형 함수명() {
}
}
ex)
// 구조체 정의 후 메인문에서 구조체 변수를 다시 선언한다.
struct {
int kor;
int eng;
int mat;
};
// 구조체 변수는 점(.)으로 구조체 멤버에 접근하여 값을 할당 후 출력
main() {
struct Test t1;
t1.kor = 90;
t1.eng = 80;
t1.mat = 100;
}
3) 공용체
- 구조체와 유사하나 조금 더 범주가 큼
- 공용체명을 작성해야 하며, 구조체를 멤버로 사용할 수 있다.
union 공용체명 {
자료형 변수명1
자료형 변수명2;
자료형 변수명3;
struct {
}
}
ex)
// 메모리 공간을 공유하여 크기를 작게 사용하므로 임베디드나 통신분야에 많이 쓰임
union Test {
int kor;
int eng;
int mat;
};
main() {
union Test t1;
t1.kor = 90;
t1.eng = 80;
t1.mat = 100;
}
4) 추상화와 상속
① 추상화
- 세부 사항은 배제하고 중요한 부분을 중심으로 간략화 하는 기법
- 추상화 종류
- 기능 추상화 : 입력 자료를 출력 자료로 변환하는 과정을 추상화
- 자료 추상화 : 자료와 자료에 적용할 수 있는 오퍼레이션을 함께 정의
- 제어 추상화 : 외부 이벤트에 대한 반응을 추상화
② 상속
- 상위 수준 그룹의 모든 특성을 하위 수준 그룹이 이어받아 재사용 또는 확장
- 단일 상속과 다중 상속이 있으며, 상위 수준의 그룹이 하나만 존재할 때 이를 단일 상속이라 함
③ 구체화
- 하위 수준 그룹이 상위 수준 그룹의 추상적인 부분을 구체화 시키는 것