Chapter 02 변수와 타입
2.1 변수선언
변수 = 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름
자바의 변수는 다양한 타입의 값을 저장할 수 없다. -> int형인데 float을 저장할 수 없다. ⇒ 정적 Type 이다.
변수의 이름은 그값을 표현할수 있도록 ⇒ 캐멀 (camel)스타일로 (변수의 시작은 무조건 문자여야 한다) 특수문자는 $ 랑 _ 만가능
캐멀 스타일 = 코드를 작성할때, 여러 단어를 혼합하여 명명하는 경우, 낙타의 등처럼 대소문자가 섞여있도록 작성하는 스타일, 자바 소스 파일명과 변수명을 작성할 때 관례적으로 사용
- 자바 소스 파일명(클래스명)은 대문자로 시작하는것이 관례
Week.java
MemberGrade.java
ProductKind.java - 변수명은 소문자로 시작하는것이 관례
score
mathScore
sportsCar
→ 변수명의 길이랑 프로그램 실행속도는 무관
변수에 값을 대입할땐
int score;
score = 90 오른쪽의 값을 왼쪽의 변수에 대입! 오른쪽은 값 왼쪽은 변수
변수 선언은 저장되는 값의 타입과 이름만 결정, 실질적으로 메모리에 할당 되는 것은 아님.
-> 최초로 값이 대입될때 = 변수 초기화 = 메모리에 값이 할당 된다.
<두 변수 값 교환>
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);
}
2.2 정수타입
- byte char short int long
타입 메모리크기 저장되는 값의 허용범위 byte 1byte (8bit) -128~ 127 short 2byte (16bit) -32,768~32,767 char 2byte (16bit) 0~65,535(유니코드) int 4byte (32bit) -2.147,483,648~2,147,483,647 (-+ 21억) long 8byte (64bit) -9 ~long타입은 마지막에 L,l을 붙여야한다.
→ 각 메모리 할당 크기 정도는 외우기
종류 | byte | short | int | long |
---|---|---|---|---|
메모리 사용크기 | 8 | 16 | 32 | 64 |
→ 2의 8승 16승 32승 64승 |
최상위 비트는 부호를 나타낸다 (0은 양수, 1은 음수) 나머지 2의 n-1승 -1
ex) 최상위 비트는 부호비트로 사용하고 나머지 7bit로 값의 범위를 결정한다
(1의 보수를 정해서 +1을해서 정한다 최상위 비트가 음수일때)
→ 프로그래머가 직접 입력한 값 리터럴(literal)
//2진수: 0b, 0B로 시작하고 0과1로작성
int x =0b1011;
//8진수: 0으로 시작 0~7로 작성
int x = 013;
//10진수: 소수점이 없는 0~9로 작성
int x = 12;
//16진수: 0x, 0X로 시작하고0~9랑 A,B,C,D,E,F or a,b,c,d,e,f로 작성
int x = 0x2A0F;
2.3 문자타입
문자를 숫자로 바꿔서 저장을하기 때문에 char가 정수타입에 있다. (아스키코드, 유니코드)
문자타입은 작은따음표(’’)로 감싼것을 문자 리터럴 → 문자 타입은 문자 1개만 2개이상은 → 문자열이 된다.
char var1 = 'A';
char var2 = '가';
char c = 65 -> 매핑 되는 문자는 A
char c = 0x0041 -> 16진수와 매핑되는건 A
//빈 문자를 초기화 하기위해서는 공백을 넣어준다
char c = '';//컴파일 에러
char c = ' '; //공백 하나를 넣어서 초기화
2.4 실수타입
타입 | 메모리크기 | 유효 소수 이하 자리 | ||
---|---|---|---|---|
float | 4byte - 32bit | 7자리 | 부호(1bit)+지수(8bit)+가수(23bit) =32bit = 4byte | 동일하게 float으로 저장하기 위해선 f,F붙여준다 |
double | 8byte - 64bit | 15자리 | 부호(1bit)+지수(11bit)+가수(52bit)=64bit = 8byte |
java에서 정수타입의 기본은int 실수타입의 기본은 double로 인식한다.
정수형이랑, 실수형 32bit 64bit 메모리 크기는 동일한데 왜 저장되는 숫자의 크기가 다른가? → 저장방식이 다르다
정수형은 비트를 나열해서 최상위비트는 부호비트 나머지로 2진수로 계산해서 수를 계산
실수형은 부호 + m* 10n승 에서 (m은 가수, n은 지수) (m과 n만 저장하게 된다)
2.5 논리 타입
True, False를 의미함. 논리 리터럴은 boolean타입 변수에 다음과 같이 대입
boolean stop = true;
boolean stop = false;
→ 보통 조건문과 제어문의 실행흐름을 제어하는데 사용된다. 보통 오른쪽엔 연산식이 온다.
2.6 문자열 타입
문자열은 큰따옴표(””)로 감싸야 한다.
char var1 ="A"; //컴파일 에러
char var2 = '홍길동'//컴파일 에러
String var1 = "홍길동";
→ 이스케이프 문자 역슬래쉬()
\n → 출력 시 줄바꿈(라인피드)
\r → 출력 시 캐리지 리턴 (앞으로 땡기는거)
즉 window에서 enter → \r \n이다.
JAVA 13부터는 텍스트 블록 문법을 제공한다
string str = """
여기는 전체 문자열로 인식한다
"""
2.7 자동 타입 변환
큰 허용 범위 타입 = 작은 허용 범위 타입 이면
작은 허용 범위 타입 → 큰 허용 범위 타입으로 변환된다.
byte < short, char< int < long < float < double
byte byteValue = 10;
int intValute = byteValue; //자동 타입 변환
정수 타입이 실수 타입으로 대입 될때는 무조건 자동 타입 변환 된다.
(메모리 크기로 보았을땐 성립하지 않지만, 실제 허용 범위는 실수타입이 훨씬 크기때문이다 → 실수타입의 저장 방법이 다르므로)
But Char의 경우 예외가 존재
char charValue = 'A'
int intValue = charValue //의 경우 intValue에 65저장 but
byte byteValue = 65;
char charValue = byteValue; //의 경우 char는 음수를 지원하지 않으므로 컴파일 에러 발생
2.8 강제 타입 변환
작은 허용 범위 타입 = (작은 허용 범위 타입) 큰 허용 범위 타입
의 경우 강제 타입 변환이 필요하다.(괄호를 캐스팅 기호라고 한다)
int intValue = 10;
byte byteValue = (byte)intValute; //강제 타입 변환
/* int는 4byte인데 거기서 제일마지막 꺼만 byte로 넣고 나머지는 버린다 */
2.9 연산식에서 자동 타입 변환
자바는 실행 성능을 향상시키기 위해 컴파일 단계에서 연산을 한다.
정수 리터럴 10, 20을 더할때는 30이연산된다 result에 저장되어 컴파일 된다. 즉 byte 타입
byte result = 10 + 20; 리터럴 일때만! but 변수는 다르다
byte type 변수가 피연산자로 사용된 경우
byte x = 10;
byte y = 20;
byte result = x + y; //컴파일 에러 x,y는 변수이므로 기본인 int로 받기때문에 에러가 발생
int result = x + y; //정상실행
int 타입 변수가 피연산자로 사용된 경우
int x = 10;
int y = 20;
int result = x + y;
피연산자중 하나가 long type이면 long type
→ 간단하게 더 큰 형으로 변환된다.
자바에서 + 는 2개
피연산자가 상수이면 그냥 산술연산
피연산자중 문자열이 있다면 자동으로 문자열로 변환되어서 계산
int valte = 1+2+3; => int value =6
String str = 1+2+"3" => String str = "33";
String str = 1+"2"+3 => String str = "123";
String str = "1"+2+3 => String str = "123";
2.10 문자열을 기본 타입으로 변환
자바에서 입력을 받을때 문자열로 입력을 받는 경우가 많다(네트워크나, 사용자의 키보드를 통해), 이때 문자열을 기본타입으로 변환하는 방법
변환 타입 | 사용 예 |
---|---|
→ byte | String str = “10”; |
byte value = Byte.parseByte(str); #parse → 해석한다 | |
→ short | String str = “200”; |
short value = Short.parseShort(str); | |
→ int | String str = “300000000”; |
int value = Integer.parseInt(str); | |
→ long | String str = “4000000000000”; |
long value = Long,parseLong(str); | |
→ float | String str = “12.345”; |
float value = Float.parseFloat(str); | |
→ double | String str = “12.345”; |
double value = Double.parseDouble(str); | |
→boolean | String str = “ture”; |
boolean value = Boolean.parseBoolean(str); | |
여기는 문자열을 | 기본타입으로 변환할때 |
기본 type → 문자열 | Stirng str = String.valueOf(기본타입값); |
String → int, double 코테에 자주사용
2.11 변수 사용 범위
public static void main(String[] args){
int var1;
if(---){
int var2;
//var1, var2 사용가능
}
for(---){
int var3;
//var1, var3 사용가능
}
//var1 만 사용가능
//var2,3 사용불가
}
→ 자기가 선언된 블록 내부에서만 사용가능하다. (자바는 블럭 단위의 변수 선언! , 함수단위 아님)
2.12 콘솔로 변수값 출력
System.out.println(리터럴 또는 변수);
시스템으로 / 출력해라 / 괄호 안의 내용을 출력하고 행을 바꿔라
메서드 호출
println(); 여기서 println 메서드이름 괄호가 들어가면 이메소드를 실행해라
메소드 | 의미 |
---|---|
println(내용); | 괄호안의 내용을 출력하고 행을 바꿔라 |
print(내용); | 괄호안의 내용을 출력하고 행을 바꾸지마라 |
printf(”형식 문자열”, 값1, 값2); | 형식 무자열에 맞추어 뒤의 값을 출력해라. |
→ pirntf 에서
printf에 형식 문자열의 경우 %conversion(변환문자) 이다.
사이에 여러 옵션도 가능하다.
conversion에 제공되는 값은 타입에 따라 d(정수), f(실수), s(문자열)등이 있다.
ex)
System.out.printf("이름: %s", "김자바") -> 이름: 김자바
System.out.printf("나이: %d". 25); -> 나이: 25
System.out.printf("이름: %1$s, 나이: %2$d", "김자바", 25) -> 이름: 김자바, 나이: 25
-> 형식 묹자열에 포함된 값이 두개 이상일경우
순번을 포함시킨다. 1$ 첫번째, 2$ 두번째
2.13 키보드 입력 데이터를 변수에 저장 코테에 자주이용
→ 가장 쉬운 방법은 Scanner
Scanner scanner = new Scanner(System.in);
//scanner변수 선언 = Scanner 객체 생성
//생성된 Scanner를 변수에 대입
//Scanner 타입의 변수를 선언하게 되면 -> 대입 연산자 = 를 사용해서
// new연산자를 통해 Scanner객체를 변수에 대입.
String inputData = scanner.nextLine();
//Stinrg 변수선언, 엔터키를 누르면 입력된 문자열을 읽고 -> 해당 문자열을 String변수 inputData에
//저장
//Scanner 사용법
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); //변수 선언
/*타입 -> 처음에는 에러발생(기본타입이 아니므로) ->
따라서 Scanner를 import해준다
-> 현재 컴퓨터의 입력장치(키보드)로부터 데이터를 읽어와라
*/
// System.out.print("x값 입력: ");
// String strx = scanner.nextLine();
// int x = Integer.parseInt(strx);
// //숫자가 아닌게 입력되면 에러가뜸
// System.out.println(strx);
//
// System.out.print("y값 입력: ");
// String stry = scanner.nextLine();
// int y = Integer.parseInt(stry);
//
// int result = x + y;
// System.out.println("x + y: "+ result);
while(true) {
System.out.print("입력 문자열: ");
String data = scanner.nextLine();
if(data.equals("q")) {
break;
}
System.out.println("출력 문자열: "+data);
System.out.println();
}
System.out.println("종료");
}
}
'JAVA > 이것이 자바다' 카테고리의 다른 글
[Chapter 06] 클래스 (0) | 2022.12.31 |
---|---|
[Chapter 05] 참조 타입 (0) | 2022.12.31 |
[Chapter 04] 조건문과 반복문 (0) | 2022.12.03 |
[Chapter 03] 연산자 (0) | 2022.12.03 |
[Chapter01] 자바 시작하기 (0) | 2022.11.29 |
댓글