-
[JAVA] 변수(Variable)언어/JAVA 2022. 9. 7. 17:00
-프로그램 실행 중 발생/입력되는 데이터를 저장할 목적으로 만든 임시 저장장소
-프로그램 실행명령시 생성되고, 프로그램 종료시 소멸됨
변수의 이름을 만드는 규칙
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; // 용량이 작은 자료형을 큰 자료형에 대입은 정상실행
'언어 > JAVA' 카테고리의 다른 글
[JAVA] 자료형변환(Casting) (0) 2022.09.07 [JAVA] 연산자(Operator) (0) 2022.09.07 [JAVA] println (0) 2022.09.07 [JAVA] 출력(자리수 조절) (0) 2022.09.07 [JAVA] 주석, class (0) 2022.09.07