이클립스(Eclipse) 단축키
public class Ex2_1 {
public static void main(String[] args) {
System.out.println("Hello"); //sysout(sop) ctrl+space 자동완성
System.out.println("Hello"); //ctrl+alt+↓ 행단위 복사하기
System.out.println("Hello"); //ali+shift+A 컬럼 편집 모드(토글)
System.out.println("Hello"); //println() - 출력 후에 출바꿈 함
System.out.print("Hello"); //print() - 출력 후에 줄바꿈 안 함
// System.out.print("Hello"); //ctrl+/ 행 주석처리(토글)
}
}
템플릿 설정 (예: sysout)
: Windows > preferences > Java-Editor-Templates
단축키 설정
: Windows > preferences > General-Keys > 검색(예: copy line) 및 변경(Ctrl+Alt+Shift+Down)
- 템플릿명(sysout, sop 등) ctrl+space : 자동완성
- ctrl+alt+방향키(↑/↓) : 행단위 복사(줄 복사하여 위/아래 붙여넣음)
- ctrl+D : 행 삭제
- alt+shift+A : 컬럼(column) 편집 모드(토글) => 설정(커서 '+ 모양') / 해제 (커서 '원래대로')
- shift+방향키(↑/↓) : 단어 선택 (in column 편집 모드)
- ctrl+/: 해당 행 주석 처리(토글)
println과 print의 차이: 줄바꿈 유무
사칙연산 출력하기
public class Ex2_1 {
public static void main(String[] args) {
System.out.println(5+3); //덧셈
System.out.println(5-3); //뺄셈
System.out.println(5*3); //곱셈
System.out.println(5/3); //나눗셈
}
}
변수(Variable)란?
: 하나의 값을 저장할 수 있는 메모리 공간(RAM)
- 원래는 메모리 값을 저장할 때 메모리 주소를 이용해야 하는데,
이 메모리 주소는 사람이 기억하기 힘들고 불편하기에 대신, 주소에 변수라는 이름을 붙였다.
- 변수는 단 하나의 값만 저장할 수 있기에, 변수에 새로운 값을 저장하면
기존의 값은 사라지고 새로 저장한 값만 남게 된다.
1) 변수의 선언 이유
: 값(data)을 저장할 공간을 마련하기 위해
2) 변수의 선언 방법
: 변수타입 변수이름;
3) 변수에 값 저장하기 ('='는 등호가 아니라 대입)
int age; //정수(int) 타입의 변수 age를 선언
age=25; //변수 age에 25를 저장
int age=25; //위의 두 줄을 한 줄로
*변수의 선언과 초기화(ㅡ변수에 처음으로 값을 저장하는 것)를 같이 하는 것이 일반적.
[🚨주의] 지연 변수는 읽기 전에 꼭! 초기화 해야 한다.
(변수의 종류(6장): 클래스 변수 / 인스턴스 변수 / 지역변수)
4) 변수의 값 읽어오기
: 변수의 값이 필요한 곳에 변수의 이름을 적는다.
public class VarEx1 {
public static void main(String[] args) {
int x=4, y=2;
System.out.println(x+y); //덧셈
System.out.println(x-y); //뺼셈
System.out.println(x*y); //곱셈
System.out.println(x/y); //나눗셈
}
}
변수의 타입
1) 변수의 타입은 저장해야 할 값의 타입에 의해 결정된다.
2) 저장한 값의 타입과 일치하는 타입으로 변수를 선언
char ch='가'; //char는 문자타입
double pi=3.14; //double은 실수 타입
그렇다면 값의 타입에는 어떤 것이 있을까?
- 값(Data)의 기본형
값 | 문자 | char |
숫자 | 정수 - byte, short, int, long | |
실수 - float, double | ||
논리 | bloolean (true/false) |
상수와 리터럴
- 변수(variable): 하나의 값을 저장하기 위한 공간 (변경 가능)
- 상수(constant): 한 번만 값을 저장 가능한 변수 (변경 불가능)
- 리터럴(literal): 그 자체로 값을 의미하는 것
(=기존의 상수 // 자바에서 정의한 상수의 개념과 구분하기 위해 새롭게 정의한 것이다.)
상수도 변수와 마찬가지로 선언과 초기화 따로따로 가능하다.
하지만, 선언과 초기화를 보통 동시에 하는 것이 일반적!
리터럴의 타입과 접미사
종류 | 리터럴 | 접미사 (대소문자 구별 X) |
논리형 | false, true | 없음 |
정수형 | 123, 0b0101 (0b 2진 접두사), 077, 0xFF, 100L |
L (long) *접미사 없으면 int type |
실수형 | 3.14, 3.0e8, 1.4f, 0x1, 0p-1 | f (float), d (double) *d는 생략 가능 |
문자형 | 'A', '1', '\n' (개행문자) | 없음 |
문자열 | "ABC", "123", "A", "true" | 없음 |
boolean power=ture;
char ch='A'; //''(작음 따옴표)는 문자 하나
String str="ABC" //""(큰 따옴표)는 문자열
byte b=127;
byte b=128; //Error (범위: -128~127)
int i=100; //10진수
int oct=0100; //8진수
int hex=0x100; //16진수
long l=10_000_000_000L; //L 생략 불가, _는 큰 숫자를 표현할 때 알아보기 쉬우라고 사용
long l=100; //L 생략 가능
float f=3.14f; //f 생략 불가 (3.14가 double이 되기 때문)
double d=3.14d; //d 생략 가능
<Quiz!>
1️⃣ 10. (double) → 10.0
2️⃣ .10 (double) → 0.10
3️⃣ 10f (float) → 10.0f
4️⃣ 1e3 (double) → 1000.0
ㄴ e=10^n
*println은 10진수로만 출력되고, 접두사나 접미사는 출력되지 않는다.
변수와 리터럴의 타입 불일치
1) 범위가 '변수>리터럴' 인 경우 → OK
2) 범위가 '변수<리터럴' 인 경우 → Error
3) byte, short 변숫에 int 리터럴 저장 가능
문자와 문자열
char ch='A';
char ch='AB'; // 에러 (문자열은 "")
String s="ABC";
String s1="AB";
String s2=new String("AB");
<알아두기✨>
String은 클래스. 원래는 다음처럼 new 연산자를 써서 객체를 생성해야 하나,
문자열은 워낙 자주 쓰이기에 예외적으로 String에서만 기본형 변수에 값을 작성하는 형태 허용
String s="A";
String s=""; // 빈 문자열(empty string)
char ch=''; // 에러 (홑따옴표는 빈 문자열 표현 불가)
문자열 결합
String s1="A"+"B"; //"AB"
<주의🚨> 문자열 결합
문자열 + any type -> 문자열
any type + 문자열 -> 문자열
System.out.println(""+7+7); // 77
System.out.println(7+7+""); // 14
두 변수의 값 교환하기
int x=10, y=20;
int tmp;
tmp=x; // x의 값을 tmp에 저장
x=y; // x의 값을 y에 저장
y=tmp; // tmp의 값을 y에 저장
기본형과 참조형 (변수의 타입)
▶ 기본형 (Primitive type)
- 오직 8개 (boolean, char, byte, short, int, long, float, double)
- 실제 값을 저장
▶ 참조형 (Reference type)
- 기본형을 제외한 나머지 (String, System 등) // 무한개
- 메모리 주소를 저장 (4 byte 또는 8 byte)
Date today; // 참조형 변수 today를 선언
today=new Data(); // 객체 생성 후, today에 객체의 주소를 저장
<알아두기✨> 참조형 변수는 객체의 주소를 저장하기 위한 것이다.
(객체 관련해서는 Chapter6에서 다룸)
기본형(Primitive type)의 종류와 크기
▶ 논리형 (boolean) - true와 false 중 하나를 값으로 갖으며, 조건식과 논리적 계산에 사용된다.
▶ 문자형 (char) - 문자를 저장하는데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다.
▶ 정수형 - 정수 값을 저장하는데 사용된다. 주로 사용하는 것은 int(보통)와 long(아주 큰 정수)이며,
byte는 이전 데이터를 다루는데 사용되며, short(잘 안 쓰임)은 c언어와의 호환을 위해 추가되었다.
▶ 실수형 - 실수 값을 저장하는데 사용된다. float와 double이 있다.
종류 / 크기 | 1 | 2 | 4 | 8 |
논리형 | boolean | |||
문자형 | char | |||
정수형 | byte | short | int | long |
실수형 | float | double |
- 기본형 표현범위
1byte = 8bit
1bit = 2진수 한 자리 (0 or 1)
n비트로 표현할 수 있는 값의 개수 : 2^n개
n비트로 표현할 수 있는 부호없는 정수의 범위: 0 ~ 2^n-1
n비트로 표현할 수 있는 부호있는 정수의 범위: -2^(n-1) ~ 2^(n-1)-1
전체 비트 중 맨 왼쪽 1bit -> 부호비트(Sign bit): 0이면 양수, 1이면 음수
종류 | 범위 |
byte | -2^7~2^7-1 |
short | -2^15~2^15-1 |
char | 0~2^16-1 |
int | -2^31~2^31-1 (약 20억) |
long | -2^63~2^63-1 (약 800경) *이 이상은 BigInteger 클래스 사용 |
💦 Java에서 숫자타입(정수형, 실수형)은 모두 부호가 있다.
💦 정수형에서는 int가 디폴트 타입(기본).
- 실수형(float, double) 타입 저장 형식
float의 경우, S(1) 부호 | E(8) 지수 | M(23) 가수
-> float는 같은 크기의 정수형인 int보다 훨씬 큰 범위의 수 표현 가능.
(대신, 오차 발생할 수 있음.)
* 정밀도 = 오차 없는 자리수
double의 경우, S(1) 부호 | E(11) 지수 | M(52) 가수
자료형 | 저장 가능한 값의 범위 | 정밀도 | 크기 | |
bit | byte | |||
float | 1.4E-45~3.4E38 | 7자리 | 32 | 4 |
double | 4.9E-324~1.8E308 | 15자리 | 64 | 8 |
💦 실수형에서는 double이 디폴트 타입(기본). (정밀도 때문)
printf()
▶ println()의 단점 ㅡ 출력형식 지정불가
1) 실수의 자릿수 조절 불가
- 소수점 n자리만 출력하려면?
2) 10진수로만 출력된다.
- 8진수, 16진수로 출력하려면?
▶ printf()로 출력형식 지정가능
- printf()의 지시자
지시자 | 설명 |
%b | 불리언(boolean) 형식으로 출력 |
%d | 10진(decimal) 정수의 형식으로 출력 |
%o | 8진(octal) 정수의 형식으로 출력 |
%x, %X | 16진(hexa-decimal) 정수의 형식으로 출력 |
%f | 부동 소수점(floating-point)의 형식으로 출력 |
%e, %E | 지수(exponent) 표현식의 형식으로 출력 |
%c | 문자(character)로 출력 |
%s | 문자열(string)로 출력 |
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진수를 나타내는 별도의 지시자는 없다.
대신, Integer.toBinaryString 메소드 사용
2) 8진수와 16진수에 접두사 붙이기
System.out.printf("%#o", 15); // 017
System.out.printf("%#x", 15); // 0xf
System.out.printf("%#X", 15); // 0XF
3) 실수 출력을 위한 지시자 %f ㅡ 지수형식(%e), 간략한 형식(%g)
float f=123.4567890f
System.out.printf("%f", f); // 123.456787 소수점 아래 6자리
System.out.printf("%e", f); // 1.234568e+02 지수형식
<알아두기✨>
float의 정밀도는 7자리. 따라서, 위의 예에서 7자리 이후 "87" 부분은 의미X.
System.out.printf("%g", 123.456789); // 123.457 간략한 형식(%f)
System.out.printf("%g", 0.00000001); // 1.00000e-8 간략한 형식(%e)
- %전체자리.소수점아래자리f
System.out.printf("[%5d]%n", 10); // [ 10] 오른쪽 정렬
System.out.printf("[%-5d]%n", 10); // [10 ] 왼쪽 정렬
System.out.printf("[%05d]%n", 10); // [00010]
// [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]
<알아두기✨>
지정된 자리수보다 출력될 자리수가 더 클 경우,
잘리는 것이 아니라, 지정된 자리수와 관계없이 저장된 값이 모두 출력된다.
화면으로부터 입력받기
정수형의 오버플로우
타입 간의 변환방법
'Language > JAVA' 카테고리의 다른 글
[자바의 정석] Chapter 5. 배열 (1) | 2023.05.10 |
---|---|
[자바의 정석] Chapter4. 조건문과 반복문 (0) | 2023.05.05 |
[자바의 정석] Chapter3 연산자(Operation) (0) | 2023.05.04 |
자바의 정석 Chapter1 (0) | 2023.02.24 |
자바의 정석 Ch1 (0) | 2022.07.17 |