[JAVA] 변수(Variable)
-프로그램 실행 중 발생/입력되는 데이터를 저장할 목적으로 만든 임시 저장장소
-프로그램 실행명령시 생성되고, 프로그램 종료시 소멸됨
변수의 이름을 만드는 규칙
1. 인터넷 사이트 회원가입시 만드는 아이디 이름 규칙과 비슷
2. 영문과 숫자, 그리고 일부 특수문자(_)를 섞어서 사용가능함
3. 첫글자는 반드시 영문
4. 중간에 공백이 있을 수 없음
5. 너무 짧지 않게 약간의 의미를 부여해서 이름 생성하는 편
6. 변수의 이름 너무 짧으면 변수 갯수가 많아졌을 때 서로 용도를 구분하기 어려움
7. 변수의 이름 너무 길면 사용할 때마다 긴 이름을 타이핑해야하는 불편함이 있음
8. 두가지 의미의 단어가 조합되어 변수 이름이 만들어 진다면 첫단어는 소문자로, 두번째 단어 첫글자 대문자로 생성
ex)덧셈의 결과 총 저장할 변수 이름: plusResult
9. 변수는 자료형(정수, 실수, 문자)에 따라 만드는 명령이 달라짐
-int: 정수, double: 실수, String: 문자 등
-int a; → 정수형 변수 a가 생성
-double b; → 실수형 변수 b
-String c; → 문자형 변수 c
int a; //a라는 이름의 변수를 생성(int->정수를 저장하기 위한 변수)
int b;
int plusResult, minuResult, multiplyResult; //한번에 여러변수를 생성(정수를 저장하기 위한 변수)
double divideResult; //실수를 저장할 변수
// a=10.24; 실수->정수형 변수에 저장하면서 데이터 손실을 유발하므로 에러
divideResult =100; //정수->실수형 변수에 저장하는건 데이터 손실이 없으므로 정상 실행
boolean b1; // 참(true)또는 거짓(false) 중 하나를 저장하는 자료형(변수)
b1=true; // 또는 false를 저장할 수 있음
System.out.printf("변수 b1의 값: %b\n", b1);
System.out.println("변수 b1의 값: "+b1);
// boolean 자료를 printf로 출력할 때 %b를 사용함
변수 | 특징 |
int | 정수형 자료형 4Byte형 정수 |
long | 정수형 자료형 8Byte형 정수 |
float | 실수형 자료형 4Byte형 실수 |
double | 실수형 자료형 8Byte형 실수 (저장공간, 연산속도가 다름 → 정수, 실수 구분하는 이유) |
char |
문자(글자)자료형 2Byte ex) 'a', 'b'
String과는 다름 |
string | 문자열 자료형 "", "a", "abc" 0글자에서 글자갯수 제한 없이 저장할 수 있는 자료형 현재는 자료형이라고 부르지만 엄밀히 자료형이라기보다 클래스(객체)라고 부르는게 정확한 표현 |
종류 | 변수 |
정수형 | byte(1), short(2), int(4-기본형), long(8) |
실수형 | float(4), double(8-기본형) |
문자형 | char(2), string(정해진 크기 없음) |
진위형 | boolean(1-true/false의 값만 저장) |
-1byte=8bit
00000000~11111111
00000000 → A, 00000001 → B .... 256개 문자 중 하나를 저장 가능
-예전 시스템 int는 2byte (-32,768~32,767) → 현재 시스템 int는 4byte (-2,147,483,648~2,147,483,647)
-double 0.0002 → 0.2x10의-4승(변수에 저장되는 값은 2와 -4)
-10의 -308승~308승
-정수와 정수의 사칙연산은 결과도 정수임
-피연산자 둘 중 하나만 실수이면 연산의 결과는 실수가 됨
a=16; b=52;
plusResult=a+b;
minuResult=a-b;
multiplyResult=a*b;
divideResult=a/b;
c='+';
System.out.printf("%d %c %d = %d\n", a, c, b, plusResult);
c='-';
System.out.printf("%d %c %d = %d\n", a, c, b, minuResult);
c='*';
System.out.printf("%d %c %d = %d\n", a, c, b, multiplyResult);
c='/';
System.out.printf("%d %c %d = %.2f\n", a, c, b, divideResult);
divideResult =a/(double)b;
// 현재 위치에서만 잠시 double로 변환. 이 명령이 지나면 다시 int형으로
변수의 사용자 입력
-programming 하다보면 외부의 라이브러리 또는 API를 불러다 사용해야할 경우가 있는데 사용자로부터 화면 입력을 받는 도구는 외부 라이브러리에 있는 걸 불러와서 사용해야 함
System.out.printf("정수를 입력하세요 ");
// 원활한 입력을 위해 안내 명령은 입력 명령보다 반드시 위에 써줌
Scanner sc=new Scanner(System.in); // 화면입력을 위한 준비코드
integer1=sc.nextInt();
// 화면으로 사용자가 정수를 입력하면 입력받아 integer1 변수에 저장
// 컴파일러가 sc.nextInt() 명령을 만나면 커서를 깜빡이면서
// 사용자에게서 입력이 있을때까지 무한정 대기함
System.out.println("입력한 정수는 "+number1+"입니다"); //입력 후 출력
변수의 생성 방법
// 1. 변수 선언 후 값을 할당(대입)
int n1;
n1=10;
// 2. 변수의 선언과 값의 대입을 동시에 처리
int n2=20;
/* 실행 보류
// int n3=sc.nextInt(); -> 변수 값을 입력해줘야해서 실행 중 에러 발생
// start program, 변수를 선언하는 명령만 따로 모아서
// 변수들을 관리하는 테이블에 넣고 시작
// 이때 입력명령이 섞어 있는 변수선언은 에러를 발생하게 됨.
// 문법상 빨간줄/엑스가 표시되지는 않지만 실행시 에러 발생시킴(런타임에러)
*/
// 3. 여러개의 변수를 한번에 선언(동일한 자료형만 가능)
int n3,n4,n5;
// 4. 여러개의 변수를 값 대입하면서 생성
int n6=60, n7=70;
// 5. 처음부터 모든 변수에 값을 대입할 필요 없음
int n8,n9=90,n10;
변수 선언
-변수 사용 전에는 위치에 관계없이 변수 선언 가능
-변수는 반드시 선언(생성) 후 사용 가능, 선언 전 사용하는 변수는 오류
-변수 선언 이후라도 값이 대입되지 않으면 사용 불가
-변수의 값은 여러번 대입 가능
-저장되는 값은 가장 최근/마지막에 저장한 값이 사용됨
-이전에 저장되는 값은 소멸. 한번에 하나씩만 저장할 수 있는 단점이 있음
char형 데이터
-컴퓨터 저장장치에 저장될 때, 이진수 코드로 저장됨
-문자를 저장하기 위한 코드체계에 의해 조합된 코드(ASCII code)임
-이를 십진수로 변환하면 정수로도 변환 가능
-위의 내용을 기초로 한 결과, 정수와 문자간 호환성 발생됨
char ch='A';
int intchar=ch;
System.out.printf("ch->integer variable save %d\n", intchar);
System.out.printf("ch->%c\n",ch);
System.out.printf("ch->정수형 변수값으로 임시변환 %d\n", (int)ch);
ch='B';
System.out.printf("'B'->정수값으로 캐스팅: %d\n", (int)ch);
System.out.printf("'B'->정수값으로 캐스팅: %d\n", (int)'B');
System.out.printf("'Z'->정수값으로 캐스팅: %d\n", (int)'Z');
System.out.printf("'z'->정수값으로 캐스팅: %d\n", (int)'z');
System.out.printf("'0'-> %d, '9'-> %d\n", (int)'0', (int)'9');
// 대문자 B값에 32를 더하여 소문자 b로 변경
System.out.printf("%c+32-> %c\n", ch,ch+32);
// 아라비아 기호 '8'에서 아라비아 기호 '0'을 빼면 정수 8이 결과로 나옴
System.out.printf("'8'-'0'-> %d\n", '8'-'0');
System.out.println();

실수형 변수의 초기화
-자바에서 모든 실수들은 별도의 표기가 없으면 기본적으로 double타입으로 인식
-float 타입으로 값을 저장하기 위해서 float형 변수를 선언하고 float형 데이터를 저장
// float 변수에 double형 데이터 입력-> 에러
// float f1=1.123; -> error
// float 변수에 float형 데이터 입력-> 정상실행
float f2=1.123f;
// float 변수에 캐스팅 연산을 적용한 double형 데이터 입력-> 정상실행
double f3=1.123;
float f4=(float)f3;
// 용량이 큰 자료형(double)에 작은 자료형(float) 데이터 대입-> 정상실행
float f5=123.123F;
double f6=f5; // 캐스팅(형변환) 연산이 필요 없음
정수들의 값 대입
-용량이 큰 변수값을 용량이 작은 변수값으로 넣으려고 하면 캐스팅 연산 필요
-반대의 경우 문제없이 모든 실행 가능
int a=100;
byte b1=(byte)a;
// byte b2=a; -> 변수를 이용한 값의 대입은 캐스팅이 필요
byte b2=123; // 일반값에 의한 대입은 캐스팅이 필요가 없음
// (정수데이터에 한해서만 허용)
a=b2; // 용량이 작은 자료형을 큰 자료형에 대입은 정상실행