이글은 백기선님 스터디 할래? 스터디를 뒤늦게 따라간 기록입니다.
스터디할래 링크 >> https://github.com/whiteship/live-study
여기 없는내용은 스터디 할래 강의 내용 혹은 제가 java Doc보고작성하거나 예제를 만들어 추가했습니다.
그외는 같이 출처가 써있습니다.
타입추론, var
1. 개발자가 명시하지 않아도 컴파일러가 변수의 타입을 대입된 리터럴로 추론하는것. java10
2. 초기화 값이 있는 지역변수 로만 선언이 가능
자료형 (Data Type)
기본자료형
= Primitive type= 원시타입
1. 8가지 기본자료형
정수: byte, short, int, long
실수: float, double
문자: char
참거짓:boolean
2. 기본값이 있어 Null 존재 안함, Null이 필요하면 래퍼클래스사용
3. 실제값 저장 하는 공간 Stack
1. 1byte는 8it
2. 1bit당 한가지씩 표현가능.
2byte = 16진수
0000 0000 0000 0000
숫자형은 맨 앞 1bit 를 가지고 음수 or 양수 : singed // 1.8 이전까지 unsinged는 없다.
문자 char형은 예외
char 1111 1111 1111 1111 10진수값 65535
자바 유니코드 지원.
shot 1111 1111 1111 1111 10진수값 -1
float
1bit : 부호 8bit: 지수 23비트 : 가수
부동소수점(浮動小數點, floating point) 또는 떠돌이 소수점 방식은 실수를 컴퓨터상에서 근사하여 표현할 때 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것
float number = 0f;
for(int i =0;i<10;i++){
number +=0.1f
}
출력 number
1.0000001
>> 돈계산 할때 float, double 하면안되는이유. 2의 배수가 아닌이상 근사치로 계산하기 때문
BigDecimal 사용.
BigDecimal number = BigDecimal.ZERO;
for(int i =0;i<10;i++){
number = number.add(BigDecimal.valueOf(0.1)); //<< 사실상 2줄.. 멀티쓰레드.. 레이스컨디션..주의
}
출력 number
3. JVM 스택이 4Byte 단위로 저장 (2^8 = 8*4 =32bit)
int 보다 작은 자료형 값 계산시 int형으로 형변환 되서 연산 수행
cf) 멀티스레드 레이스컨디션 .. : 멀티스레드 동시 접근
싱글톤.. 더블체크드 락킹. ..
public class App{
private static App app;
public static App getInstance(){
if(this.app =null){
this.app = new App(); // 두번 만들수 있다. ....
}
return app;
}
}
오버플로우 overflow
int 21억.... 22억 안됨
int million = 100000000;
int a = 21 * million;
int b = a + million; // 나타낼수 있는 범위 넘어감. -2094967296 한바뀌돌아요~
cf)
Integer.toUnsignedString(unsigned); //22억 //unsinged로 취급한다.
BigInteger bigInteger = new BigInteger(a + million); //biginteger 사용.
참조형타입
Reference Type
1. 기본형 제외
2. stack 에는 주소, 데이터는 heap에 저장
변수명 작명규칙
1. 대소문자 구분
2. 숫자로 시작안됨
3. $, _ 이외 특수문사 사용불가
4. 키워드는 변수 사용불가
배열
int[] odds = {1, 3, 5, 7, 9};
int[][] arrays;
arrays = new int[1][5]
int[][][][] a = new int[2][2][2][3];
크기는 2*2*2*3 = 24
배열 참고. b-programmer.tistory.com/225
리터럴
"문자 그대로", 고정된 값을 갖는 소스코드 표현형태
실수 리터럴 : 소수점 형태나 지수 형태로 표현한 값
double f =0.1234f;
double g = 1234E-4d;
16진수 0x
2진수
문자리터럴 : '' 로 문자를 표현한다.
char a = 'H';
int a = 1_000_000;
숫자표현시 언더바 로 단위표현가능(1.8)
프로모션 과 캐스팅
byte < short < int < long < float < double < String
<----정수형 변수----> <-실수형 변수->
프로모션 : 자동형편환
int a = 10;
float b = a;
출력 : a = 10, b = 10.0 >> 더큰자료형에 더 작은 자료형을 넣음.
캐스팅 : 명시적 형편환
float a = 10;
int b = a; << 컴파일에러
int b = (int)a;
출력 : a=10.0, b=10
Boxing, Unboxing
Boxing : 프리미티브 -> Wrapper 클래스로 바꿔줌
Unboxing : Wrapper->프리미티브
묵시적 boxing : 프리미티브 -> Wrapper 명시 묵시
int data = 4;
Integer boxing = new Integer(data);
int unboxing = data.intValue();
Integer Implied boxing = data;
스코프와 라이프타임
스코프 : 변수에 접근할수 있는영역
인스턴스 변수 | 클래스변수 | 로컬변수 |
클래스 내부, 인스턴스 생성시 생성 - int x, y; |
클래스내부, 클래스 메모리 올라갈때 생성 - final static int a = 4 |
변수 선언문 수행시 - 메서드, 생성자, 초기화블럭 내부 |
scope:정적메서드 제외 인스턴스 전체 | 클래스 전체 | 선언된 블록내 |
lifetime: 객체 메모리 남아있을떄 | 클래스가 메모리 로드되는 동안 | 컨트롤이 선언된 블록 떠날때 까지 |
프리미티브 레퍼런스 비교 : gbsb.tistory.com/6
리터럴 : mine-it-record.tistory.com/100
스코프, 라이프타임: league-cat.tistory.com/411
타입추론catch-me-java.tistory.com/19
2주차 과제: 자바 데이터 타입, 변수 그리고 배열 #2
목표
자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
학습할 것
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
'JAVA > Basic' 카테고리의 다른 글
[스터디할래? Java 06]상속 (0) | 2021.05.14 |
---|---|
[스터디할래? Java 05] 클래스_ BinrayTree_DFS,BFS (0) | 2021.04.27 |
[스터디할래? Java 04] 제어문 (0) | 2021.04.14 |
[스터디할래? Java 03] 연산자 Operator (0) | 2021.04.14 |
[스터디할래? Java 01] JVM 이란 무엇인가? (0) | 2021.04.13 |