728x90
반응형
변수란?
프로그램이 실행 할 때 어떤 데이터나 값을 메모리상에 저장하고 있는 공간입니다.
데이터들이 계속해서 어떤 상황에 따라 변경될 수 있는 변하는 값을 설정하는 공간을 변수라고 합니다.
델파이에는 파스칼이 제공하는 여러 가지 변수가 있습니다.
프로그램 같은 뜻이지만 이름이 다를 수 있고 지원하는 변수 타입이 다릅니다.
예)
var
i : integer
i 라는 변수를 선언하고 이곳에 integer 라는 정숫값을 넣을 수 있는 메모리 공간을 확보해 달라는 뜻으로 변수 타입을 선언합니다.
그럼 프로그램이 실행되면서 i는 integer(정수)만큼의 공간을 확보하게 됩니다.
그럼 이 메모리 공간에 데이터값을 넣을 수 있습니다.
정수 : 다 알고 계시겠지만 0 이하 숫자를 음수(-) 라고 부르고요. 0보다 큰 값을 양수(+)라고 부릅니다.
그럼 -9999999999999999999999999999999999999999999 ~ 9999999999999999999999999999999999999999999 까지 이런 범위의 숫자를 값으로 사용할수 있을까요?
답은 : 아닙니다.
정수(Integer) 사이즈는 -2147483648 ~ 2147483647 4바이트/ 부호있는 32비트
정수는 4byte 크기를 가지고 있습니다. 그래서 위 값의 범위 내에서만 사용할 수 있습니다.
예전부터 4byte는 아니었습니다 16bit 컴퓨터에서는 2byte 32bit 컴퓨터에서는 4byte 지금은 64bit 컴퓨터를 많이 사용하지만 4byte입니다
메모리의 크기를 정하는 기준은 CPU입니다 그런데 만약 64bit 에서 8byte 로 크기를 변경한다면 많은 처리 로직이 변경되어야 합니다. 그래서 아직 까지는 4byte를 유지하고 있습니다. 나중에는 이 크기도 변경될 수 있겠죠. 그럼 모든 프로그램이 문제를 발생할 수 있어서 확인이 필요 할 것입니다
과거에 1999년에서 2000년으로 넘어가면서 밀레니엄 대란 이 논쟁거리가 되었습니다. 수많은 컴퓨터를 사용하는 곳에서 문제가 발생할 수 있다. 자동차, 은행, 항공기 모든 분야에서 엄청나게 큰일이 일어날 것이라고 했죠
~ 그런데 그때도 아주 큰 문제 없어 해결되었지요.
여기서 4byte 면 왜 -2147483648 ~ 2147483647 크기를 나타내는지 궁금하신 분들이 있을 것 같아서 잠깐 설명 하고 넘어 가겠습니다.
컴퓨터는 0/1 두 가지만으로 모든 것을 계산을 하고 처리를 합니다. 그래서 메모리도 0/1 로 읽어 들이게 되지요. 그래서 4byte 의 크기로 integer 크기를 할당을 하게 되면
1byte = 8 bit 이기 때문에 32개의 bit 공간을 확보 합니다.
1
2
3
...
31
32
여기의 한 셀을 0/1 로 읽어 들이게 되겠죠. 그러면 2진수로
00000000000000000000000000000000 ~ 부터 11111111111111111111111111111111 까지 수많은 가짓수를 만들어 낼 수 있습니다. 그 종류의 가짓수를 크기라고 부르지요
그럼 32개는 너무 복잡하고 1byte 만 예를 들겠습니다.
1byte는 8bit 이기 때문에 셀을 8칸 만들었고요
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
부호( - , +) |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
여기서 2진법이 나오게 됩니다.
2 ~ 8 까지 스위치가 On 이 되었다고 가정하면 (11111111) 뒤에서 부터 아래와 같은 이진 데이터값을 가지게 됩니다. 그래서 저 숫자를 다 더하게 된다면
64+31+16+8+4+2+1 = 127 ===> + 127 이되구요 0을 포함하면 128가지의 종류를 만들 수 있지요.
다르게 표현한다면 2*2*2*2*2*2*2 = 2의7승 = 128
8bit 에서 7 셀만 사용하고 나머지 하나는 부호를 나타내면
-128 ~ +128 이 되는데 -0 하고 +0 하고 중복이 되기 때문에 +0을 제외 하게 되면 1byte는 -128 ~ +127 값을 만들 수 있는 공간이 됩니다.
만약에 부호가 없는 - 음수 표현을 안 하게 된다면 8bit 모두를 사용한다면
00000000: 0
00000001: 1
00000010: 2
.
.
11111111:255
최대 255 까지 표현 할 수 있습니다.
그런데 프로그램에서는 integer 기본이 부호가 있어서 1 bit 제외 하고 생각 하셔야 하고요 정확하게 얘기 하자면 signed / unsigned 라고 표현을 하게 되는데요
signed : 양수와 음수를 표현할 때
unsigned : 양수 값만 표현할 때 표현합니다
일반적으로 integer => signed integer 라고 보시면 되고요
signed 타입: Shortint, Smallint, Longint, Int64, integer
unsigned 타입 : Byte, Word, LongWord 등이 있습니다.
signed와 unsigned 는 어떨때 상용을 할까요?
당연하지만 음수값이 값이 필요하다면 signed 를 사용하고요 데이터가 양수값이 들어온다면 unsigned 를 사용합니다. 예를 들어 성적을 표시하고자 합니다. 성적이 -20 점씩 나오는 경우는 없죠 하나도 못 맞추면 0점 이니까요
그러면 unsigned 형만 사용하면 되겠지요.
그런데 과목이 2개 최대 200점이 나옵니다. 표현할수 있는 범위를 초과하기 때문에
1byte 를 기준으로 signed 127점 까지만, 표현 할 수 있으니 unsigned 를 사용한다면 1byte 만 메모리를 사용해서도 200점을 표현 할 수 있습니다.
그럼 작은 메모리로 효율적으로 사용했기 때문에 좋은 coding 이라고 볼 수 있는 거죠 2과목 계산하고자 4byte 씩 메모리를 사용 할 필요가 없으니까요!
실전에서는 요즘 기기들이 성능이 좋아져서 저렇게 타이트하게 고민하고 사용하진 않아요. 서버 프로그램을 개발한다면 고려를 많이 해야 좋은 프로그램이 나오지만요.
[변수 범위]
전역변수: 프로그램의 모든 지역에서 사용할 수 있는 변수
전역변수는 프로그램이 실행되면 메모리에 공간을 할당해서 사용 되고요 프로그램이 종료되면 같이 할당된 공간을 반환합니다.
메모리에 상주 되어 있어서 바로 어느 지역에서 사용할 수 있습니다.
지역변수 : 어느 한 지역 그러니까 어느 한 함수의 범위에서 사용되었다가 사라지는 변수 프로그램이 실행되어 어떤 함수가 실행 되었을 때 공간을 할당받았다가 함수의 사용이 끝나면 메모리에서 사라지게 됩니다.
interface
Var
i : integer; (전역변수)
Implementation
Var
i : integer; (전역변수)
procedure 더하기
Var
i :integer; (지역변수)
begin
end;
델파이에서는 변수 선언시 var 를 먼저 입력 후 아래 변수를 선언하게 되고요 procedure, function 중간마다 선언 할 수는 없습니다
다른 종류의 프로그램 언어는 중간에 선언하는 게 가능한 프로그램도 있고요
그럼 여기까지 변수에 대하여 알아보았습니다
반응형
'프로그램 개발 > 델파이' 카테고리의 다른 글
[2020년 상반기] 기술자료 TOP 10 - 개발자들이 가장 많이 클릭한 기술자료는? (0) | 2020.07.14 |
---|---|
델파이(delphi) 이미지 dll 리소스로 만들어 활용하기 (0) | 2020.03.07 |
델파이 상수 와 주석 (0) | 2020.02.23 |
델파이 (Delphi) 프로그램을 시작하며~ (1) | 2020.02.05 |
퀀텀 그리드 tcxgrid 헤더(heder) 컬러(color) 변경 해보자 (0) | 2020.01.07 |