JAVA/Basic

[스터디할래? Java 02] 자바 데이터 타입, 변수 그리고 배열

[스터디할래? Java] 목차

이글은 백기선님 스터디 할래? 스터디를 뒤늦게 따라간 기록입니다.

스터디할래 링크 >> 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

프로모션, 캐스팅 : m.blog.naver.com/PostView.nhn?blogId=haejoon90&logNo=220781157092&proxyReferer=https:%2F%2Fwww.google.com%2F 

스코프, 라이프타임: league-cat.tistory.com/411

타입추론catch-me-java.tistory.com/19

원시타입 이론설명 : velog.io/@gillog/%EC%9B%90%EC%8B%9C%ED%83%80%EC%9E%85-%EC%B0%B8%EC%A1%B0%ED%83%80%EC%9E%85Primitive-Type-Reference-Type

박싱, 언박싱  m.blog.naver.com/PostView.nhn?blogId=highkrs&logNo=220530396617&proxyReferer=https:%2F%2Fwww.google.com%2F

 

 


2주차 과제: 자바 데이터 타입, 변수 그리고 배열 #2

목표

자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.

학습할 것

  • 프리미티브 타입 종류와 값의 범위 그리고 기본 값
  • 프리미티브 타입과 레퍼런스 타입
  • 리터럴
  • 변수 선언 및 초기화하는 방법
  • 변수의 스코프와 라이프타임
  • 타입 변환, 캐스팅 그리고 타입 프로모션
  • 1차 및 2차 배열 선언하기
  • 타입 추론, var