2023. 12. 1. 20:32ㆍ2023.11.21-2024.05.31
02.변수와 타입
02-1 변수
*변수 : 값을 저장할 수 있는 메모리에 붙이는 이름,
메모리에 값을 저장하고 싶다면 변수를 선언하고 변수에 값을 지정하면 됩니다.
※변수 선언 : 변수에 어떤 타입의 데이터를 저장할 것인지 그리고 변수 이름이 무엇인지를 결정하는 것.
타입 변수이름
int age; // 정수(int)를 저장할 수 있는 age 변수 선언
double value; // 실수(double)를 저장할 수 있는 value 변수 선언
*변수 이름 명명 규칙
-첫번째 글자는 문자이거나 '$','_' 이어야 하고 숫자로 시작할 수 없다.(필수)
-영어 대소문자를 구분한다.(필수)
-첫 문자는 영어 소문자로 시작하되, 다른 단어가 붙을 경우 첫 문자를 대문자로 한다.(관례)
-문자 수(길이)의 제한은 없다.
-자바 예약어는 사용할 수 없다.(필수)
-예약어는 변수 이름으로 사용 할 수 없다.
※값 저장
*값을 저장할 때에는 대입 연산자(=)를 사용한다.
*변수 초기화 : 변수에 최초로 값이 저장될 때 변수가 생성 되는 것
package sec01.exam01;
public class VariableInitializationExample {
public static void main(String[] args) {
//변수 value 선언
int value;
//변수 value 값을 읽고 10을 더하는 산술 연산을 수행
//연산의 결과값을 변수 result의 초기값으로 저장
int result = value + 10;
//변수 result 값을 읽고 콘솔에 출력
System.out.println(result);
}
}
-> 초기화되지 않은 변수는 아직 메모리 번지 정보를 가지고 있지 않으므로 변수를 통해 메모리 값을 읽을 수 없다.
※변수 사용 : 변수의 값을 읽거나 변경하는 것
변수는 출력문이나 연산식 내부에 저장된 값을 출력하거나 연산할 때 사용한다.
package sec01.exam02;
public class VariableUseExample {
public static void main(String[] args) {
int hour = 3;
int minute = 5;
System.out.println(hour + "시간" + minute + "분");
int totalMinute = (hour*60) + minute;
System.out.println("총" + totalMinute + "분");
}
}
3시간5분
총185분
*변수 값 교환 : 변수는 또 다른 변수에 대입하여 값을 복사 할 수 있다,
두 변수의 값을 교환하기 위해서 새로운 변수 temp를 선언한다.
package sec01.exam03;
public class VariableExchangeExample {
public static void main(String[] args) {
int x = 3;
int y = 5;
System.out.println("x:" + x + ", y:" + y);
int temp = x;
x=y;
y=temp;
System.out.println("x:"+x+", y:"+y);
}
}
x:3, y:5
x:5, y:3
※변수 사용 범위
*로컬 변수 : 메소드 블록 내에서 선언된 변수, 메소드 실행이 끝나면 메모리에서 자동으로 없어진다.
변수는 자신이 선언된 위치로부터 자신이 속한 블록 내부에서만 사용할 수 있다.
-변수가 어떤 범위에서 사용될 것인지를 생각하고, 선언 위치를 결정해야 한다.
-메소드 블록 전체에서 사용하고 싶다면 메소드 블록 첫머리에 선언한다.
-특정 블록 내부에서만 사용된다면 해당 블록 내에 선언한다.
*변수의 사용범위
package sec01.exam04;
public class VeriableScopeExample {
public static void main(String[] args) {
int v1 = 15;
if(v1>10) {
int v2;
v2 = v1-10;
}
int v3 = v1 + v2 + 5;//v2 변수를 사용할 수 없기 때문에 컴파일 에러 발생
}
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
v2 cannot be resolved to a variable
at chap02/sec01.exam04.VeriableScopeExample.main(VeriableScopeExample.java:11)
변수 v2가 선언된 곳은 if 블록 내부, if 블록 바깥에서는 사용할 수 없다.
02-2기본타입
※정수 타입
타입 | 메모리 사용크기 | 저장되는 값의 허용 범위 | |
byte | 1byte | 8bit | -128~127 |
short | 2byte | 16bit | -32,768~32,767 |
char | 2byte | 16bit | 0~65535(유니코드) |
int | 4byte | 32bit | -2,147,483,648~2,147,483,647 |
long |
8byte | 64bit | -9,223,372,036,854,775,808~9,223,372,036,854,775,807 |
*정수 리터럴 : 정수 타입으로 선언된 변수에는 정수 리터럴을 대입해서 정수를 저장할 수 있다.
package sec02.exam01;
public class IntegerLiteralExample {
public static void main(String[] args) {
int var1 = 0b1011;
int var2 = 0206;
int var3 = 365;
int var4 = 0xb3;
System.out.println("var1: " + var1);
System.out.println("var2: " + var2);
System.out.println("var3: " + var3);
System.out.println("var4: " + var4);
}
}
var1: 11
var2: 134
var3: 365
var4: 179
*byte 타입변수 : -128~127
package sec02.exam02;
public class ByteExample {
public static void main(String[] args) {
byte var1 = -128;
byte var2 = -30;
byte var3 = 0;
byte var4 = 30;
byte var5 = 127;
byte var6 = 128;//컴파일 에러
System.out.println(var1);
System.out.println(var2);
System.out.println(var3);
System.out.println(var4);
System.out.println(var5);
}
}
*long 타입 변수 : 정수 리터럴 뒤에 소문자 l이나 대문자 L을 붙인다.
package sec02.exam03;
public class LongExample {
public static void main(String[] args) {
long var1 = 10;
long var2 = 20L;
//long var3 = 1000000000000 >컴파일 에러
long var4 = 1000000000000L;
System.out.println(var1);
System.out.println(var2);
System.out.println(var4);
}
}
10
20
1000000000000
*char 타입
문자 리터럴 : 하나의 문자를 작은따옴표(')로 감싼 것, 유니코드로 변환되어 저장
package sec02.exam04;
public class CharExample {
public static void main(String[] args) {
char c1='A';
char c2=65;
char c3='\u0041';
char c4='가';
char c5=44032;
char c6='\uac00';
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
System.out.println(c5);
System.out.println(c6);
}
}
A
A
A
가
가
가
*String
문자열 : 큰따옴표(")로 감싼 문자들
String 타입은 기본 타입이 아닌 클래스 타입이다.
package sec02.exam05;
public class StringExample {
public static void main(String[] args) {
String name = "홍길동";
String job = "프로그래머";
System.out.println(name);
System.out.println(job);
System.out.println(name+job);
}
}
홍길동
프로그래머
홍길동프로그래머
*이스케이프 문자 : 역슬래시(\)가 붙은 문자, 문자열 내부에 특정 문자를 포함시킬 수 있다.
이스케이프 문자 | 출력 용도 |
\t | 탭만큼 띄움 |
\n | 줄 바꿈(라인 피드) |
\r | 캐리지리턴 |
\" | "출력 |
\' | '출력 |
\\ | \출력 |
\u16진수 | 16진수 유니코드에 해당하는 문자 출력 |
package sec02.exam06;
public class EscapeExample {
public static void main(String[] args) {
System.out.println("번호\t이름\t직업");
System.out.println("행 단위 출력\n");
System.out.println("행 단위 출력\n");
System.out.println("우리는 \"개발자\" 입니다.");
System.out.println("봄\\여름\\가을\\겨울");
}
}
번호 이름 직업
행 단위 출력
행 단위 출력
우리는 "개발자" 입니다.
봄\여름\가을\겨울
※실수 타입
타입 | 메모리 사용 크기 | 저장되는 값의 허용 범위(양수 기준) | 정밀도(소수점 이하 자리) | |
float | 4byte | 32bit | 7자리 | |
double | 8byte | 64bit | 15자리 |
*float과 double 타입
package sec02.exam07;
public class FloatDoubleExam {
public static void main(String[] args) {
//실수값 저장
//float var1 = 3.14;
float var2 = 3.14f;
double var3 = 3.14;
//정밀도 테스트
float var4 = 0.1234567890123456789f;
double var5= 0.1234567890123456789;
System.out.println("var2: " + var2);
System.out.println("var3: " + var3);
System.out.println("var4: " + var4);
System.out.println("var5: " + var5);
//e 사용하기
double var6 = 3e6;
float var = 3e6F;
double var8 = 2e-3;
System.out.println("var6: " + var6);
String var7 = null;
System.out.println("var7: " + var7);
System.out.println("var8: " + var8);
}
}
※논리타입
package sec02.exam08;
public class BooleanExample {
public static void main(String[] args) {
// boolean stop= true;
// if(stop) {
// System.out.println("중지합니다.");
// } else {
// System.out.println("시작합니다.");
boolean start= false;
if(start) {
System.out.println("중지합니다.");
} else {
System.out.println("시작합니다.");
}
}
}
중지합니다.
boolean 타입 변수는 주로 두 가지 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는 데 사용한다.
※타입 변환
*자동 타입 변환: 자동으로 타입 변환이 일어나는 것,
값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생
허용 범위 크기순
byte < short < int < long < float < double
package sec03.exam01;
public class PromotionExample {
private static char intValue;
public static void main(String[] args) {
//자동 타입 변환
byte byteValue = 10;
int intVaule = byteValue;
System.out.println("intValue");
char charValue = '가';
intValue = charValue;
System.out.println("가의 유니코드:" + intValue);
intVaule = 50;
long longVaule = intVaule;
System.out.println("longVaule:" + longVaule);
longVaule = 100;
float floatValue = longVaule;
System.out.println("floatValue:" + floatValue );
floatValue = 100.5F;
double doubleValue = floatValue;
System.out.println("doubleValue:" + doubleValue);
}
}
intValue
가의 유니코드:가
longVaule:50
floatValue:100.0
doubleValue:100.5
※강제 타입 변환
큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환될 수 없다.
하지만 큰 허용 범위 타입을 작은 허용 점위 타입으로 강제로 나눠서 저장하는 것을 강제 타입 변환(캐스팅)이라고 한다.
캐스팅 연산자 괄호()를 사용하는데, 괄호 안에 들어가는 타입은 나누는 단위이다.
*int타입은 byte 타입보다 더 큰 허용 범위를 가진다.
하지만 (byte)를 사용해서 강제 변환할 수 있다.
int intValue = 10;
byte byteValue = (byte) intValue; // 강제 타입 변환
*int 타입-> char 타입
int intValue = 65;
char charValue = (char) intValue;
System.out.println(charValue); //"A"가 출력
*실수 타입(float, double)-> 정수 타입(byte, short, int, long)
double doubleValue =3.14;
int intValue = (int) doubleValue; //intValue는 정수 부분인 3만 저장
package sec03.exam02;
public class CastingExample {
public static void main(String[] args) {
int intValue = 44032;
char charValue = (char) intValue;
System.out.println(charValue);
long longValue=500;
intValue=(int) longValue;
System.out.println(intValue);
double doubleValue = 3.14;
intValue = (int) doubleValue;
System.out.println(intValue );
}
}
가
500
3
'2023.11.21-2024.05.31' 카테고리의 다른 글
1205수업11일차(JAVA) - HelloWorld(1204 복습) (1) | 2023.12.05 |
---|---|
1204수업10일차(JAVA) (1) | 2023.12.04 |
1130수업8일차1(JAVA) (0) | 2023.12.01 |
1129수업 7일차(JAVA) (0) | 2023.11.29 |
1129수업 7일차(오라클) (0) | 2023.11.29 |