※ 시작하기 앞서 java study 카테고리 자료는 YOUTUBE에 남궁성 강사님의 자바의정석 영상을 가지고
공부한 내용을 정리한 것이며 상업적 목적은 전혀 없음을 알립니다.
변수(variable) 란
하나의 값을 저장할 수 있는 메모리 공간
메모리(RAM)에 있는 공간의 주소인 메모리 주소에 이름을 줘서 다루는 게 변수이다.
변수는 단 하나의 값만 저장할수 있기 때문에 기존에 있던 값에 새로운 값을 저장하면 기존에 있던 값은 사라진다.
변수의 선언
변수의 선언 이유
-값(data)을 저장할 공간을 마련하기 위해서
변수의 선언방법
변수타입 변수이름
ex) int age ; // 정수 (int) 타입의 변수 age를 선언
변수에 값 저장하기
int age; // 정수(int)타입의 변수 age를 선언
age = 25; // 변수 age에 25를 저장
변수의 초기화 - 변수에 처음으로 값을 저장하는 것
int x = 0; //변수 x를 선언 후, 0으로 초기화
int y = 5; //변수 y를 선언 후, 5로 초기화
int x = 0, y = 5; // 위의 두 줄을 한 줄로 바꿈
변수는 클래스 변수, 인스턴스 변수, 지역변수가 있다.
변수의 값 읽어오기
변수의 값이 필요한 곳에 변수의 이름을 적는다.
int year = 0, age = 14; // 변수에 값을 저장하여 변수를 초기화해준다.
year = age + 2000; // 변수의 값이 필요한곳에 변수이름을 적어준다.
year = 14 + 2000;
year = 2014;
변수의 타입
변수의 타입은 저장할 값의 타입에 의해 결정된다.
변수, 상수 ,리터럴
변수 (variable) - 하나의 값을 저장하기 위한 공간
상수 (constant) - 한 번만 값을 저장 가능한 변수
리터럴 (liteeral) - 그 자체로 값을 의미하는 것
int score = 100;
score = 200;
final int MAX = 100; // MAX는 상수 이기에 한 번만 값을 저장할수 있다.
MAX = 200; // 한번만 저장할수 있기에 ERROR가 뜬다.
char ch - 'A'; // 이문장에 변수는 ch 리터럴은 'A'이다
final String str = 'abc'; //이문자에 상수는 str 리터럴은 'abc이다'
리터럴의 접두사와 접미사
문자열 = " " 큰 따옴표를 붙인다.
문자형 = ' ' 작은따옴표를 붙인다. 개행 문자(\n) 줄 바꿈 문자라 고도한다.
tap이나 backspace에도 역 슬래쉬(\)를 달아줘야 한다.
실수형 = f (float), d(double) 있으며 d는 생략 허용
정수형 = L(long) , int 타입이 있으며 L은 숫자 1 하고 혼동하기 쉽기 때문에 대문자 L로 쓰는 게 좋다.
논리형 = false, true 란 리터럴을 가진다.
boolean power = true;
char ch = 'A';
String str = "ABC";
byte b = 127; // int 타입
byte b = 128; // error
int i = 100; //10진수
int oct = 0100; //8 진수
int hex = 0x100; //16진수
long I = 10_000_000_000L; // int 타입의 최대값이 20억정도니 20억이 넘는건 long 타입에 넣는다.
// int타입을 넘으니 L이 생략 불가능, 숫자 사이의 밑줄은 JDK 1.7부터 도입
// 100억같이 큰숫자를 알아보기 쉽게 하려 사용한다.
long I = 100; // 생략가능
float f = 3.14f; // 생략 불가
double d = 3.14d; // 생략 가능
10. == 10.0
.10 == 0.10
10f == 10.0f
le3 == 1000.0d
변수와 리터럴의 타입 불일치
범위가 '변수 > 리터럴'인 경우, OK
int i = 'A'; // int > char
long I = 123; // long > int
double d = 3.14f; // double > float
int i = 30_000_000_000; // int의 범위 (±20억) 벗어나서 error가 뜬다 "변수 < 리터럴"
long I - 3.14f; // long < float
float f = 3.14; // float < double
byte, short 변수에 int 리터럴 저장 가능
byte, short 타입은 리터럴이 없다 그러니 int 타입으로 저장한다.
byte b = 100; // byte의 범위 (-128 ~ 127) 에 속함
byte b = 129; // 타입의 범위를 넘으면 error가 난다.
문자, 문자열 리터럴 문자열 결합
char ch = 'A';
char ch = 'AB'; // error 작은 따음표 안에 두개 이상의 문자를 묶을수 없다
String s = "ABC"; // 큰 따음표 안에 연속된 여러 문자가 있는걸 문자열
String s1 = "AB"; //String은 자바에서 제공하는 클래스
String s2 = new String("AB"); // 본래 이렇게 써야하는데 자주쓰여 생략된거
String S1 = "A" + "B"; // "AB"
String S2 = "" + 7 // "" + "7" -> "7" 문자열에 숫자를 결합하면 숫자는 문자열이 된다.
char ch = ''; // error
두 변수의 값 교환하기
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)
-기본형 8개를 제외한 나머지가 참 조형이다.(String, System 등)
-참조형은 메모리 주소를 저장한다 (4 byte 또는 8 byte)
참조형은 기본형과 달리 변수의 크기가 32bit JVM에선 4 byte이고 표현할 수 있는 최댓값은 대략 40억 정도이다
64bit JVM에선 8 byte이고 표현할 수 있는 최댓값은 대략 40X40 억 정도이다
Date today; // 참조형 변수 today를 선언
today = new Date(); // today에 객체의 주소를 저장 (객체생성)
기본형 (Primitive type) - 종류와 크기
논리형 - true와 false 중 하나를 값으로 갖으며, 조건식과 논리적 계산에 사용된다.
문자형 - 문자를 저장하는 데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다.
정수형 - 정수 값을 저장하는데 사용된다. 주로 사용하는 것은 int와 long(아주 큰 정수를 다룰 때 사용)이며
byte는 이진 데이터를 다루는 데 사용되며
short은 c 언어와의 호환을 위해 추가되었다.
정수형의 default타입은 int다
실수형 - 실수 값을 저장하는 데 사용된다. float와 double이 있다.
실수형의 default타입은 double이다
bit와 컴퓨터 2진수 표현 원리
https://www.joongang.co.kr/article/22841133#home
형식화된 출력 - printf()
println()의 단점 - 출력 형식 지정 불가
실수의 자릿수 조절 불가
10 진수로만 출력된다.
System.out.println(0x1 A); // 26 (10진수로 출력)
printf()로 출력 형식 지정가능
System.out.printf("%2f", 10.0/3); //3.33 %2f를 통해 소수점 둘째자리까지 출력하라고 표현할수 있다.
System.out.printf("%d", 0x1A); //26 %d는 정수 10진수로 출력하라
System.out.printf("%x", 0x1A); //1A %x는 16진수로 출력하라는 뜻
System.out.printf("[%5d]%n", 10); //[ 10]정수 5자리에 10을 의미한다
System.out.printf("[%-5d]%n", 10); //왼쪽정렬
System.out.printf("[%05d]%n", 10); //[00010]정수 5자리에 빈자리에 0을 채운다.
System.out.printf("d=%14.10f%n", d); //전체 14자리 중 소수점 아래 10자리 빈자리는 0으로 채운다.
System.out.printf("[%s]%n", url); //[www.google.com]
System.out.printf("[%16s]%n", url); //[ www.google.com]
System.out.printf("[%,8s]%n", url); //[www.goog]
포맷 스트링 공격(알아두면 좋을 거 같은 정보) http://wiki.hash.kr/index.php/%ED%8F%AC%EB%A7%B7%EC%8A%A4%ED%8A%B8%EB%A7%81_%EA%B3%B5%EA%B2%A9#cite_note-fs-3
'java study' 카테고리의 다른 글
#6 연산자 (0) | 2022.05.26 |
---|---|
#5 타입간의 변환방법 (0) | 2022.05.26 |
#4 정수형의 오버플로우 (0) | 2022.05.26 |
# 3 화면에서 입력 받기 -Scanner (0) | 2022.05.24 |
#1 JAVA란 (0) | 2022.05.23 |