본문 바로가기
시험

#실기 P1. ch2 프로그래밍 언어 활용

by 키튼햄 2023. 3. 13.

S1. 프로그래밍 언어활용

프로그래밍 언어

컴퓨터 시스템을 동작시키기 위한 프로그램 작성 언어

 

프로그램 : 명령어들의 조합으로 구성

명령어 : 비트(Bit)로 작성 또는 변환되어 컴퓨터가 이해할 수 있도록

비트(Bit; Binary Digit) : 정보의 최소 단위. 0과 1로 구성. 

바이트 (Byte) 1 byte = 8 bit  (1bit = 0.125 byte)
킬로바이트(KB) 1KB = 2의 10승 byte
메가바이트(MB) 1MB = 2의 20승 byte
기가바이트(GB) 1GB = 2의 30승 byte
테라바이트(TB) 1TB = 2의 40승 byte
페타바이트(PB) 1PB = 2의 50승 byte
엑사바이트(EB) 1EB = 2의 60승 byte

 

컴퓨터는 전달받은 0과 1의 값을 정해진 순서대로 실행, 처리, 저장함.

  • 중앙처리장치(CPU) :  프로그램 실행 및 데이터 처리 (인출-해석-실행-기록)
  • 기억장치 :  저장
  • 입출력 장치 (I/O Device) :  CPU로부터 명령을 받아 데이터를 입력, 출력

 

 

프로그램 기본 용어

  • 변수(Var; Variable) :  어떤 값을 주기억장치에 기억하기 위해 사용하는 공간
  • 식별자 :  변수명. 프로그램의 구성요소를 구별하기 위한 기준
  • 바인딩 :  변수와 변수에 관련된 속성을 연결하는 것.
    • 정적 바인딩 :  프로그램 실행시간 에 속성 연결
    • 동적 바인딩 :  프로그램 실행 시간 에 속성 연결
  • 선언 : 변수에 이름, 데이터 타입 등의 속성 부여하는 것
    • 명시적 선언선언문 이용해 변수이름 나열, 속성 부여
    • 묵시적 선언 :  별도의 선언문X. 디폴트 규칙에 의해 이미 지정되어 있는 속성
  • 영역 :  이름이 사용되는 범위
    • 정적 영역 :  변수를 찾을 때 구조에 기반
    • 동적 영역 :  변수를 찾을 때 순서에 기반
  • 할당 :  변수에 메모리 공간을 바인딩하는 작업 (=직접 입력하는 것)
  • 데이터 타입 :  변수가 가질 수 있는 속성 값의 길이 및 성질
  • 연산자 :  데이터 처리를 위해 연산을 표현하는 기호
  • 명령문  : 프로그램을 구성하는 문장. 지시사항을 처리하는 단위
  • 예약어 :  프로그래밍 언어에서 이미 사용하고 있는 단위 (if, short, union, if, char 등)

 

 

1. 변수

변수 선언 규칙 : 영어 대소문자 구분&숫자&밑줄(_) 가능, 숫자로 시작X, 공백X, 예약어는 변수명으로 사용X

 

 

2. 데이터 타입

- 변수에 들어갈 값의 특성을 구분하여 그 특성에 맞게 저장할 수 있도록 하는 데이터 속성 값의 길이 및 성질

 

# 데이터 타입 유형

* 불린 타입 :  참과 거짓 (T, F)

* 문자 타입 :  문자 하나 저장   [char a = 'A']   (기호 : ' ' )

* 문자열 타입 :  문자열 저장  [ string a = "welcome" ]  (기호 : " " )

* 정수 타입 : 정수값 저장

구분 타입 크기 범위
Java byte 1byte  
short 2byte  
int 4byte  
long 8byte  
C/C++ short 2byte  
unsigned short 2byte  
int 2byte (or 4byte)  
unsigned int 2byte (or 4byte)  
long 4byte  
unsigned long 4byte  

* 부동 소수점 타입 : 소수점을 포함하는 실숫값 저장

* 배열 타입 :  여러 데이터를 하나로 묶어서 저장. C언어는 배열공간(크기) 선언0, Java는 X(비워둠)

Array[5] = {1,2,3,4,5};
Array[] = {1,2,3,4,5};

 

 

3. 서식 지정자

- 변수, 값을 출력문을 통해 출력하기 위해 사용

  • printf :  문자열만 출력
  • 이스케이프문(탈출문) :  문자열 선언을 탈출하여 변수를 인식시키는 것. 출력문 내에서 특정 단축키 및 단어를 출력하기 위한 구문 (\n : 강제개행)(\t : 탭)
정수형 %d 부호 있는 10진수 정수
%u 부호 없는 10진수 정수
%o 부호 없는 8진수 정수
%x 부호 없는 16진수 정수
실수형 %f 소수점 6번째까지 실수
%e 실수 지수 표현
%g 숫자값의 크기에 따라 %e, %f로 표현
문자형 %c 단일문자 출력  charcter
%s 문자열 출력  string
char의 경우 정수를 ASCII 코드로 변환하기 때문에 문자를 출력.
반대로 A의 값을 %d(정수형)로 출력하면 ASCII 코드 A에 해당하는 숫자를 출력
주관식 답안 작성할때 강제개행(\n)과 띄워쓰기에 주의해야 함.
!!! 강제개행(\n)이 나오면 다음줄로 내려가서 답을 써야함. 없으면 같은 줄에 한 칸 띄우고 답 쓰기.

 

 

4. 연산자

1) 산술 연산자 (+, -, *, /, %)

우선순위는 일반 수학과 같음.

 

2) 시프트 연산자

- 10진수 값을 2진수로 변환하여 비트의 위치 이동

  • << (Left) :  우측 값만큼 비트의 위치를 좌측으로 이동
  • >> (Right) :  우측 값만큼 비트의 위치를 우측으로 이동
int num = 5;    // 0000 0101
int result = num << 2    // 0001 0100
printf("%d", result);     // 20 출력

3) 관계 연산자

- 크기 비교, 참거짓 비교(T or F)

  • > (초과), < (미만), >= (이상), <= (이하)
  • == (같다)  // =는 "대입하다"임
  • != (다르다)   // 순서도에서는 !=. ≠, <> 모두 가능하지만 프로그래밍에서는 != 만 가능함.   //  !은 Not 연산자로 논리값을 역전시켜 출력함.

 

4) 논리 연산자

- 두 피연산자 사이의 논리적인 관계 정의

  • && (and) :  두 가지 논리값이 모두 참일 때 T, 아니면 F
  • ∥ (or) :  둘 중 하나라도 참이면 T, 아니면 F

 

5) 비트 연산자

  • & (and) : 두 값을 비트(2진수)로 연산하여 모두 참이면 T, 아니면 F
  • ㅣ (or) :  두 값을 비트(2진수)로 연산하여하나라도 참이면 T, 아니면 F
  • ^ (xor) :  두 값을 비트(2진수)로 연산하여서로 다르면 T, 아니면 F

 

6) 증감 연산자

- 피연산자를 1씩 증가시키거나 감소시킬 때 사용하는 연산자

  • 전위 연산자 (++a, --a) :  증감 후, 계산
  • 후위 연산자 (a++, --a) :  계산하고 증감.

 

7) 복합 대입 연산자

  • +=       a +=2  →  a = a+2
  • -=        a -=2   →  a = a-2
  • *=        a *=2   →  a = a*2
  • /=        a /=2   →  a = a/2
  • %/       a %=2   →  a = a%2

 

8) 삼항 연산자

- 조건에 부합할 경우, T or F 에 해당하는 값을 출력하는 연산자

조건 ? True : False
// ? = 조건과 결과 구분
// : = 참과 거짓 구분

 

9) 진법 입력 및 출력 연산자

구분 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)
출력 2진법 = %d
8진법 = %o
16진법 = %x
2진법 = bin()
8진법 = oct()
16진법 = hex()
2진법 = Integer.toBinaryString(int)
8진법 = Integer.toOctalString(int)
16진법 = Integer.toHexString(int)

 

 

 

 

5. 명령문

- 프로그램을 구성하는 문장. 지시사항을 처리하는 단위

 

1) 조건문

if문, if-else문

- 조건의 참, 거짓 여부에 따라 실행 경로를 달리함.

- 조건이 맞았을 때, 맞지 않았을 때를 확인. 강제적으로 조건이 맞았을 때는 아래쪽은 실행되지 않고 출력됨.

 

* C언어, Java

if (조건){          // 중괄호의 경우 두 줄 이상 시에 작성한다.
	실행문;         // if 구문은 중괄호가 없을 시 하단 1줄까지 인식
}
else if(조건){
	실행문;
}
else(조건){
	실행문;
}

 

*파이썬

if 조건:
  명령;         // 파이썬은 if 부문과 아래 부분에 들여쓰기가 없으면 오류가 발생함
elif 조건:
  명령;
else:
  명령;

 

switch case문

- 조건이 동일한지의 여부만 확인

*C언어, Java

switch(변수){
	case 값 :       // case조건은 콜론(:)으로 구분. break 로 처리 종료.
    실행문;
default :           // default = if문의 else
	실행문;
}
                    //break문이 없으면 조건이 만족하는 부분부터 switch문이 종료되는 곳까지 실행문이 모두 실행됨.

 

 

2) 반복문 (for문)

- 특정 부분을 조건이 만족할 때까지 실행하도록 함.

- while문, for문, do-while문

- while문, do-while문은 초기값(기준값) 선언이 매우 중요. for문은 구문안에 기준값이 있음.

- while문, do-while문은 조건문만 있어 기준값과 증감문을 따로 지정해야함. for문은 구문안에 기준값과 조건 증감문이 있음.

for문 for(기준값;  조건문;  증감문{
    실행문;
}
시작, 종료 조건을 지정하여 참인 동안에는 해당 문장을 반복 실행
while문 while(조건문){
                        실행문;
}
수식이 거짓이 될 때까지 해당 문장을 반복 실행.
while문 안에는 증감문이 실행문 안에 포함되어 있어야 함.
do-while문 do{
            실행문;
}while(조건문);
while문과 동일하지만 조건이 부합하지 않더라도 한 번은 반복하게 됨.

 

 

3) 제어문

① break, continue

  • break (멈추다) : 해당 반복문을 멈추고, 탈출하는데 사용. [방향성] 해당 반복문이나 조건문에 대해서 아래쪽으로 실행.
  • continue (계속하다) :  반복문 유지하면서 다음 반복으로 건너뜀 = [방향성] 아래 구문을 시작하지 않고 다시 위의 반복문으로 돌아간다.

② 함수 (Java : 메소드)

- 반복적인 코드의 사용을 방지하기 위해, 하나의 항을 만들어서 필요할 때마다 해당 값을 호출하여 반환하는 역할을 수행.

자료형 함수명(매개변수)
{
	실행문;
    return 함수명;
}
예시

int function(int num1, int num2){       // ②
	printf("%d %d", num1, num2);        // 1 2 출력
    return function(num1, num2);        // function 함수 재호출 ③
}
int main(){
	function(1, 2);        // function 함수 호출 ①
}

 

 

 

6. 사용자 정의 자료형

- C, C++, Java와 같은 프로그래밍 언어에서는 사용자가 직접 자료형을 만드는 것이 가능. 이것을 사용자 정의 자료형이라 함.

- C++의 경우 열거체, 구조체, 공용체로 구분해 작성 가능.

 

1) 열거체

- 괄호 안에 연속적인 값이 들어가는 자료형.

- 특정값을 넣어주지 않으면 1씩 늘어나기 때문에 상수배열이라고도 함.

- 열거체에서 아무 값도 지정해 주지 않으면 초기값은 0이 됨. 숫자를 지정하게 되면 그 숫자로 초기화됨.

(지정한 다음부터는 별도로 지정하지 않아도 1씩 증가함.)

구문 예시 해설
eum
{
      상수 멤버 1
      상수 멤버 2
      상수 멤버 3
};
eum color {
black,
red,
yellow=10,
green};
black = 0
red = 1
yellow =10
green = 11

 

2) 구조체

- 괄호 안에 멤버 변수 사용하는 자료형.

- 내부에 멤버 변수 자료형을 마음대로 선언 가능. 멤버 함수 작성도 가능.

구문 예시 해설
struct
{
       자료형 변수명 1
               자료형 변수명 2;
               자료형 변수명 3;
       반환자료형 함수명()
               {

               };
}
struct Test {
       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
              {
              };
};
union Test {
       int kor;
       int eng;
       int mat;
};

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

 

4) 추상화와 상속

추상화 :  세부사항은 배제하고 중요한 부분을 중심으로 간략화 하는것. (복잡한 문제의 본질 이해 위해)

  • 기능 추상화 :  입력 자료를 출력 자료료 변환하는 과정을 추상화
  • 자료 추상화 :  자료와 자료에 적용할 수 있는 오퍼레이션(Operation)을 함께 정의하는 방법
  • 제어 추상화 :  외부 이벤트에 대한 반응을 추상화 하는 방법

상속

- 상위 수준 그룹의 모든 특성을 하위 수준 그룹이 이어받아 재사용, 확장하는 특성

- 단일 상속(상위수준의 그룹이 하나만 존재할 때), 다중상속

 

구체화

- 하위수준 그룹이 상위수준 그룹의 추상적인 부분을 구체화 시키는 것.