안녕하세요!

FE 개발자 유진주입니다.

Language/JAVA

[자바의 정석] Chapter2. 단축키/변수/상수/리터럴/문자열/기본형과 참조형/printf

ypearl 2023. 4. 6. 11:48

이클립스(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