데이터
데이터에는 대표적을 두 가지가 있는데 이는 문자 데이터, 바이너리 데이터 (변수 데이터) 이다.이 데이터들은 컴퓨터 메모리에 바로 저장되는 것이 아니라 효율적인 메모리 저장을 위해서 이진수로 문자와동일한 코드(아스키코드나 유니코드등 )들로 변환되어 저장된다 (대표적 유니코드 utf-8)
프로그램은 작업을 처리하는 과정에서 필요에 따라 데이터를 메모리에 저장한다. 이때 변수를 사용하는데 변수는 값을 저장할 수 있는 메모리의 공간을 의미한다. 변수에는 여러 개의 값을 저장할 수 없고, 하나의 값만 저장할 수 있다.
변수 이름은 메모리 주소에 붙여진 이름이다. 그로그램은 변수 이름을 통해 메모리 주소에 접근하고, 그곳에 값을 저장하거나 그곳에 있는 값을 읽는다.
사진에 따라 도출되는 값은 varName = 3 이다. ( variable )
변수에는 한 가지 타입의 값만 저장할 수 있는데 정수 타입의 변수에는 정수값, 실수 타입의 변수에는 실수값만 저장할 수 있다.
변수 선언
변수를 사용하기 위해서는 먼저 변수를 선언해야 한다. 변수 선언은 어떤 타입의 데이터를 저장할 것인지 그리고 변수 이름은 무엇인지 결정하는데 타입은 변수에 저장되는 값의 종류와 범위를 결정짓는 요소이므로 변수값에 맞는 타입을 결정해야 한다.
타입 = 변수이름;
int = age; //정수(int)값을 저장할 수 있는 age 변수 선언
double = value; //실수(double)값을 저장할 수 있는 value 변수 선언
또한 같은 타입의 변수는 콤마를 이용하여 한꺼번에 선언할 수 있다. x) int x, y, z;
변수의 선언과 정의
정수형 데이터 파일을 만들기 위해 정수형 공간을 선언하고 변수의 이름을 만들어준다.
int a, b, c; // 여러 가지를 한번에 변수 선언할 수 있다.
int a = 10, b = 10; // 하나의 변수는 하나의 값만 가지고 있다.
byte B = 22; // 정수형 변수를 만들 수 있다.
double pi = 3.14159; // 실수형 변수를 만들 수 있다
char a = 'a'; // char가 알아서 a라는 문자를 유니코드로 변환해준다.
모든 java 구성 요소에는 이름이 필요하다. 때문에 클래스, 변수,메서드등을 식별자라고 말한다.
이 식별자에 대헤서는 꼭 지켜줘야하는 규칙이 있는데 이는 아래와 같다.
1. 대소문자를 구분한다.
2. 문자는 대소문자의 영문, $, _ 로 시작한다
3. 첫번째 글자는 소문자로 시작하되, 다른 단어가 붙을 경우 구분하기 위해 대문자로 시작한다.
좋은 예 : age, _value, __1_value, $salary
나쁜예 : 123abc, -salary.
지역 변수
생성자 블럭안에 메서드 블럭에서 선언되고 선언된 메서드,생성자, 블록안에서만 볼 수 있다.
메서드, 생성자 또는 블록이 입력될 때 생성되고 변수가 메서드, 생성자 또는 블록을 종료하면 변수는 소멸한다
지역 변수는 접근 한정자를 사용할 수 없다
지역 변수는 내부적으로 스택 수준에서 구현되며 또한 기본갓은 없어 선언하면 초기값을 할당해야 한다.
변수를 선언하고 변수에 처음 값을 저장할 경우에 값을 초기값이라 하며 변수에 초기값을 주는 행위를 변수의 초기화라 한다.
int num; - 변수선언
num = 100; - 변수 초기화
변수의 초기값은 코드에서 직접 입력하는 경우가 많은데, 소스 코드 내에서 직접 입력된 값을 리터널(literal)이라 부르며 리터널은 총 다섯 가지가 있다.
숫자형 리터널은 소수점이 없는 정수형 데이터와 소수점이 있는 실수형 테이터가 있으며 정수형 데이터는 0, 1, 100, -100등이 있다.
byte
1byte는 데이터의 최소 단위이며 8bit로 이루어져 있다. 여기서 bit는 컴퓨터의 최소 저장 단위이고 bit에는 0과1만 저장할 수 있기 때문에 데이터라곤 할 수 없다.
1byte로 변수의 공간을 지정할 경우 1byte는 8bit로 이루어져 있기 때문에
변수의 수는 그래서 -2^8(-128)부터 2^8(127)까지 총 256개만 가능하다.
(1byte는 8bit 이므로 이진수로 8글자까지 표현이 가능하다.)
short
short는 정수형으로 크기는 2byte(16bit)이며 변수의 수는 대략 3만 2천이다.
(최소 -32,768 (-2^15) 최대 32,767 (포함)(2^15 -1)) (기본값은 0)
int
기준이 되는 정수형 데이터 유형으로 크기는 4byte(32bit)이며 변수의 수는 대략 21억이다.
(최소 - 2,147,483,648(-2^31) 최대 2,147,483,647(포함)(2^31 -1) ) (기본값은 0)
long
long은 가장 긴 정수형 데이터 유형으로 크기는 8byte(64bit)이며 변수의 수는 대략 900경이다.
( 최소 -9,223,372,036,854,775,808(-2^63) 최대 9,223,372,036,854,775,807(포함)(2^63 -1) )
Char
Char는 또한 모든 문자를 저장하는데 사용되는데 무조건 한 자리의 문자만 허용되며 ( 예: char letterA = 'A' ) 크기는 2byte(16bit) 이며 아래와 같이 사용한다.
실수형 데이터는 소수점이 있는 숫자형 데이터로 간단한 예를 들면 0.5, 3.14, -23.789등이 있다. (부동 소수점)
float
float는 실수형 데이터 유형인데 실수 타입이란 1.5와 같이 소수점이 있는 데이터이다. 크기는 4byte(32bit)이며 기본값은 0.0f이다.
double
double 또한 실수형 데이터 이지만 8byte(64bit)크기를 가지고 있어 실수형 데이터를 표현할 때 자주 사용된다. 왜냐하면 10진수를 2진수로 변환해서 저장하다보니 딱 떨어지지 않는 수가 발생한하는데 이는 데이터가 정확히 표현을 못하고 데이터의 손실을 발생시킨다. 그래서 처리할 수 있는 데이터의 양이 많을수록 이 손실이 적어지고 정밀도는 높아지기 때문이다.
(ex) double(15자리)은 float(7자리)보다 정밀도가 높다.) (기본값은 0.0d)
논리 리터널을 저장할 수 있는 타입은 boolean 하나뿐이다.
boolean
boolean은 특이하게도 1bit의 크기만을 사용하며 가능한 값은 true와 false 두 가지로 참/거짓 조건을 추적하는 단순 플래그에 사용한다. ( 예: boolean 1 = true ) 기본값은 false이를 응용하여 홀수와 짝수를 구분한다.
큰따옴표(")로 묶는 텍스트는 문자열 리터널로 간주하며 큰따옴표안에 텍스트가 없어도 공백을 문자열 리터널로 간주되며 문자열 리터널 내부에서도 이스케이프 문자를 사용할 수 있다.
String
문자열 리터널을 저장할 수 있는 유일한 타입
ex) "대한민국"
"한줄 내려 쓰기는 \n 입니다."
"탭키를 사용하면 들여쓰기를 할 수 있습니다."
두 변수의 값을 교환하기 위해서는 변수는 하나의 값만 저장할 수 있기 때문에 임의의 공간 하나가 필요하다.
int x=10, y=20;
int tmp; //값이 저장되지 않은 빈 공간
tmp = x; x값을 tmp에 저장 x=10 ->tmp=10
x = y; y값을 x에 자장 y=20 -> x=20
y = tmp; 초기x값이 저장된 tmp의 값을 y에 저장 tmp=10->y=10