02. 자료 객체
01. 예약어(Reserved Word)
1) 예약어, 변수, 상수 구분을 위한 C언어 코드
main() {
int kor, eng;
kor = 70;
eng = 80;
printf("#d #d", kor, eng);
}
- 예약어 : int
- 변수 : kor, eng
- 상수 : 70, 80
- 지원 함수 : main(), printf()
2) 예약어의 정의
- 프로그래밍 언어에서 시스템이 알고 있는 특수한 기능을 수행하도록 이미 용도가 정해져 있는 단어
3) 예약어의 특징
- 프로그램을 번역할 때 예약어의 사용은 심볼 테이블 검색 시간을 단축시킴
- 번역 과정에서 성능을 향상시킬 수 있음
- 프로그램의 신뢰성을 향상시킴
- 예약어는 오류 회복(Error Recovery)을 가능하게 함
- 예약어는 프로그래밍 언어에서 사용하는 명령어, 연산, 함수명들로 새로운 프로그래밍 언어일수록 기능이 많아지기 때문에 예약어 수가 많아질 수밖에 없음
02. 변수와 상수
1) 변수
- 기억 장치의 한 장소를 추상화한 것으로 프로그램이 동작하는 동안 값이 수시로 변할 수 있는 공간
- 어떤 값을 주기억 장치에 기억하기 위해서 사용하는 공간을 의미
2) 변수의 특징
- 변수는 변수명(이름), 값, 속성, 메모리 위치로 구성됨
- 프로그램 실행 과정에서 하나의 기억 장소를 차지함
- 프로그래머가 각 언어별로 변수명을 만드는 규칙에 따라 임의로 이름을 붙일 수 있음
- 변수의 유형은 컴파일 시간에 한 번 정해지면 일반적으로 그대로 유지함
- 변수명은 묵시적으로 변수형을 선언할 수도 있고, 명시적으로 사용할 수도 있음
3) 상수
- 프로그래밍 언어에서 수명 시간 동안 고정된 하나의 값과 이름을 가진 자료로써 프로그램이 동작하는 동안 값이 절대로 바뀌지 않는 것을 의미함
4) 식별자
- 프로그램의 구성 요소를 구별하기 위한 기준으로, 변수명이 식별자에 속함
5) 선언
- 명시적 선언 : 선언문을 이용하여 변수 이름을 나열하고 속성을 부여하는 방식
- 묵시적 선언 : 별도의 선언문 없이 상수 값에 의해 속성이 부여되는 방식
6) 할당
- 변수에 메모리 공간을 바인딩하는 작업을 의미함
- 바인딩(Binding) : 변수들이 갖는 속성이 완전히 결정되는 시간
7) 데이터 타입(Type, 유형)
- 변수가 가질 수 있는 속성 값의 길이 및 성질을 의미함
타입 |
설명 |
논리 타입 |
조건이 참인지 거짓인지 판단하고자 할 때 사용 |
문자 타입 |
문자 하나를 저장하고자 할 때 사용 |
문자열 타입 |
나열된 여러 개의 문자를 저장하고자 할 때 사용 |
정수 타입 |
정수 값을 저장하고자 할 때 사용 |
부동 소수점 타입 |
소수점을 포함하는 실수 값을 저장하고자 할 때 사용 |
배열 타입 |
여러 데이터를 하나로 묶어서 저장하고자 할 때 사용 |
03. 배열(Array)
1) 배열의 개념
- 같은 크기와 타입의 자료를 연속적인 기억 장치에 저장하여 처리하는 구조
- 고정 크기의 메모리 공간을 사용함
- 연속적인 기억 장치를 사용하므로 액세스 시간이 짧고 구조가 간단함
- 연속적인 공간을 사용하므로 중간에 삽입/삭제가 어려움
- 주어진 자료를 찾을 때 가장 좋은 방법
- 논리적인 순서와 물리적인 순서가 같음
- 같은 항목들의 집합으로 각 자료마다 개별적인 변수를 사용하는 번거로움을 줄일 수 있음
- 각각의 변수를 생성하지 않고, 동일한 데이터 타입의 데이터를 묶어서 하나의 변수에 저장하고 싶은 경우에는 배열 타입을 이용하여 저장함
- 배열은 여러 개의 변수가 필요할 때 모든 변수를 일일이 선언하지 않고 하나의 변수명으로 선언할 수 있기 때문에 프로그램을 효율적이면서도 쉽게 개발할 수 있도록 해줌
- 연속적인 기억 공간에 변수명이 동일하므로 프로그램 실행 속도도 빨라지고, 프로그래밍 하기도 쉬워짐
2) 2개의 행, 5개의 열을 가지는 2x5 배열의 경우
- 행은 첫 번째 첨자에, 열을 두 번째 첨자에 지정하여 배열을 정의함
- C언어의 선언 : int A[2][5];
- Java의 선언 : int[][] A = new int[2][5];
- FORTRAN : INTEGER A(2, 5)
04. 포인터(Pointer)
1) 포인터
- 변수명은 기억 장소의 명칭이고 프로그래머가 알고 있는 이름으로 기호 번지라고도 함
- 변수명에는 실제 기억 장소의 위치인 절대 번지가 존재하는데 이 절대 번지를 주소 상수라고 하거나 포인터 상수라고 함
- 프로그래머가 하나의 변수를 선언하면 변수명과 변수가 실제로 위치하는 절대 번지가 함께 확보되는 것
2) 포인터의 특징
- 자료 객체를 참조하기 위해 주소를 값으로 하는 형식
- 자료 객체 : 변수, 상수, 배열, 리스트와 같은 자료 구조
- 커다란 배열에 원소를 효율적으로 저장하고자 할 때 이용함
- 하나의 자료에 동시에 많은 리스트의 연결이 가능함
- 고급 언어에서 주로 사용되는 기법
05. 사용자 정의 자료형
1) 열거체
- 괄호 안에 연속적인 값이 들어가는 자료형
- 특정 값을 넣어 주지 않으면 1씩 늘어나기 때문에 상수 배열이라고 부르기도 함
2) 구조체
- 괄호 안에 멤버 변수를 사용하는 자료형
- 멤버 변수 자료형을 자유롭게 선언할 수 있음
3) 공용체
- 구조체와 거의 유사하나 조금 더 범주가 크다고 볼 수 있음
- 열거체나 구조체와 달리 공용체명을 작성해야 하며, 구조체를 멤버로 사용할 수 있음
06. 바인딩(Binding)
1) 바인딩의 개념
- 바인딩의 정의
- 프로그램에서 어떤 변수의 명칭과 그 메모리 주소, 데이터형 또는 실제 값을 연결하는 것
- 변수와 변수에 관련된 속성을 연결하는 과정
- 바인딩 시간(Binding Time)
- 프로그램에서 변수들이 갖는 속성이 완전히 결정되는 시간
2) 바인딩 시간의 종류
- 언어 정의 시간
- 프로그램의 자료 구조, 택일문 등을 확정하는 시간
- 언어 구현 시간
- 프로그램의 자료 구조인 정수형이나 실수형이 실제 가지는 값을 할당하는 시간
- 번역 시간
- 컴파일 시간 : 변수의 형과 구조를 결정하는 시간
- 링크 시간 : 외부 함수 간에 호출 정보를 인식하는 시간
- 적재 시간 : 전역 변수의 위치를 할당하는 시간
- 실행 시간
3) 정적 바인딩과 동적 바인딩
- 정적 바인딩(Static Binding, 전기 바인딩)
- 프로그램 실행 시간 전에 속성을 연결하는 방식
- 언어 정의 시간, 언어 구현 시간, 번역 시간, 정적 변수 확보 등이 있음
- 동적 바인딩에 비해 효율성을 확보할 수 있음
- 동적 바인딩(Dynamic Binding, 후기 바인딩)
- 프로그램 실행 시간에 속성을 연결하는 방식
- 실행 시간, 프로그램 호출 시간, 모듈의 가동 시간, 실행 시간 중 객체 사용 시점, 지역 변수 확보 등이 있음