www.notion.so/77b364c091ea4d81a74042331b26dc1e
목표
- 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
학습할것
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
프리미티브 타입 종류와 값의 범위 그리고 기본값
- 프리미티브 타입의 종류
- 자바에는 8가지의 타입이 있으며 논리형, 문자형, 정수형, 실수형으로 나뉘어져있다.
-
논리형
- boolean
- true와 false중 하나를 값으로 가진다.
- 나머지 타입들과 연산이 불가능함.
- 크기는 1byte
- 값의 범위는 false, true
- 기본값은 false
- boolean
-
문자형
- char
- 문자를 저장한다.
- 변수에 하나의 문자만 저장가능
- 다만 내부적으로 유니코드 ( 정수 ) 로 저장하기 때문에 정수형과 별반 다르지 않다.
- 그렇기에 정수형 또는 실수형과 연산이 가능하다.
- 크기는 2byte
- 값의 범위는 '\u0000' ~ '\uffff'
- 기본값은 \'u0000'
- char
-
정수형
- byte, short, int, long
- 정수를 저장함
- int를 주로 사용하며 ( 기본 자료형 )
- 크기는 4byte
- 값의 범위는 -2,147,483,648 ~ 2,147,483,647
- 기본값은 0
- byte는 이진데이터를 사용할때 쓰고
- 크기는 1byte
- 값의 범위는 -128 ~ 127
- 기본값은 0
- short는 C언어와의 호환을 위해 사용
- 크기는 2byte
- 값의 범위는 -32,768 ~ 32767
- 기본값은 0
- long은 int 이상의 범위가 필요할때 사용
- 크기는 8byte
- 값의 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
- 기본값은 0L
- byte, short, int, long
-
실수형
- 실수를 저장하는데 사용 주로 double ( 기본 자료형 ) 을 사용한다.
- double
- 크기는 double은 8byte 다.
- 값의 범위는 4.9E-324 ~ 1.8E308
- 기본값은 0.0
- float
- 크기는 float은 4byte
- 값의 범위는 1.4E-45 ~ 3.4E38
- 기본값은 0.0F
- double
- 실수를 저장하는데 사용 주로 double ( 기본 자료형 ) 을 사용한다.
-
- 자바에는 8가지의 타입이 있으며 논리형, 문자형, 정수형, 실수형으로 나뉘어져있다.
프리미티브 타입과 레퍼런스 타입
- 프리미티브 타입
- 실제 값을 저장한다.
- 프리미티브 타입도 객체로 사용할때가 있다.
- Boxing을 통해 프리미티브 타입을 감싼다고해서 Wrapper Class 라고 불린다.
- 프리미티브 타입과 달리 주소를 값으로 가지고 있기 때문에
- Null을 컨트롤 할수 있다.
- Boxing을 통해 프리미티브 타입을 감싼다고해서 Wrapper Class 라고 불린다.
- 레퍼런스 타입
- 값이 저장되어 있는 주소를 값으로 저장한다.
- 위에서 본 8개의 프리미티브 타입을 제외한 나머지 타입
리터럴
-
변수와 상수는 값을 저장할수 있는 공간을 의미
-
하지만 상수는 변경이 불가능하다.
-
상수는 변경이 불가능하므로 그자체로 값이라고 볼수 있다.
-
그래서 상수의 다른이름은 리터럴
-
리터럴은 값 그자체를 일컫기 때문이다.
-
보통 String과 같은 불변 클래스들은 값의 변경이 가능하다.
-
하지만 불변클래스는 값이 변할수 없는 클래스인데 어떻게 가능한 것일까 ?
- 불변 클래스는 값이 불변이기 때문에 변경할수가 없다.
- 그래서 새로운 스택을 만들어서 그곳에 새로 변경된 값을 저장한후
- 불변클래스는 담고있는 주소의 값을 새로만든 스택의 주소로 바꾼다.
- 이렇게해서 값을 변경시킨다.
변수 선언 및 초기화하는 방법
-
변수 선언
- 변수의 타입과 이름을 적는다.
- 예) int count; // int 는 변수타입 count는 변수의 이름
- 변수타입은 변수에 저장될 값이 어떤 타입인지 정하는 것이고
- 변수이름은 변수에 붙인 이름이다.
-
변수 초기화
-
예) int count = 10; // int타입의 변수를 count란 이름으로 명명하고 10으로 초기화
-
보통 선언과 초기화를 동시에 한다.
-
생략하는 경우도 있지만 사용하기 전에 적절한 값으로 초기화 하는것이 좋다.
-
명시적 초기화
- 위와 같은 설명이 바로 명시적 초기화다.
-
초기화 블럭
- statc 초기화 블럭이나 인스턴스 초기화 블럭에서 초기화를 하면 된다.
- 생성자보다 인스턴스 초기화 블럭이 먼저 수행된다.
-
생성자 초기화
- 변수를 선언만 해놓고 초기화는 하지 않고 생성자에서 초기화 하는 방법.
-
변수의 스코프와 라이프타임
- 클래스 변수, 인스턴스 변수, 지역 변수 총 3가지가 있다.
-
클래스 변수
- 선언 위치는 클래스 영역
- 생성시기는 클래스가 메모리에 올라갈 때
- 타입 앞에 static이 붙는다.
- 클래스는 독립적인 저장공간을 갖지 않으므로 모든 인스턴스는 같은 값을 가진다.
-
인스턴스 변수
- 선언 위치는 클래스 영역
- 생성시기는 인스턴스가 생성되었을 때
- 클래스 변수와 다르게 static이 붙지는 않는다.
- 인스턴스는 독립적이므로 항상 다른값을 가질수 있다.
-
지역 변수
- 선언 위치는 클래스 영역이 아닌 ( 메소드,생성자,초기화 블랙 내부 ) 이다.
- 생성시기는 변수 선언문이 수행되었을 때
- 인스턴스 변수와 마찬가지로 static이 붙지 않는다.
- 메소드 블럭을 벗어나면 소멸한다.
-
타입 변환, 캐스팅 그리고 타입 프로모션
-
타입 변환
- 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
-
캐스팅
double d = 99.9; int count = (int)d;- 캐스팅은 이렇게 명시적으로 변경해준다.
-
타입 프로모션
- 조건이 맞으면 컴파일러가 자동으로 형변환을 시켜준다.
- 조건
- 그 값이 형변환할 타입의 값을 초과하지 않는 것
- 그리고 서로 연산이 가능한 타입이어야 한다는 것이다.
- 프리미티브타입과 레퍼런스타입은 서로간에 타입 변환이 안된다.
- 값의 범위가 작은 타입에서 큰 타입으로 변경할때도 가능
1차 및 2차배열 선언하기
-
1차 배열 선언
- 타입[] 변수이름; // 선언
- 변수이름 = new 타입[길이]; // 생성
- 선언만 했을경우 아직 메모리에 저장되지 않는다 왜냐면 길이가 정해지지 않았기 때문이다.
- new에 의해 생성되거나 아예 선언과 동시에 생성할 경우에 메모리에 저장될 공간이 생성된다.
- 그리고 각 값들은 int의 기본값인 0으로 초기화되고 ( new로 생성까지만 했을 경우 )
- 그 이후나 값을 넣어주거나 선언과 동시에 값을 넣을 경우에는 배열에 그 값이 담긴 메모리 주소가 저장된다.
- 배열의 길이에는 0도 포함된다.
-
2차 배열 선언
- 타입[][] 변수이름;
- 2차배열은 배열에 각각 배열의 주소가 담긴다.
타입추론, var
-
타입 추론
- 코드 작성당시 정해지지 않은 타입을 컴파일러가 유추하는 것
- java 9버전 이하에서는 generic과 lambda를 사용할때 쓰이고
- java 10버전부터 var이라는 local variable한 키워드가 추가되었다.
- 이러한 타입추론 덕분에 제네릭타입에 타입을 명시하지 않아도 된다.
-
var
- 지역변수로서만 사용가능하다.
- 선언과 동시에 초기화가 필수
- 다이아몬드 연산자와 같이 사용할수 없다
- java 10버전 이상부터 사용가능하며 그 이하버전은 lombok 설치시 사용가능.
- 예 )
참조
'백선생님 온라인스터디' 카테고리의 다른 글
6주차 상속 (0) | 2021.01.10 |
---|---|
4주차 - 제어문 (0) | 2021.01.09 |
3주차 연산자 (0) | 2021.01.07 |
연산자 (0) | 2020.11.28 |
스터디 1주차 - JVM (0) | 2020.11.15 |