True와 true는 서로 다른 것으로 간주된다.
true는 예약어라서 사용할 수 없지만, True는 가능하다.
top10은 허용되지만, 7up은 허용되지 않는다.
$harp은 허용되지만, S#arp은 허용되지 않는다.
클래스 이름의 첫 글자는 항상 대문자로 한다.
변수와 메서드의 이름의 첫 글자는 항상 소문자로 한다.
여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다.
ex) lastIndexOf, StringBuffer
상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 '_'로 구분한다.
ex) PI, MAX_NUMBER
1. 변수의 선언 이유
변수타일 변수이름; int age;
1) 변수에 값 저장하기 int age; //int 타입인 변수 age를 선언 age = 23; //변수 age에 값 23을 저장 2) 변수의 초기화 변수에 처음으로 값을 저장하는 것 int x = 0, y = 5; //변수 x, y를 선언 후 0, 5로 초기화
기본형(primitive type) 계산을 위해 실제 값을 저장한다. (총 8개)
- 논리형(boolean) - true/false. 조건식과 논리적 계산에 사용
- 문자형(char) - 문자를 저장, 변수 당 하나의 문자만을 저장할 수 있다(여러 문자는 String)
- 정수형(byte, short, int, long) - 정수 값을 저장, 주로 int, long 사용, byte는 이진 데이터를 다루는데 사용
- 실수형(float, double) - 실수 값을 저장, folat와 double
참조형(reference type)
- 기본형을 제외한 나머지(String, System 등 무한개)
- 메모리 주소를 저장(4byte or 8byte)
- 객체의 주소를 저장한다. (8개의 기본형을 제외한 나머지 타입)
- 참조형 변수를 선언할 때 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름이 참조변수의 타입이 된다.
| 1byte | 2byte | 4byte | 8byte | |
|---|---|---|---|---|
| 논리형 | boolean | |||
| 문자형 | char | |||
| 정수형 | byte | short | int | long |
| 실수형 | float | double |
#boolean을 제외한 나머지 7개의 기본형은 서로 연산과 변환이 가능하다.
| 자료형 | 저장 가능한 값의 범위 | 크기(byte) |
|---|---|---|
| boolean | false, true | 1 |
| char | '\u0000'~'\uffff' (0~216-1, 0~65535) | 2 |
| byte | -128~127 (-27~27-1) | 1 |
| short | -32,768~32,767 (-215~215-1) | 2 |
| int | -2,147,483,648~2,147,483,647 (-231~231-1) | 4 |
| long | -9,223,372,036,854,775,808~9,223,372,036,854,775,807 (-263~263-1) | 8 |
| float | 1.4E-45~3.4E38 (1.4x10-45~3.4x1038) | 4 |
| double | 4.9E-324~1.8E308 (4.9x10-324~1.8x10308) | 8 |
값의 타입
값(data)
- 문자 - char
- 숫자
- 정수 - byte, short, int, long
- 실수 - float, double
- 논리 - boolean
1) 변수의 타입은 저장할 값의 타입에 의해 결정된다. int age = 23; age = 3.14; //에러 2) 저장할 값의 타입과 일치하는 타입으로 변수를 선언; char ch = "가"; double pi = 3.14;
변수(Variable): 하나의 값을 저장하기 위한 공간
상수(Constant): 한 번만 값을 저장 가능한 변수
ⓐ 변수의 타입 앞에 키워드 'final'을 붙여준다.
ⓑ 반드시 선언과 동시에 초기화해야 한다.
ⓒ 상수의 값을 변경하는 것이 허용되지 않는다.
리터럴(Literal): 그 자체로 값을 의미하는 것
int score = 100; //score는 변수, 100은 리터럴 final int MAX = 200; //MAX는 상수, 200은 리터럴
프로그래밍에서는 상수를 '값을 한 번 저장하면 변경할 수 없는 저장공간'으로 정의했기 때문에 이와 구분하기 위해 상수를 리터럴이라는 다른 이름으로 불러야만 했다.
| 종류 | 리터럴 | 접미사 |
|---|---|---|
| 논리형 | false, true | 없음 |
| 정수형 | 123, 0b0101, 077, 0xFF, 100L | L |
| 실수형 | 3.14, 3.0e8, 1.4f, 0x1, Op-1 | f, d |
| 문자형 | 'A', '1', '\n' | 없음 |
| 문자열 | "ABC", "123", "A", "true | 없음 |
int small = 100;
long big = 100_000_000_000L;
float pi = 3.14f;
double rate = 1.618d;
float pi = 3.14; //에러. float타입 변수에 double타입 리터럴 지정 불가
double rate = 1.618; //OK
byte b = 128; //에러. byte타입 범위 -128~127 int oct = 0100; //8진수. 접두사 0 int hex = 0x100; //16진수. 접두사 0x long l = 10_000_000_000L; //100억. L 생략불가 long l = 100; //L 생략가능 float f = 3.14f; //f 생략불가 double d = 3.14d; //d 생략가능 10. --> 10.0 .10 --> 0.10 10f --> 10.0f 1e3 --> 1000.0(d)
타입이 달라도 저장범위가 넚은 타입에서 좁은 타입의 값을 저장하는 것은 허용된다.
int i = 'A'; // OK. 유니코드인 65가 변수 i에 저장된다. long l = 123; // OK. double d = 3.14f; // OK.
1)범위가 '변수 > 리터럴'인 경우, OK
int i = 'A' //int > char
long l = 123; //long > int
double d = 3.14f; // double > float
2)범위가 '변수 < 리터럴'인 경우, 에러
int i = 30_0000_0000; //에러. int의 범위(약 -20억~20억) 벗어남
long l = 3.14f //에러. long < float
float f = 3.14; //에러. float < double
3)byte, short 변수에 int리터럴 저장가능
byte b = 100; //OK. byte범위(-128~127)에 속함
byte b = 128; //에러. byte범위를 벗어남
char ch='A'; //문자
char ch='AB'; //에러
String s="ABC"; //문자열
String s1="AB";
String s2=new String("AB");
String s1 = "A" + "B"; //"AB"
"" + 7 --> "" + "7" -->"7" //숫자 + 문자열 --> 문자열
문자열 + any type --> 문자열
any type + 문자열 --> 문자열
String str = ""; // OK.
char ch = ''; // 에러.
char ch = ' '; // OK. 공백 문자(blank)로 변수 초기화
ex) 27 + " " -> "27 "
" " + 27 -> " 27"
7 + "27" -> "727"
int x = 10, y = 20;
int tmp; //1. 빈 컵
tmp = x; //2. x의 값을 tmp에 저장
x = y; //3. y의 값을 x에 저장
y = tmp; //4. tmp의 값을 y에 저장
| 종류 | 설명 | 데이터 타입 |
|---|---|---|
| %b | boolean 형식으로 출력 | 정수 |
| %d | 정수 형식으로 출력 | 정수 |
| %o | 8진수 정수의 형식으로 출력 | 정수 |
| %x or %X | 16진수 정수의 형식으로 출력 | 정수 |
| %e 또는 %E | 지수 표현식의 형식으로 출력 | 실수 |
| %f | 소수점 형식으로 출력 | 실수 |
| %c | 문자형식으로 출력 | 문자 |
| %s | 문자열 형식으로 출력 | 문자 |
| %n | 줄바꿈 기능 | - |
'%n' 대신 '\n'을 대신 사용해도 되지만, OS마다 줄바꿈 문자가 다를 수 있기 떄문에 '%n'을 사용하는 것이 더 안전하다.
1)정수를 10진수, 8진수, 16진수로 출력
System.out.printf("%d", 15); // 15 , 10진수
System.out.printf("%o", 15); // 17 , 8진수
System.out.printf("%x", 15); // f , 16진수
System.out.printf("%s", Integer.toBinaryString(15)); // 1111 , 2진수
2)8진수와 16진수에 접두사 붙이기
System.out.printf("%#o", 15); // 017 , 8진수
System.out.printf("%#x", 15); // 0xf , 16진수
System.out.printf("%#X", 15); // 0Xf , 16진수
3)실수 출력을 위한 지시자 %f - 지수형식(%e), 간략한 형식(%g)
System.out.printf("%f", f); // 123,456787 소수점아래6자리
System.out.printf("%e", f); // 1,234568e + 02 지수형식
System.out.printf("%g", 123.456789); // 123.457 간략한 형식
System.out.printf("%g", 0.00000001); // 1.000000e-8 간략한 형식
System.out.printf("[%5d]%n", 10); //5자리
System.out.printf("[%-5d]%n", 10); //왼쪽정렬, 5자리
System.out.printf("[%05d]%n", 10); //공백 0으로 채움, 5자리
System.out.printf("d=%14.10f%n", d); //전체 14자리 중 소수점 아래 10자리
String url = "www.codechobo.com";
System.out.printf("[%s]%n", url); // [www.codechobo.com]
System.out.printf("[%20s]%n", url); // [ www.codechobo.com]
System.out.printf("[%-20s]%n", url); // [www.codechobo.com ]
System.out.printf("[%.8s]%n", url); // [www.code] 8글자 부분출력
1. import문 추가
import java.util.*;
2. Scanner 객체의 생성
Scanner scanner = new Scanner(System.in);
3. Scanner 객체를 사용
int num = scanner.nextInt(); // 화면에서 입력받은 정수를 num에 저장
String input = scanner.nextLine(); // 화면에서 입력받은 내용을 input에 저장
int num = Integer.parseInt(input); // 문자열(input)을 숫자(num)로 변환
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int num2 = scanner.nextInt();
System.out.println(num);
System.out.println(num2);
String input = scanner.nextLine();
int num3 = Integer.parseInt(input); System.out.println(num3);
최대값 + 1 --> 최소값
최소값 - 1 --> 최대값
기본형과 참조형 간의 형변환은 불가능하다.
자동 형변환
표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중에 표현범위가 더 넓은 쪽으로 형변환된다.
char와 short는 둘 다 2byte의 크기 이지만 범위가 서로 달라서 자동 형변환이 수행될 수 없다.
문자와 숫자간의 변환
숫자 + '0' --> 문자
문자 - '0' --> 숫자
문자열로의 변환
숫자 + "" --> 문자열
문자 + "" --> 문자열
문자열을 숫자, 문자로 변환
Integer.parseInt("문자열") --> 숫자
"문자열".charAt(0) --> 문자
String url = "www.codechobo.com";
float f1 = .10f; // 0.1
float f2 = 1e1f; //10.0
float f3 = 3.14e3f;//3140.0
double d =1.23456789;//1.23456789
System.out.printf("f1=%f, %e, %g%n", f1, f1, f1);
//0.100000, 1.000000e-01, 0.100000
System.out.printf("f2=%f, %e, %g%n", f2, f2, f2);
// 10.000000, 1.000000e+01, 10.0000
System.out.printf("f3=%f,%e,%g%n",f3,f3,f3);
//3140.000000, 3.14000e+03, 3140.00
System.out.printf("d=%f%n", d);
//d=1.234568
System.out.printf("d=%14.10f%n",d);
//d= 1.2345678900 전체14자리 중 소수점10자리
System.out.printf("[12345678901234567890]%n");
//[12345678901234567890]
System.out.printf("[%s]%n",url);
//[www.codechobo.com]
System.out.printf("[%20s]%n",url);
//[ www.codechobo.com]
System.out.printf("[%-20s]%n",url);
//[www.codechobo.com ]
System.out.printf("[%.8s]%n",url);
//[www.code] 왼쪽에서 8글자만 출력
[참고 문헌]
https://velog.io/@tone8943/%EC%9E%90%EB%B0%94%EC%9D%98%EC%A0%95%EC%84%9D-2%EC%9E%A5
https://velog.io/@pjoon357/%EC%9E%90%EB%B0%94%EC%9D%98-%EC%A0%95%EC%84%9D-2%EC%9E%A5-%EC%A0%95%EB%A6%AC