[2025 사무자동화산업기사 필기] 통합 사무자동화 자료형과 C, Java 01

이기적 영진닷컴
21 팔로워
2024. 10. 21.
이 동영상은 [2025 이기적 사무자동화산업기사 필기 기본서)] 도서 내용을 바탕으로 제작되었습니다.
🔹 도서 자세히 보기 : http://www.yes24.com/Product/Goods/104404837
🔹 이 동영상이 포함된 재생목록 : https://youtube.com/playlist?list=PL6i7rGeEmTvr09yPV1T7G8GG1VxqqsMj7
🔹 모르는 문제? [이기적 스터디 카페] 질문하기 : https://cafe.naver.com/yjbooks
🔹 이기적 홈페이지 : https://license.youngjin.com
🔹 인스타그램 : https://www.instagram.com/license.youngjin_official/
자, 이번 시간부터는 언어에 관련해서, 프로그래밍에 관련해서 좀 더 자세하게 학습을 해보도록 하겠습니다.
자, 그 첫 번째로 여러분들이 학습하실 부분은 자료형에 관련된 부분입니다.
자, 언어를 학습하기 이전에 가장 기본이 되는 자료형과, 그리고 그 자료형을 사용하는 언어들은 어떤 것들이 있는지,
그리고 종류와 표현 방법은 어떤 것들이 있는지 먼저 살펴보도록 하겠습니다.
자, 가장 먼저 자료형과 그 일반 자료 형태에 따른 언어들은 어떤 것들이 있는지 한번 보도록 하겠습니다.
자, 우리가 일반적으로 자료형이라고 하는 것들은 변수들이 가질 수 있는 값의 유형과 그리고 값들에 대한 연산의 집합이다라고 했는데요.
자, 이때의 변수라고 하는 것은 어떠한 데이터를 저장할 수 있는 공간을 미리 정의해두는 곳이다라고 했죠.
그래서 예를 들어서 a라는 이름을 가진 공간을 정의해두고, 그 a라는 공간에 100이라는 값을 넣겠다.
이런 식으로 우리가 변수를 정의를 할 수 있었죠.
이때의 이 a라는 변수는 앞에 a라는 값은 어느 정도의 크기를 가져야 하며, 또 어떠한 데이터가 들어가는지를 알려주기 위해서
예를 들어서 인트형이다라든지, 또는 캐릭터형이라든지 이런 식의 자료형들을 붙여주는 그런 방식을 사용하고 있습니다.
자, 이러한 컴퓨터 언어의 자료형은 기본 자료형과 구조화된 자료형 두 가지로 나누어서 볼 수가 있는데요.
자, 첫 번째로 기본 자료형이라고 하면 더 이상 다른 구조로 나눌 수 없다.
그래서 가장 작은 단위의 자료 구조가 되겠고요.
자, 그리고 기본 자료형에 대해서 연산은 하드웨어가 직접 하게 됩니다.
그래서 우리가 연산장치라고 하면 하드웨어적으로 볼 때에는 가상기라든지,
이러한 장치들, 누상기라든지 이런 장치들이 모두 다 이런 기본 자료형에 대한 연산을 수행을 하게 되는 거죠.
자, 이때 기본 자료형의 종류는 정수형, 실수형, 부울형, 문자혈, 열거형, 그리고 부분영역형이 있는데요.
자, 이때 여러분들이 보시는 부울형이라고 하는 것이 나머지는 보시면 여러분들이 다 의미를 아실만한 이름들이고
부울형은 분리형이라고 해서 true 혹은 false의 참과 거짓 두 가지 값으로 나타내는 그러한 자료형이 되겠습니다.
자, 그래서 여러분들이 보시는 이러한 것들이 기본 자료형이 되는데
자, 우리가 일반적인 자료형이라고 하면 가장 먼저 떠올릴 수 있는 부분들입니다.
그래서 잘 기억을 해 두시고요.
자, 두 번째로 구조화된 자료형은요. 기본 자료형을 복합해서 만든 자료형이다.
그래서 이런 기본 자료형이 바탕이 되어서 만들어놓은 또 다른 형태다라고 볼 수 있는데요.
자, 우리가 구조화되었다라고 하는 말은 앞으로도 표현을 많이 쓸 거예요.
구조화되었다라고 하는 건 절차적이라고 보실 수가 있는데요.
자, 이때 자료형에 대한 것들은요.
자, 먼저 배열, 그리고 레코드 같은 것들을 들 수가 있다라고 했는데
배열이라고 하면은 같은 형태 또는 다른 형태가 되는 경우도 있고 언어마다 차이점은 물론 있겠지만
자, 어쨌든 이러한 공간을 마련을 해두고 이 공간에 값들을 집어넣는 것들을 의미합니다.
그래서 하나의 배열.
자, 그래서 나는 5개의 값이 들어간 어떤 공간이 필요하다 그러면 그 5개의 칸을 미리 만들어두는 거예요.
그래서 배열의 이름은 Array라고 이렇게 미리 정의를 해두는 이러한 것들이 배열이라고 합니다.
레코드는 마찬가지로 횡으로 구성이 되어 있는 값들의 집합이다라고 보시면 되는데요.
레코드형이나 배열형, 그리고 포인터형.
포인터 같은 경우에는 C에서 대표적으로 사용을 하긴 하는데
메모리의 어떠한 구조들을 사용자, 프로그래머가 원하는 대로 구조화해서 사용할 수 있는 그러한 메모리 구성 방식이 되겠습니다.
그런 포인터형이나 또는 문자열의 형태 이런 것들이 구조화된 자료형이다라고 할 수 있겠고요.
이 구조화된 자료형은 항상 기본 자료형을 바탕으로 하기 때문에
이 안에서도 인트형 배열이다 또는 캐릭터형 배열이다 이런 식으로 기본 자료형을 함께 사용하고 있다라고 하는 것도 같이 알아두시면 되겠습니다.
자, 자료형에 대해서 좀 더 자세히 알아보도록 하죠.
자, 자료형이라고 하면 정의 주체에 따른 자료형이라고 볼 수가 있는데요.
이 정의 주체에 따른 자료형의 두 가지 형태를 지금 여러분 아래에서 보고 계시는데
첫 번째로는 프로그래머 정의 자료형, 두 번째로는 시스템 정의 자료형으로 나누어서 볼 수가 있겠습니다.
정의 주체에 따라서 프로그래머 정의 자료형 같은 경우에는 말 그대로
프로그래머가 연산을 수행하기 위해서 정의한 자료다.
자, 그래서 이러한 종류들이 프로그래머 정의 자료형에 들어가겠습니다.
자, 시스템 정의 자료형은요.
시스템이 실행하기 위해서 자동적으로 정의하는 자료다.
그래서 이러한 자료들이 있는데 프로그래머 정의 자료형 같은 경우에는 뭐 크게 어려우실 것들이 없어요.
수 또는 배열, 배열 앞에서 보셨듯이 여러 개의 데이터를 여러 개의 자료들 하나의 공간에다가 저장해 놓을 수 있는 그런 구성을 얘기를 하고요.
자, 그리고 입주력 파일이 있고요. 시스템 정의 자료형에서의 스택이라고 하면은
기본적으로 우리가 스택과 큐에 대해서는 여러분들이 꼭 알고 계셔야 됩니다.
어떠한 자격증 시험에서도 컴퓨터에 관련된 IT 관련된 자격증 시험에서는 스택과 큐에 관련된 얘기가 많이 나오는데
자, 먼저 스택이라고 하면은 저장 공간의 구성에 입출력이 한 번에 한 군데에서 이루어진다라고 보시면 됩니다.
층 아래쪽이 막혀있는 구조죠.
자, 그렇기 때문에 이 스택의 가장 큰 특징은 어때요?
자, 스택에 해당하는 어떠한 기업 공간이 있고 그 기업 공간에 데이터 하나를 저장을 합니다.
그래서 제일 아래 1이라는 값이 저장이 됐어요.
자, 그리고 또 하나 저장을 하죠.
자, 이번에는 2라는 값을 저장을 했어요.
자, 그런데 사용자가 이번에는 가져가는 데이터를 빼서 뭔가 사용을 하고 싶다라고 할 때
아래쪽에서부터 빼서 사용을 할 수 있느냐? 그렇지 않고
입출력이 한 군데에서 동시에 일어나기 때문에 이렇게 나갑니다.
그러면 당연히 나갈 수 있는 데이터는 1이 아니라 2가 되겠죠.
그래서 2라는 값이 이렇게 나가고 2라는 값은 없어지게 되는 거죠.
자, 그러면 1만 남게 되죠.
그 다음에 가져가는 게 1입니다.
즉, 스택이라고 하는 것은 입출력이 동시에 한 군데에서 일어나기 때문에
가장 나중에 들어온 값이 가장 먼저 나간다라는 구조를 가지고 있습니다.
자, 반면에 Q라고 하면요.
자, 우리가 스택과 Q를 똑같은 구조로 그렸을 때
Q같은 경우에는 이렇게 양쪽이 모두 다 열려있는 그런 상태라고 보시면 됩니다.
그래서 한쪽에서 입력이 되면 다른 한쪽에서는 출력이 되는 형태가 되죠.
그래서 값이 들어와서 쌓이게 되면 쌓인 값의 가장 아래쪽.
즉, 가장 먼저 들어온 값이 가장 먼저 나간다라는 구조를 가지고 있습니다.
자, 그래서 스택 같은 경우에는 가장 먼저 들어온 값, 가장 나중에 나간다라고 해서
First In 그리고 Last Out이라고 표현을 하기도 하고요.
자, 그리고 이 들어오고 나가고 하는 과정은 우리가 Push와 Pop이라고 표현을 합니다.
그래서 이러한 용어들도 여러분들이 찾아서 보시면은 좀 도움이 되실 것 같고요.
자, 그래서 스택과 버퍼가 시스템에서 정의한 자료형에 해당하겠습니다.
자, 이번에는 변수로 가겠습니다. 변수.
자, 우리가 자료형에 대해서 어떠한 자료를 저장할 수 있는 모양들을 알아봤다면
그 모양들에 이름을 붙여주는 것을 우리가 변수라고 할 수가 있겠죠.
그래서 변수라고 하면은 기억장치의 한 장소를 추성화한 것이다 라고 되어 있습니다.
자, 이때 변수의 속성이라고 하면 변수의 이름이라든지 유형 또는 주소, 값.
이때 주소는 메모리에 차지하고 있는 공간에 대한 주소가 되겠죠.
그래서 이러한 것들이 변수의 속성에 해당하고요.
자, 변수의 특징은요. 변수라고 하는 것은 프로그램이 동작하는 동안에 값이 수시로 변할 수 있다.
그렇기 때문에 변수가 되겠죠.
자, 이런 변수의 유형은 컴파일 시간에 한 번 정해지게 되면
그 다음부터는 일반적으로 변할 수 없다.
즉 컴파일 시간에 정해진 변수에 대한 값들은 실행 중에는 변하지 않는 것이 일반적인 특징입니다.
컴파일이라고 하는 것은 여러분들이 지난 시간에도 자세히 배우셨는데
데이터가 실행 가능한 기계어로 바뀐다라는 개념이었죠.
그래서 이미 기계어로 변경이 된 다음에는 일반적으로는 변경되지 않는다라고 하는 것이 변수의 특징이 되겠습니다.
자, 이런 변수의 수명은요. 변수와 연관된 기억 장소가 할당되어 있는 시간,
즉 변수가 사용이 되고 있는, 변수가 기억 공간에 존재하고 있는 그런 시간을 변수의 수명이라고 할 수가 있겠는데요.
자, 이때에 변수의 수명이란 변수가 값을 저장할 기억 장소를 할당받은 때부터 시작합니다.
그래서 그 기억 장소가 더 이상 변수 값을 의미하지 않을 때, 즉 기억 장소에 더 이상 값이 저장되지 않을 때까지가 변수의 수명이다라고 볼 수가 있겠습니다.
자, 그러한 변수의 종류들을 크게 지금 세 가지로 나누어서 보고 있는데요.
자, 첫 번째로 지역 변수라고 하면은 자기 블록에서 선언한다, 즉 메소드가 있다, 메소드 거의 대부분 블랙스로 시작을 하는데
이 블랙스 안에서 어떤 변수가 선언이 되고 사용이 되는 이러한 것들을 지역 변수, 로컬 베리어블이라고 부릅니다.
이때 로컬 베리어블은 실행될 때마다 기억 장소를 할당받아서 초기화되는 그러한 변수가 되겠습니다.
가장 큰 특징은 이 블록 내에서만 사용이 됩니다.
밖으로 나가면 뭐 예를 들어서 a라는 값에 100이라는 값을 집어넣고 나는 이 a를 인트 값으로 선언을 했어요.
자, 그러면 이 블랙스 바깥에서 a라는 값을 쓸 수 있느냐? 쓸 수 없다는 거죠.
그래서 자기 블록 내에서만 선언이 가능하고 사용이 가능하다라고 하는 게 지역 변수의 특징이었습니다.
자, 비지역 변수는요. 상위 블록에서 선언된 것이지만 자기 블록에서 쓸 수 있는, 즉 내가 안에서 선언하지 않은 값이에요.
예를 들어서 난 여기에서 b라는 값을 a와 더해서 또 어떠한 c라는 값에다가 저장을 하고 싶다.
b라는 값은 지금 여기에서 정의되지 않았죠.
하지만 이 블랙스 바깥에서 정의되어서 내가 사용할 수 있도록 그렇게 만들어진 변수를 비지역 변수라고 이름 붙일 수가 있는데
이름은 여러분들이 정확하게 비지역 변수라고 칭하는 경우도 있고 그렇지 않은 경우도 있고
이 의미들, 이름에 따라서 여러분들의 의미들만 정확하게 기억하시면 되겠습니다.
자, 그리고 전역 변수라고 하면 블록 외부에 선언이 되어서 모든 블록에 쓸 수 있는 변수다.
그래서 프로그램 실행 시에 초기화되는 변수다라고 볼 수가 있겠습니다.
자, 변수에 반해서 상수라고 하는 값은요.
상수라고 하는 값은 수명 시간 동안 고정된 하나의 값과 이름을 가진 자료다.
즉 프로그램에서 사용이 되는 동안에 하나의 값 그리고 이름을 가지고 있다.
그래서 a라는 값에 100을 할당을 했어요.
자, 이때 상수가 되는 거죠. 이 값은.
그래서 변경되지 않은 그러한 값들을 우리가 상수로 정의할 수가 있겠습니다.
일반적으로 객체지향 언어에서는 이런 상수를 정의할 때 대문자로 표기한다던지 해서
고정된 값입니다. 변하지 않는 값입니다라고 알려주기도 합니다.
자, 프로그램이 동작하는 동안에 값이 절대로 바뀌지 않는다라는 것이 상수의 정의라고 보시면 되겠습니다.
자, 이러한 변수와 상수뿐만이 아니라 우리가 언어를 구성하는 프로그램을 구성하는 요소들 중에서
선언문과 배정문, 즉 대인문도 있겠습니다.
자, 이때 선언문이라고 하면 프로그램에서 사용할 데이터의 속성에 관한 정보를
컴파일러나 인터프리터에게 알려주는 문장이다.
자, 그래서 데이터의 속성을 알려준다라고 하면
그 데이터의 값이라던지 이름이라던지 이런 것들을 알려준다라는 거죠.
자, 그래서 이러한 선언문의 장점은요.
선언문을 썼을 때의 장점은 효율적인 주기역장치 사용과 접근이 가능하다.
그리고 효율적인 주기역장치 할당기법이 사용이 가능하다.
그리고 컴파일 시간의 변수형에 대한 검사가 가능하다.
자, 선언문을 쓴다라고 하는 것은 미리 여러분들이 기억장소의 어떤 공간에 할당을 해놓고
그 공간에다가 속성을 미리 부여를 해놓는 것이에요.
그렇기 때문에 기억장치에 대한 주기역장치의 공간적인 효율성이 굉장히 좋아지겠죠.
당연히 컴파일 시간의 변수형에 대한 검사도 가능할 것이다라는 거죠.
자, 반면에 배정문이라고 하는 것은요.
대인문이라고도 부를 수가 있겠는데요.
배정문은 변수의 내용을 변경하는 기본 연산이다.
그래서 프로그램에서 가장 일반적인 연산문이다라고 되어 있는데
그냥 이러한 식들입니다.
보시면 A에다가 B의 값을 집어넣는다라는 것이죠.
그래서 B의 주소에 저장된 값을 A의 주소값에 대입한다.
그래서 B의 값을 A에다가 넣는다라는 의미의 이러한 대인문이 되겠습니다.
자, 이때 A는 Left Value, 왼쪽 값이고요.
이때는 주소를 의미한다. A라는 값이 주소를 의미한다라고 하는 것은
그 주소, 기억 공간에 대한 어떤 명칭이죠.
그래서 지정 연산자의 왼쪽 변수로 의미하고요.
B는 R Value, 즉 Right Value에서 값을 의미하며
지정 연산자의 오른쪽 변수이다.
그래서 이러한 것들이 기본적인 대인문의 형태가 됩니다.
그래서 가장 일반적으로 여러분들이 프로그래밍에서 볼 수 있는
그러한 연산문이 되겠습니다.
자, 이번에는 자료형의 종류와 표현 방식에 대해서 알아보도록 하겠습니다.
먼저 언어별 기본 자료형입니다.
대표적으로 지금 두 가지만 나열을 해놨는데요.
그 이외에 나머지는 여러분들이 참고적으로 보시면 되겠습니다.
다 외우실 필요는 없으시고요.
C 언어에서의 기본 자료형입니다.
우리가 C 언어에서 사용하는 가장 기본 자료형들을 나타내고 있는데요.
캐릭터형, 문자형이고요.
그리고 인트, 정수형.
그 다음에 플러트, 더블 같은 경우는 실수를 표현하는 방법이 되겠고요.
그리고 볼드 같은 경우에는 비어있는, 즉 자료의 형태가 없다라는 의미로
볼드형을 많이 사용을 합니다.
비주얼 베이직 같은 경우에는 이러한 자료형태가 있네요.
바이트, 브린, 참거짓이죠.
그리고 인티저, 인터넷인 인티저라는 자료형을 쓰고 있고요.
롱이나 싱글이나 더블 같은 경우에 역시 마찬가지 실수를 표현하는 방식입니다.
그래서 언어별로 사용할 수 있는 기본 자료형도 모두 다 다르게 구성이 되어 있다는 것이죠.
먼저 기본적으로 정수형이라고 하면요.
우리가 자료형 중에서 가장 기본이 되는 자료형이 정수형이 되겠는데요.
정수형은 정수의 크기가 일반적으로 2바이트 또는 4바이트로
수학적 의미와 달리 프로그램 언어에서는 크기가 제한된다.
즉 우리가 수학적으로는 정수의 크기 제한이 없죠.
하지만 프로그램 언어에서는 크기가 제한되는 이유가
기업 장소의 어떤 공간을 할당을 해놓기 때문에
그 크기만큼 사용이 가능하다는 거죠.
그래서 그 크기를 넘어서는 정수형 같은 경우에는
오버플러가 발생을 하면서 값이 뒷부분에 잘려나가게 되는 그러한 현상이 발생합니다.
그래서 다른 값이 들어가겠죠.
내가 의도한 값이 아니라 다른 값이 들어갈 수 있기 때문에
이런 자료형, 정수형을 사용할 때는
충분한 크기를 할당받을 수 있는 그러한 정수형을 사용을 해야 된다라는 것이고요.
부동소수점 실수형은 실수를 표현하고자 할 때 사용하는 기본적인 자료형입니다.
그래서 소수점의 위치를 고정하지 않는다.
그렇기 때문에 부동소수점인데요.
소수점의 위치를 변환할 수 있기 때문에
표현할 수 있는 수의 범위를 넓혔다라고 했죠.
그리고 문자형이라든지 논리형에 대한 값도 역시 기본자료형에 해당합니다.
이때 논리형은 true와 false로 구성이 되어 있고요.
하나의 비트로 표현이 된다.
그래서 일반적으로 true의 경우에 1로
false의 경우에 0으로 이런 식으로 표기를 한다든지
혹은 반대로 표기한다든지 해서 0과 1의 값으로
논리형을 표기하는 경우들이 많겠습니다.
문자데이터 같은 경우에는요.
표현하는 방식이 조금 다른데요.
문자데이터는 일반적인 숫자를 이진수로 바꿔 놓은 것이 아니라
글자, 예를 들어서 a라는 값이 있다 그러면
이 a를 이진수로 바꿔야 되기 때문에
약속되어 있는 어떠한 값들을 사용을 해야 합니다.
예를 들어서 a라는 값을 제일 아래 있는 아스키 코드에서는
64로 표현을 한다.
그럼 이 64를 다시 이진수로 바꿔서 표현하는
이 방식이 문자데이터의 표현 방식이라고 볼 수가 있겠는데요.
그냥 컴퓨터에서 a라는 값을 읽을 수가 없기 때문에
이러한 과정들을 거치고
이 값을 숫자 얼마로 표현할 것인가 하는데
사용이 되는 것들이 바로 이러한 코드들입니다.
대표적으로 bcd 코드 같은 경우에는
이지나 십진 코드로 대표적인 가중치 코드다.
그래서 6비트로 구성이 되어 있고요.
그리고 64가지의 문자 표현이 가능하다라고 했죠.
그리고 이 bcd 코드를 변경한 게 fcd 코드가 되겠는데요.
확장이 이지나 십진 코드다.
그래서 bcd를 확장한 코드다.
이때에는 fcd 코드는 8비트로 구성이 되어 있고
그리고 256가지의 문자 표현이 가능하겠습니다.
그리고 가장 많이 볼 수 있는 코드 중에 하나인
ASCII 코드는 표준형 코드가 되겠습니다.
그래서 7비트로 구성이 되어 있고요.
그리고 128가지의 문자 표현이 가능하다라고 했습니다.
그래서 이러한 코드 방식들을 이용을 해서
우리가 문자데이터를 표현을 하게 되는 거죠.
반면에 수치데이터 같은 경우에는
고정소수점 방식과 부동소수점 방식 두 가지로
나누어서 볼 수가 있겠습니다.
첫 번째로 고정소수점 방식이다라고 하면
소수점의 위치를 말 그대로 고정을 하는 방식이죠.
그래서 어떠한 기업 공간이 있을 경우에
내가 예를 들어서 여기에 소수점의 위치로
고정을 시키겠다 그러면 앞쪽에 지수부, 가수부
이렇게 나누어서 표현을 하게 됩니다.
그렇기 때문에 연산속도는 빠르죠.
소수점이 고정되어 있기 때문에 어떻게 계산을 할지가
쉽게 나오기 때문에 연산속도가 빠르고
하지만 고정이 되어 있는 관계로
수표현의 범위가 제한적이다라는 단점이 있겠죠.
맨 왼쪽 비트가 부호비트가 됩니다.
이렇게 나누어서 여기 왼쪽 비트가 부호비트가 되는데요.
이때에 양수는 0, 음수는 1으로 표시된다고 해서
여기에 값이 0이 들어가면 양수가 되겠고요.
이 부호비트에 1이 들어가게 되면 이 값들은 음수표현이 됩니다.
그래서 여러분들이 고정소수점 표현 방식에서는
예를 들어 32비트를 사용한다고 하면
양수, 음수 그리고 나머지 값들을 계산을 해내서
몇 가지 표현이 가능한지 그 값이 제한이 되어 있습니다.
하지만 부동소수점 방식 같은 경우에는
고정소수점에 비해서 아주 큰 수나 작은 수를 표현할 수 있다.
그래서 신수데이터의 표현과 연산에 사용하는 방식이다라고 했는데요.
이 부동소수점은 표현 가능한 숫자의 수에는 거의 제한이 없다라고 했어요.
부동소수점 방식이 구성이 되는 것은요.
이렇게 보시면 이 32비트 표현에서 보셨을 때
먼저 부호비트가 1비트 있겠죠.
고정소수점과 마찬가지로 부호비트가 1비트가 있고
그리고 7개의 지수부를 그리고 뒤쪽에는
나머지 유효숫자 가수부들을 표현을 하고 있습니다.
그래서 0과 1에 따라서 역시 부호가 아니기 때문에
표현할 수 있는 것의 2배에 해당하는 숫자를 표현할 수가 있겠고
이때에는 지수부와 가수부가 나누어져 있기 때문에
여러분들이 얼마든지 원하는 숫자들을 표현할 수 있다.
그래서 실제로 계산을 해보면 부동소수점 방식도
어느 정도까지 표현이 가능하다는 한계가 있을 수도 있겠지만
현재 우리가 숫자를 계산하는 방식에서는 부동소수점 방식에는
거의 숫자에 대한 제한이 없다라고 볼 수도 있겠습니다.
그래서 부호부, 지수부, 가수부 이렇게 표현이 되어 있죠.
이번에는 배열형과 레코드형입니다.
구조적 자료형인데요. 구조적 자료형 같은 경우에는
여러분들이 앞에서 보신 것처럼 기본자료형의
어떠한 구조들을 혼합을 해서 기본자료형을 변형시켜서
만들어 놓은 그러한 자료형이라고 볼 수가 있겠습니다.
배열형과 레코드형을 비교를 해보시면요.
먼저 배열형 같은 경우에는 동질형의 원소들의 집합이다.
그래서 원소의 구별은 첨자, 인덱스로 구별을 합니다.
그리고 주기역 장치에 순차적으로 맵핑해서
데이터들을 임명을 하는 그러한 방식이 되겠는데요.
동질형 원소들의 집합이다라고 했기 때문에
일반적으로는 같은 종류의 데이터들을
묶어 놓는 그러한 형태가 되겠습니다.
반면에 레코드형 같은 경우에는 다른 원소들의 집합이다.
그래서 원소의 구별을 이름으로 하게 됩니다.
그래서 레코드형 같은 경우는 이름이 각각 붙어있고
배열형 같은 경우에는 번호가 붙어있다고 보시면 됩니다.
0부터 시작하는 배열에 해당하는 번호들이 붙어있다고 보시면 되겠고요.
이때 주기역 장치의 블록 단위로 구성이 된다라고 했죠.
그래서 레코드형은 순서가 없이 블록 단위로 이렇게 있다라고 한다면
배열형은 하나의 배열 공간을 만들어 놓고
차례대로 이렇게 데이터들을 쌓아 나가는
그러한 방식이라고 보시면 됩니다.
그래서 배열형을 동질형의 자료구조
그리고 레코드형을 이질형의 자료구조라고 표현을 할 수도 있겠습니다.
하지만 두 개 다 가지는 장점은 여러 자료들을 묶어서
하나의 단위로 취급한다라는 측면에서 장점이 있겠죠.
그래서 간단하게 배열형을 보시면 0번부터 시작해서 이렇게 번호가 붙어있어요.
그러면 나는 해당하는 배열에 0번부터 5번까지 순회하면서
여기 있는 값들을 다 더하세요.
이러한 식의 연산들이 굉장히 간단하게 구성이 될 수 있다라는 것이
이러한 묶은 구조적 자료형의 장점이라고 볼 수가 있겠습니다.
반면에 포인터형이라고 하는 것은요.
먼저 포인터형은 객체에 대한 참조다.
그래서 어떠한 주소 공간이 있을 경우, 메모리 공간이 이렇게 있을 경우에
데이터들이 이렇게 있다면 이 데이터들이 분산이 되어 있어요.
그래서 분산되어 있는 어떤 데이터를 가리키는
이러한 것이 바로 포인터형이라고 보시면 되겠습니다.
그래서 프로그래머들이 직접 메모리 구조를
원하는 대로 이용할 수 있다는 장점이 있는데요.
고급 언어에서 사용되는 기법이라고 했는데
주로 포인터형을 많이 사용하는 것이 C언어가 되죠.
그래서 C언어에서는 포인터형을 많이 사용하지만
객체지향 언어인 자바라든지 기타 등등의 언어에서는
포인터형을 사용하지 않는 경우들이 많습니다.
이유는 포인터형을 사용했을 때 문제점들이 상당히 많이 있어요.
가장 기본적으로 여러분들이 보실 수 있는 문제점이
주기업 장치의 공간을 프로그래머가 원하는 대로 가리켜서 사용을 하다 보니까
가리켰을 때 그 데이터를 저장할 수 있는 공간에
이미 다른 데이터가 있는 경우에는 중복이 되겠죠.
그러한 문제도 있고 기업 공간이 없는 경우도 있겠고요.
그러한 문제점들이 많기 때문에 포인터형은
사용하는 언어도 있고 사용하지 않는 언어도 있겠습니다.
이 포인터형의 특징은 객체를 참조하기 위해서
주소를 값으로 하는 형식이다.
그래서 주소를 직접적으로 참조하는 그러한 형식이 되겠고요.
커다란 배열의 원소를 효율적으로 저장할 때 사용이 된다.
그리고 하나의 자료에 동시에 많은 리스트 연결이 가능하다.
그래서 하나의 데이터에 이렇게 포인터로
여러 개의 값들을 연결하는 경우들도 있겠고요.
C나 C++에서 포인터 변수를 선언할 때는
아스트리크 이용해서 선언을 합니다.
그리고 널값을 갖는 포인터 변수는
아무런 객체도 가리키고 있지 않다는 의미입니다.
그래서 널, 포인터 변수가 널을 갖는 경우도 있겠죠.
지원 언어의 종류는 이러한 것들이 있다.
그중에 우리는 C를 가장 대표적으로 들 수가 있겠습니다.
마지막으로 포인터를 사용했을 때의 문제점입니다.
먼저 한 객체에 대해서 여러 포인터 변수가 가리키는 경우에는
어느 하나의 변수가 가리키고 있는 객체 값을 바꾸면
나머지 포인터 변수는 의사와 상관없이 변경된다고 했는데요.
즉, 하나의 값에 대해서 여러 포인터가 이렇게 가리키는 경우에는
이 값이 이 포인터 변수에 의해서 변경됐을 경우에는요.
나머지 포인터 변수들도 모두 다 영향을 받게 된다는 거죠.
그래서 나도 모르게 값이 바뀌어버리는
그러한 경우가 발생할 수 있다고 하는 것이
포인터 사용의 문제점입니다.
그래서 프로그래머가 프로그래밍을 할 때에
이 값이 어디에 연결이 되어 있는지를 다 따져보고서
변경을 해야 된다는 그러한 문제점이 되겠고요.
그리고 한 객체에 대해서 포인터가 하나도 없는 경우
그럴 때에는 객체에 대한 주소가 없기 때문에 접근이 불가능하다.
그래서 포인터가 없는 객체는 그냥 사용할 수 없는 값일 뿐이죠.
그래서 이러한 문제도 있기 때문에
포인터 사용을 할 때는 주의해 사용을 하셔야 되시고
실제적으로 프로그래밍으로 구현을 할 때에도
이 포인터에 관련한 사용은 상당히 어렵기 때문에
잘 구성을 해서 기억장소의 공간을 어떻게 사용할 것인지를
잘 구성하셔야 된다는 것이죠.
여기까지 해서 우리 자료형과 그리고 그 자료형들의 형태들
자료형들을 사용하는 언어들에 대해서 학습해 보셨습니다.
다음 시간에는 이런 자료형들을 사용을 하는
시어 언어와 그리고 객체장 언어의 특징에 대해서
학습해 보도록 하겠습니다.
이번 시간은 여기까지 하고 마치겠습니다.
여러분 수고하셨습니다.
