일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- json
- jsp
- REACT
- jpa
- lightsail
- Docker
- SpringBoot
- 알고리즘
- vue
- java
- gradle
- ES6
- JavaScript
- jQuery
- 메서드
- nginx
- spring
- 맥길대학교
- Flutter
- 에러
- Keycloak 17.0.1
- arraylist
- keycloak
- 현장학습
- 자바스크립트
- vue.js
- 글로벌
- 인텔리제이
- aws
- 스프링
- Today
- Total
korean IT student
[Java-Live-Study] 2주차 - 자바 데이터 타입, 변수 그리고 배열 본문
목표
자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
학습할 것
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
1. 프리미티브 타입 종류와 값의 범위 그리고 기본 값
타입 | 기본값 | 값의 범위 | 값의 크기 | |
정수형 | byte | 0 | -128 ~ 127 | 1byte |
short | 0 | -32,768 ~ 32,767 | 2byte | |
int | 0 | -2,147,483,648 ~ 2,147,483,647 |
4byte | |
long | 0L | 9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 8byte | |
실수형 | float | 0.0f | (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값 | 4byte |
double | 0.0 | (1.7 X 10-308) ~ (1.7 X 10308) 의 근사값 | 8byte | |
문자형 | char | '\u0000' | 0 ~ 65,535 | 2byte |
논리형 | boolean | FALSE | false, ture | 1byte |
2. 프리미티브 타입과 레퍼런스 타입
윈시타입(Primitive Type)
- primitive type은 실제 데이터 값을 저장하는 타입
- primitive type 값은 기본값이 있기 때문에 null이 존재 하지 않는다.
- 실제 값을 저장하는 공간으로 stack 메모리에 저장된다.
- 만약 값의 범위를 벗어나면 컴파일 에러가 발생한다.
참조타입(Reference Type)
- class, interface, enum, array, String type
- 원시타입을 제외한 모든 타입은 참조형타입
- 빈 객체를 의미하는 null 존재
- 값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 Heap 메모리에 저장
int a = 3;
int b = 5;
Car c = new Car("KIA", 30);
위의 코드를 메모리에 저장되는 모습을 이미지화 시켜보자면 다음과 같다
3. 리터럴
- 데이터 그 자체를 의미한다. 변수에 넣는 변하지 않는 데이터를 의미한다.
- 프로그램에서 직접 표현한 값이다.
- 소스 코드의 고정된 값을 대표하는 용어이다.
- 정수, 실수, 문자, 논리, 문자열 리터럴이 존재한다.
4. 변수 선언 및 초기화하는 방법
자바의 변수는 다음과 같은 종류로 구분할 수 있습니다.
- 인스턴스 변수: 클래스 선언시 static 키워드 없이 선언된 필드입니다. 이 필드는 인스턴스 별로 다른 값을 가질 수 있기 떄문에, 인스턴스 변수라고 불립니다.
- 클래스 변수: 클래스 선언시 static 키워드와 함께 선언된 필드입니다. 이 필드는 모든 인스턴스들이 공유하는 값입니다. 클래스 명으로 접근이 가능하고, 클래스 하나에 한 값이기 때문에 클래스 변수라고 불립니다.
- 로컬 변수: 메서드 선언 사이에 등장하는 변수로 다른 클래스에서 접근할 수 없는 변수입니다. 메서드 영역에서만 임시로 사용되는 변수입니다.
- 매개 변수: 매개 변수는 메서드의 인자로 전달되는 변수를 의미합니다.
인스턴스 변수와 클래스 변수는 멤버 변수라고 통칭하기도 합니다. 멤버 변수는 꼭 초기화를 해주지 않더라도 기본값으로 초기화되지만, 로컬 변수는 반드시 초기화를 해주어야 합니다.
5. 변수의 스코프와 라이프타임
프로그램에서 사용된 변수들은 사용 가능한 범위를 가진다. 그 범위를 변수의 스코프라고 한다.
변수가 선언된 블럭이 그 변수의 사용 범위이다.
변수 타입 | 스코프 | 라이프타임 |
인스턴스 변수 | (static 블록과 static 메서드를 제외한) 클래스 전체 | 객체가 생성되고 객체가 메모리에 살아있는 동안 |
클래스 변수 | 클래스 전체 | 클래스가 초기화되고 프로그램이 끝날 때 까지 |
로컬 변수 | 변수가 선언된 블록내부 | 변수 선언 이후 부터 블록을 벗어날 때까지 |
출처 : https://www.tutorialspoint.com/scope-and-lifetime-of-variables-in-java
6. 타입 변환, 캐스팅 그리고 타입 프로모션
타입변환
- 하나의 타입을 다른 타입으로 바꾸는 것을 타입 변환
- 묵시적 타입 변환(자동 타입 변환), 명시적 타입 변환(강제 타입 변환) 두 가지가 있다.
묵시적 타입 변환(자동 타입 변환)
num1의 결과는 10.0 : double 변수에 int 데이터를 대입함으로 , int 데이터가 double로 자동 타입 변환된다.
num2의 결과는 int 가 표현할 수 있는 범위보다 더 큰 double를 넣으므로 데이터 손실이 발생해서 컴파일 오류가 발생
num3의 결과는 float 와 double 데이터의 산술 연산을 수행한다. float 데이터가 double로 자동 타입 변환된다.
명시적 타입 변환(강제 타입 변환)
result1의 결과는 0.0 : 나눗셈 연산 결과로는 int 형인 0이 반환되지만 double 변수에 결과가 대입될때 0.0으로 자동 변환된다.
result2의 결과는 0.25 : 피연산자 중 하나의 타입이 double 형이 되면, 나눗셈 연산을 위해 나머지 하나의 피 연산자도 double형으로 자동으로 타입 변환이 된다.
7. 1차 및 2차 배열 선언하기
1차 배열 : 타입[] 배열이름 = new 타입[배열길이]; 로 배열 선언과 생성을 동시에 할 수 있다.
배열 길이를 초과하는 인덱스를 사용하면 ArrayIndexOutOfBounds 예외가 발생한다.
길이가 3인 int형 배열 선언 및 생성하고 0번째에는 10을, 1번째에는 100을, 2번째에는 1000을 초기화한다. 그리고 출력한다.
2차 배열 : 타입[][] 배열이름 = new 타입[배열길이][배열길이]; 로 배열 선언과 생성을 동시에 할 수 있다.
2차원 배열은 배열 요소로 1차원 배열을 가지는 배열이다.
int[][] arr = new int[2][3];
8. 타입 추론, var
타입 추론
- 정적 타이핑을 지원하는 언어에서, 타입이 정해지지 않은 변수에 대해서 컴파일러가 변수의 타입을 스스로 찾아낼 수 있도록 하는 기능, 반복되는 타입 선언을 줄여주고, 코드의 가독성을 높여준다.
- java 10에서 타입 추론을 지원하는 var 키워드가 추가되었다.
참고 : https://www.baeldung.com/java-10-local-variable-type-inference
<참고>
'back-end > JAVA' 카테고리의 다른 글
[Java-Live-Study] 4주차 - 제어문 (0) | 2021.08.19 |
---|---|
[Java-Live-Study] 3주차 - 연산자 (0) | 2021.08.16 |
[Java-Live-Study] 1주차 - JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) | 2021.08.03 |
JAVA- Convert Java Object to from JSON (0) | 2020.12.08 |
JAVA - 스트림(stream) (0) | 2020.12.06 |