자바의정석 2장

서현우·2022년 3월 9일
0

자바의정석

목록 보기
2/22

변수(variable)

하나의 값을 저장할 수 있는 메모리 공간

변수의 선언

1.변수의 선언 이유

  • 값(data)을 저장할 공간을 마련하기 위해서

2.변수의 선언 방법

변수타입 변수이름;
int age;

변수에 값 저장하기

1)변수에 값 저장하기
int age; //int타입 변수 age를 선언
age = 25; //변수 age에 25를 저장

2)변수의 초기화 
변수에 처음으로 값을 저장하는 것
int x = 0, y = 5; //변수 x, y를 선언 후 0, 5로 초기화

변수의 타입

1)변수의 타입은 저장할 값의 타입에 의해 결정된다.
int age = 25;
age = 3.14; //에러

2)저장할 값의 타입과 일치하는 타입으로 변수를 선언.
char ch = '가'; 
double pi = 3.14;

값의 타입

- 값(data)  

   - 문자 - char

   - 숫자 
      정수 - byte, short, int, long
      실수 - float, double

   - 논리 - boolean

변수, 상수, 리터럴

- 변수(variable) 하나의 값을 저장하기 위한 공간
- 상수(constant) 한 번만 값을 저장 가능한 변수
- 리터럴(literal) 그 자체로 값을 의미하는 것
int score = 100; //score는 변수, 100은 리터럴
final int MAX = 200; //MAX는 상수, 200은 리터럴

리터럴의 접두사와 접미사

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)

변수와 리터럴의 타입 불일치

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 + 문자열 --> 문자열

두 변수의 값 교환하기

int x = 10, y = 20;
int tmp; //1. 빈 컵
tmp = x; //2. x의 값을 tmp에 저장
x = y; //3. y의 값을 x에 저장
y = tmp; //4. tmp의 값을 y에 저장

기본형과 참조형

기본형(Primitive type)

  • 오직 8개(boolean, char, byte, short, int, long, float, double)
  • 실제 값을 저장

참조형(Reference type)

  • 기본형을 제외한 나머지(String, System 등 무한개)
  • 메모리 주소를 저장(4 byte or 8 byte)
    Date today; //참조형 변수 today 선언
    today = new Date(); //today에 객체의 주소를 저장

기본형(Primitive type) - 종류와 크기

  • 논리형 - true/false, 조건식과 논리적 계산에 사용
  • 문자형 - 문자를 저장, 변수 당 하나의 문자만을 저장할 수 있다(여러문자는 String)
  • 정수형 - 정수 값을 저장, 주로 int, long 사용, byte는 이진 데이터를 다루는데 사용
  • 실수형 - 실수 값을 저장, float와 double

기본형 표현범위

  • n비트로 표현할 수 있는 값의 개수 : 2^{n}개
  • n비트로 표현할 수 있는 부호없는 정수의 범위 : 0 ~ 2^{n} - 1
  • n비트로 표현할 수 있는 부호있는 정수의 범위 : -2^{n-1} ~ 2^{n-1} - 1

byte -2^{7} ~ 2^{7} - 1
short -2^{15} ~ 2^{15} - 1
char 0 ~ 2^{16} - 1
int -2^{31} ~ 2^{31} - 1
long -2^{63} ~ 2^{63} - 1
float 정밀도 7자리
double 정밀도 15자리

Printf()의 지시자

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글자 부분출력

화면에서 입력받기

Scanner

  • 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스

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);
       

계수기(counter)

오버플로우 : 표현가능한 범위는 넘는 것

최대값 + 1 --> 최소값
최소값 - 1 --> 최대값

타입간의 변환방법

  1. 문자와 숫자간의 변환
    숫자 + '0' --> 문자
    문자 - '0' --> 숫자
  2. 문자열로의 변환
    숫자 + "" --> 문자열
    문자 + "" --> 문자열
  3. 문자열을 숫자, 문자로 변환
    Integer.parseInt("문자열") --> 숫자
    "문자열".charAt(0) --> 문자
예제2-9

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글자만 출력
profile
안녕하세요!!

0개의 댓글