2. 변수와 데이터타입, 형변환
1. 변수
1. 변수란
* 데이터를 저장하기 위해 메모리에 공간을 만들어 할당하고, 이름을 부여한 것
* 데이터의 저장과 참조를 위해 할당된 메모리 공간
1) 지역변수 (Local variables)
- 메서드 내부에서만 사용 가능한 지역변수, 메서드 내에서 선언되는 변수
- 메서드가 시작될 때 생성
- 메서드를 빠져나갈 때 소멸
- 블럭변수 : 메서드 내 또다른 블럭(if, for 등) 내에서 선언된 변수
2) 멤버변수 (instance 변수)
- 클래스에서 선언된 변수
- 클래스의 멤버역할을 하는 member field
- 클래스 내의 여러 메서드에서 공통으로 사용 가능, 클래스 외부에서도 접근가능하게 할 수
3) 클래스변수 (static 변수)
2. 변수 선언
>데이터타입 변수명;
>int num;
* int num;
* int -데이터타입 / 정수를 저장할 메모리 공간을 할당하겠다.
* num - 해당 변수에 접근할 때에는 num 이라는 이름을 사용하겠다.
3. 값 할당
* 변수 선언 후 값 할당
> int a;
> a = 23;
* 선언과 동시에 초기화
> int a = 23;
* 여러 변수 동시에 선언, 동시 할당
> int a=10, b=20;
* 여러 변수 동시에 선언 후 할당
> int a, b;
> a=10;
> b=20;
* 변수끼리의 할당
>int a=10, b;
>b=a;
class VarTest{
public static void main(String[] args){
int a; //변수선언
a = 10; // 값 할당
int b = 20; //선언과 동시에 값 할당
int c=30, d=40; //여러개 동시에 선언과 할당
int e,f;
e=100;
f=200;
int k=45;
int n = kl
}
}
4. 변수의 범위(Scope)
- 중괄호{}로 묶인 블록내에서 선언된 변수는 블록을 나가면 소멸된다.
단일블록
{
//code
}
중첩블록
{
inti;
{
inti; //error 중첩 블록 내 동일한 변수 사용 불가능
}
}
다른 블록
{
int i
}
{
int i; // 블록이 달라 사용 가능
}
class ScopeTest
{
public static void main(String[] args)
{
// 변수의 범위(Scope)
//{} 블럭 내에서 선언된 변수는 블록을 빠져나가면 소멸
//=> 메서드 내에서 선언된 변수는 해당 메서드가 종료되면 소멸
int a=10;//main 메서드 내에서 사용 가능
System.out.println(a);
//for(int a=0;a<3;a++){} => error main메서드의 a변수 사용 불가
for(int i=0;i<3;i++){
System.out.println(a);
}
for(int i=0;i<4;i++){
int k=30;
System.out.println(k);
}
System.out.println(a);
//System.out.println(i); i는 for 블록 탈출 후 소멸
//System.out.println(k); k는 for 블록 탈출 후 소멸
}
}
2. 데이터타입
- 기본자료형
- byte - 1byte, 정수
- short - 2byte, 정수
- int - 4byte, 정수
- long - 8byte, 정수
- float - 4byte, 실수
- double - 8byte, 실수
- char - 2byte, 문자
- 영문자나 한글과 같은 문자 하나를 저장해서 사용한다.
- 실제로는 해당 문자의 유니코드 값이 저장된다.
char a=’A’; => char a=65;
- boolean - 1byte, 논리(참거짓)
- 참조형
- String - 문자열
- 예제 - 숫자형
public class VarTest{ public static void main(String[] a){ byte a = 127; //-128 ~ 127 short b = 32000; int c = 2100000000; //21억 long d = 21000000000L;//900경, int의 범위를 넘어설 경우 뒤에 L을 붙인다. long e=(long)a*b*c; //byte*short*int => int*int*int로 자동 형변환된다. //값이 int의 범위를 벗어나 잘못된 결과가 나오므로, (Long)을 이용해 형변환해준디. } }
- 예제 - 문자형
public class VarTest{ public static void main(String[] a){ byte a = 127; //-128 ~ 127 short b = 32000; int c = 2100000000; //21억 long d = 21000000000L;//900경, int의 범위를 넘어설 경우 뒤에 L을 붙인다. long e=(long)a*b*c; //byte*short*int => int*int*int로 자동 형변환된다. //값이 int의 범위를 벗어나 잘못된 결과가 나오므로, (Long)을 이용해 형변환해준디. } }
3. 형변환
- 형변환 이란
- 연산을 위해 서로다른 데이터타입을 통일하기 위해 변환
- 연산 시
- 피연산자 중 더 큰 데이터 타입을 이용해 연산
- 대입 시
- 좌우변의 타입이 일치해야 함
- 형 변환 종류
- 자동 형변환
- 작은 범위의 데이터를 큰 범위에 할당하는 경우
- 값의 손실이 발생하지 않는 변환
- 명시적 형변환
- 큰 범위의 데이터를 작은 범위에 할당하는 경우
- 값의 중요부분이 손실되지 않을 때만 수행해야함
- 자동 형변환
자동 형변환 규칙
byte - short - int - long - float - double
char - int - long - float - double
명시적 형변환
float a = 3.14f;
int b = (int)a;
public class ConversionTest{
public static void main(String[] a){
long a = 2580L;
float b = a; //자동형변환
double c = 23.489;
float d = (float)c; //명시적 형변환
}
}
- wrapper 클래스
- 자료형을 효율적으로 관리하기 위해 만들어진 자료형 대체클래스
- 기본형 변수들도 객체로 다루어져야 하는 경우 사용된다.
- Boolean / Character / Byte / Short / Integer / Long / Float / Double
Integer.MAX_VALUE
Integer.MIN_VALUE 등 - 문자열 => 숫자 형변환
String a = “12345”;
int b = (int)a; //에러String a = “12345”;
int b = Integer.parseInt(a); //문자열을 정수로 변환Float.parseFloat()
Double.parseDouble()
Byte.parseByte() - 숫자열 => 문자 형변환
int a = 10;
String b = Integer.toString(a);Double.toString()
Long.toString()
Float.toString()