변수
* 메모리에 하나의 값을 저장할 수 있는, 방과 같은 기억 공간(메모리공간)이다.
* 변수 공간에 기록된 값은 고정되어 있지 않고, 다른 값이 기록되면 자동으로 덮어씌워질 수 있다.
* 기록 저장되는 값의 종류에 따라, 변수 공간의 자료형이 결정된다.
데이터 저장 단위
* 저장공간이 제한적이기때문에, 크기에 대한 기준과 cpu가 데이터를 처리할 때의 기준이 필요하다.
- 비트(bit) : 데이터 저장의 최소단위. 2진수(0,1)의 값 하나를 저장할 수 있는 메모리 공간을 의미한다.
- 바이트(byte) : 데이터 처리 또는 문자의 최소 단위. 1byte = 8bit이다.
* 1byte의 경우, -128 ~ 127까지 표현할 수 있다.(256자, 2의0승 ~ 2의7승)
* 양수로, 01111111로 127까지 표현할 수 있다.
* 맨 앞자리의 0이 1이 되는 순간, 음수가 되며 11111111로 -127까지 표현할 수 있다.
* 맨 앞자리의 0,1을 부호비트라고 한다.
* 여기서, 10000000이 되면 0에 부호비트를 적용하는 것이라 -128이라고 한다.
데이터 오버플로우
* 만약, byte형인데 지정된 값의 범위를 넘으면 어떻게 되는가?
* 예를들어, 127까지의 byte에 +1을 하면 어떻게 되는가?
* 127의 경우, 01111111이고, 여기에 +1을 하면 10000000이 되기때문에, -128이 된다.
자료형
1.기본자료형
* Java는 값을 8개의 기본형으로 구분한다.
* Java컴파일러에 의해서 해석되는 자료형을 의미한다.
자료형 | 키워드 | 크기 | 기본값 | 값의 범위 |
---|
논리형 | boolean | 1byte | false | true 또는 false |
문자형 | char | 2byte | '\u0000' | 0 ~ 65,536 |
정수형 | byte | 1byte | 0 | -128 ~ 128 |
| short | 2byte | 0 | -32,768 ~ 32768 |
| int | 4byte | 0 | -2의 31승 ~ 2의 31승-1 |
| long | 8byte | 0L | -2의 63승 ~ 2의 63승-1 |
실수형 | float | 4byte | 0.0f | -3.4E38 ~ +3.4E38 |
| double | 8byte | 0.0 또는 0.0d | -1.7E308 ~ +1.7E308 |
2.참조자료형
* 클래스를 사용자 정의 자료형이라고 하며, 클래스를 자료형으로 하여 선언된 변수를 레퍼런스변수라고 한다.
* 자유메모리 영역인 Heap메모리에 생성된 객체의 주소를 저장한다.
* Java에서는 메모리 주소를 직접 소스코드로 참조하는 것은 불가능하다.
변수의 선언 및 초기화
* [표현법]
* 자료형 변수명;
----------------------------------------------------------------------------------
TestVariable.java
public class TestVariable{
public static void main(String[] args){
boolean flag;
char grade;
byte value;
short svalue;
int num;
long price;
float tax;
double score;
}
}
----------------------------------------------------------------------------------
변수 초기화
* 변수 선언과 동시에 초기값 대입을 처리하는 것을 말한다.
* [표현법]
* 자료형 변수명 = 초기값;
----------------------------------------------------------------------------------
TestVariableInit.java
public class TestVariableInit{
public static void main(String[] args){
boolean flag = false;
char grade = 'A';
byte value = 90;
short svalue = 2500;
int num = 1250000;
long price = 2350L;
float tax = 3.3f;
double score = 99.5;
System.out.println("flag : " + flag);
System.out.println("grade : "+ grade);
System.out.println("value : "+value);
System.out.println("svalue : "+svalue);
System.out.println("num : "+num);
System.out.println("price : "+price);
System.out.println("tax : "+tax);
System.out.println("score : "+score);
}
}
----------------------------------------------------------------------------------
문자열 초기화
* 다른자료형 + "문자열" = "문자열"
* "문자열" + 다른자료형 = "문자열"
* "문자열" + "문자열" = "문자열"
* 이처럼, 문자열과 연산을 한 결과는 문자열로 나타낸다.
----------------------------------------------------------------------------------
String str = "기차";
String str = new String("기차")
String str = "기차" + "칙칙폭폭";
String str = "기차" + 123 + 45 + "출발";
----------------------------------------------------------------------------------
상수
* 수학에서는 변하지 않는 수를 의미한다. 자바에서도 마찬가지이다.
* 컴퓨터상에서 한번만 저장(기록)할 수 있는 메모리 공간을 생성하는 것을 의미한다.
* 주의할 점
* 1. final이라는 키워드를 붙여서 선언한다.
* 2. 상수명은 항상 대문자로 작성한다.
----------------------------------------------------------------------------------
final int AGE;
final int NUM;
NUM = 100;
=> final int NUM = 100;
----------------------------------------------------------------------------------
*******************************************************************************
[오류메세지]
The final local variable AGE cannot be assigned.
It must be blank and not using a compound assignment
=>final키워드가 붙은 지역변수인 AGE는 대입 당할 수 없다.
=>상수에 이미 값이 있을 경우 대입자체가 되지 않는다.
*******************************************************************************
변수 활용
----------------------------------------------------------------------------------
TestUsingVariable.java
public class TestUsingVariable{
public static void main(String[] args){
int price = 2500, quantity = 3;
int totalPrice = price * quantity;
System.out.println("가격 : " + price + " 원, 수량 : "+quantity+ "개");
System.out.println("총 구매가격 : " + totalPrice + "원" );
}
}
----------------------------------------------------------------------------------
변수명 작성 규칙
1. 대소문자가 구별되며, 길이에 제한이 없다.
2. 예약어를 사용할 수 없다.
3. 숫자로 시작하면 안된다.
4. 특수문자는 '$'와 '_'만 허용된다.
이외 작성 규칙
1. 클래스 이름은 반드시 대문자로 시작한다.
2. 메소드, 변수 이름은 소문자로 시작하며,
여러 단어를 합쳐서 의미가 부여된 이름을 작성한다.
3. 상수의 이름은 모두 대문자로 작성한다.
4. 여러 개의 단어이가 이어진 경우, 낙타봉 표기법을 사용한다
(두번째 단어 이후 첫글자 대문자)
5. 상수가 여러개의 단어로 구성될 경우, 단어간 구분에 '_'을 이용한다
예약어
* 해당 프로그램 언어에서 필요에 의해 기능이 이미 정의되어 있는 단어들이다.
* Java예약어는 모두 소문자로 대략 50여개가 있다.
* 예약어는 변수명, 클래스명, 메소드명으로 사용할 수 없다.
| | | | |
---|
abstract | assert | boolean | break | byte |
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | false | final | finally |
float | for | goto | if | implements |
import | instanceof | int | interface | long |
native | new | null | package | private |
protected | public | return | short | static |
strictfp | super | switch | synchronized | this |
try | void | while | | |
형변환
* 값의 자료형을 바꾸는 개념이다.
*
* 컴퓨터상에서 값 처리 규칙
1. 대입연산자를 기준으로, 왼쪽과 오른쪽은 같은 자료형이어야 한다.
2. 같은 자료형끼리만 연산이 가능하다
3. 연산 결과도 같은 자료형으로 산출된다.
*
* 형변환의 종류
1. 자동형변환(작은->큰) : 자동으로 형변환되어, 코드상으로 직접 형변환할 필요가 없다
2. 강제형변환(큰->작은) : 직접 형변환을 한다(명시적 형변환, 형변환연산자)
자동형변환
----------------------------------------------------------------------------------
public void autoCasting() {
int i1 = 10;
double d1 = i1;
System.out.println("d1 : " + d1);
int i2 = 12;
double d2 = 3.3;
double result2 = i2 + d2;
System.out.println("result2 : "+result2);
int i3 = 1000;
long l3 = i3;
long l4 = 2000;
System.out.println("l3 : "+l3);
System.out.println("l4 : "+l4);
long l5 = 1000000000;
float f5 = l5;
System.out.println("f5 : "+f5)
char ch = 65;
System.out.println("ch : " +ch);
int num = 'A';
System.out.println("num : "+num);
System.out.println((int)'김');
int sum = 'A' + 10;
System.out.println("sum : " + sum);
System.out.println("sum : " + (char)sum);
byte b1 = 1;
byte b2 = 10;
short s1 = 1;
short s2 = 10;
byte result1 = (byte)(b1 + b2);
short result11 = (short)(s1 + s2);
System.out.println("result1 : "+result1);
System.out.println("result11 : "+result11);
}
----------------------------------------------------------------------------------
강제형변환
----------------------------------------------------------------------------------
public void forceCasting() {
float f1 = 4.0;
double d2 = 8.0;
float f2 = (float)d2;
double d3 = 10.89;
int i3 = (int)d3;
System.out.println("i3 : "+ i3);
int iNum = 10;
double dNum = 5.89;
int iSum = iNum + dNum;
int iSum1 = (int)(iNum + dNum);
System.out.println("iSum1 : "+iSum1);
int iSum2 = iNum + (int)dNum;
System.out.println("iSum2 : "+iSum2);
double iSum3 = iNum + dNum;
System.out.println("iSum3 : "+iSum3);
}
----------------------------------------------------------------------------------
스캐너 클래스
* Java에서 이미 제공하고 있는 패키지(java.util.Scanner)
* Scanner클래스 안에 작성되어 있는 메소드를 호출하여 사용한다.
* sc.Method명();
* [참고] 출력시에는 System.out.printXXX()를 사용했었다.
-------------------------------------------------------------------------------
package com.kh.variable;
import java.util.Scanner;
public class B_KeyboardInput {
public void inputTest1() {
Scanner sc = new Scanner(System.in);
System.out.print("당신의 이름은 무엇입니까?");
String name = sc.nextLine();
System.out.print("당신의 나이는 몇살입니까?");
int age = sc.nextInt();
sc.nextLine();
System.out.print("당신의 키는 얼마입니까?");
double height = sc.nextDouble();
sc.nextLine();
System.out.print("키 "+ height +"cm, " + "나이 " + age + "세, "
+ name + "님 환영합니다.");
}
public void inputTest2() {
Scanner sc = new Scanner(System.in);
System.out.print("이름 : ");
String name = sc.nextLine();
System.out.print("나이 : ");
int age = sc.nextInt();
sc.nextLine();
System.out.print("성별(M/F) : ");
char gender = sc.nextLine().charAt(0);
System.out.print("키 : ");
double height = sc.nextDouble();
sc.nextLine();
System.out.println(name + "님의 개인정보");
System.out.println("성별 : "+gender);
System.out.println("나이 : "+age);
System.out.println("키 : "+height);
}
public void inputTest3() {
Scanner sc = new Scanner(System.in);
System.out.print("이름 : ");
String name = sc.nextLine();
System.out.print("나이 : ");
int age = sc.nextInt();
sc.nextLine();
System.out.print("주소 : ");
String addr = sc.nextLine();
System.out.print(addr + "에 사는 " + age + "살 " + name + "님 환영합니다.");
}
}
----------------------------------------------------------------------------------
프린트 클래스
----------------------------------------------------------------------------------
package com.kh.variable;
public class D_Printf {
public void printfTest(){
int iNum1 = 10;
int iNum2 = 20;
System.out.println("iNum1 : "+iNum1+", iNum2 : "+iNum2);
System.out.printf("iNum1 : %d, iNum2 : %d",iNum1,iNum2);
System.out.println("\n"+iNum1 + " + " +iNum2 + " = " + iNum1+iNum2);
System.out.println(iNum1 + " + " +iNum2 + " = " + (iNum1+iNum2));
System.out.printf("%d + %d = %d \n",iNum1,iNum2,(iNum1+iNum2));
System.out.printf("%5d \n",iNum1);
System.out.printf("%-5d \n" ,iNum2);
double dNum = 4.27546789;
System.out.printf("dNum : %f \n",dNum);
System.out.printf("dNum : %.1f \n",dNum);
char ch = 'a';
String str = "Hello";
System.out.printf("%c %s \n",ch,str);
System.out.printf("%c %s \n",ch,str);
System.out.printf("%c \t %s \n",ch,str);
System.out.printf("%C %S",ch, str);
}
}
----------------------------------------------------------------------------------