온라인 자바 스터디 #2 - 자바 데이터 타입, 변수 그리고 배열
by coco3o목표
자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
학습할 것
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
1. 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 총 8가지의 프리미티브 타입을 미리 정의하여 제공한다.
타입 | 할당되는 메모리 크기 | 기본값 | 데이터의 표현 범위 | |
논리형 | boolean | 1 byte | false | true, false |
정수형 | byte | 1 byte | 0 | -128 ~ 127 |
short | 2 byte | 0 | -32,768 ~ 32,767 | |
int(기본) | 4 byte | 0 | -2,147,483,648 ~ 2,147,483,647 | |
long | 8 byte | 0L | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
실수형 | float | 4 byte | 0.0F | (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값 |
double(기본) | 8 byte | 0.0 | (1.7 X 10-308) ~ (1.7 X 10308) 의 근사값 | |
문자형 | char | 2 byte (유니코드) | '\u0000' | 0 ~ 65,535 |
2. 레퍼런스 타입
- 프리미티브 타입을 제외한 타입들이 모두 레퍼런스 타입이다.
- 빈 객체를 의미하는 Null이 존재한다.
- 값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 힙(Heap) 메모리에 저장된다.
타입 | 예시 | 기본값 | 할당되는 메모리 크기 |
배열(Array) | int[] arr = new int[5]; | Null | 4 byte (객체의 주소 값 ) |
클래스(Class) | String str = "test"; Student coco = new Student(); |
||
열거(Enumeration) | |||
인터페이스(Interface) |
3. 리터럴
리터럴이란 ?
소스 코드의 고정된 값을 대표하는 용어다.
int i = 1;
String s = "코코";
double d = 3.14;
boolean b = true;
위와 같이 = 의 오른쪽처럼 값들이 존재한다. 프로그램이 실행되고 끝날때 까지 임의로 변경하지 않는 이상
변경되지 않는다.
이것이 리터럴이다.
상수와 햇갈릴 수 있지만 리터럴과 상수는 조금 다른 개념이다.
상수는 변하지 않는 변수를 뜻한다.
4. 변수 선언 및 초기화 방법
변수란 무엇인가?
말 그대로 변하는 수. 즉, 고정되지 않은 수를 변수라고 한다.
프로그래밍 언어에선 변수란 어떤 수, 문자, 혹은 위치정보를 저장하는 저장 공간을 의미한다.
변수 선언 방법은 간단하다.
- 변수 타입 + 변수이름 + ;
변수 타입은 int, long, float, double 과 같은 변수의 형태를 말하고, 변수이름은 다른 변수와 서로 구분짓기 위해 사용하는 이름이라고 보면 된다. 변수선언 후에 ';'를 넣어주는데, ';'는 프로그래밍 언어에서 명령이 끝났음을 의미한다.
- int num;
int 는 변수타입, num은 변수이름이 된다.
public class Example {
public static void main(String[] args) {
int num1 = 100;
int num2;
System.out.println(num1); // 100
int num2 = num1;
System.out.println(num2); // 100
int num1 = 200;
System.out.println(num1); // 200
}
}
5. 변수의 스코프와 라이프타임
변수의 스코프(Scope)란?
변수에 접근하거나 접근할 수 있는 유효범위/영역
변수의 라이프타임(Lifetime)?
변수가 메모리에서 살아있는 시간
- 변수의 스코프와 라이프타임
Variable Type | Scope(유효 범위) | Life time |
인스턴스 변수 | static 메서드를 제외한 클래스 전체 | 객체가 메모리에 남아있을 때까지 |
클래스 변수 | 클래스 전체 | 프로그램이 끝날때까지 또는 클래스가 메모리에 로드되는 동안 |
지역 변수 | 변수가 선언된 블록내부 | 블록을 벗어날 때까지 |
class Example {
int x, y; //인스턴스 변수
static int result; // 클래스 변수
void add(int a, int b) { // a , b 로컬 변수
x = a;
y = b;
int sum = x + y;
System.out.println("sum = " + sum);
}
public static void main(String[] args) {
Example ex = new Example();
ex.add(10,20);
}
}
6. 타입 변환, 캐스팅 그리고 타입 프로모션
자바에는 두 종류의 타입 변환이 있다.
- 자동 타입 변환 (묵시적)
- 강제 타입 변환 (명시적)
1. 자동 타입 변환 (프로모션)
- 프로그램 실행 도중 자동으로 타입 변환이 일어남.
작은 크기의 타입이 큰 크기를가지는 타입에 저장될 때 발생함
큰 크기 타입 = 작은 크기 타입
타입별 크기 순서 (byte)
byte (1) < short (2) < int (4) < long(8) < float (4) < double (8)
float은 표현 범위가 더 크기 때문에 더 큰 타입으로 들어간다.
byte byNum = 10;
int inNum = byNum; //자동 타입 변환으로 byNum은 int형으로 변환
int inNum = 20;
double douNum = inNum; // 20.0 실수 타입으로 변환하면 .0이 붙은 실수값이 됨
char charVal = 'A';
int inNum = charVal; // A의 유니코드 값인 65가 저장
2. 강제 타입 변환(Casting)
큰 크기의 타입은 작은 타입으로 자동 타입 변환을 할 수 없다.
하지만 강제 타입 변환을 하면 변환할 수 있다.
작은 크기 타입 = (작은 크기 타입)큰 크기 타입
int inNum = 'A'; // 65 저장
char charVal = (char)inNum; // 65에 해당되는 유니코드 문자('A')가 저장
/*실수 타입(float, double)은 정수 타입으로 자동 타입 변환되지 않기 때문에 강제 타입 변환을
*사용해야 함. 소수점 이하 부분은 버려지고 (값 손실), 정수만 저장된다.
double douNum = 3.14;
int inNum = (int)douNum; //정수인 3 저장
7. 1차 및 2차 배열 선언하기
배열이란?
동일 타입의 값을 여러개 취급할 수 있는 기능
인덱스라고 불리는 [ ] 로 감싼 0부터 시작하는 정수를 사용해 배열의 길이나 순서를 나타냄
1차 배열 선언하기
int[] arr = new int[5];
int 배열 선언시 {0, 0, 0, 0, 0} 와 같이 0으로 10개의 값이 초기화됨
1차 배열에 값 넣기
int[] arr = new int[5];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]); //반복문 사용으로 순서대로 값 추출
}
2차 배열 선언하기
int[][] arr = new int[5][3];
arr[0]ㅁㅁㅁ
arr[1]ㅁㅁㅁ
arr[2]ㅁㅁㅁ
arr[3]ㅁㅁㅁ
arr[4]ㅁㅁㅁ
위 처럼 5개의 공간 안에 3개의 칸이 생김
2차 배열에 값 넣기
int[][] arr = new int[5][3];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
arr[2][0] = 7;
arr[2][1] = 8;
arr[2][2] = 9;
arr[3][0] = 10;
arr[3][1] = 11;
arr[3][2] = 12;
arr[4][0] = 13;
arr[4][1] = 14;
arr[4][2] = 15;
8. 타입 추론, var
타입 추론?
타입 추론이란 타입이 정해지지 않은 변수에 대해서 컴파일러가 변수의 타입을 대입된 리터럴로 추론하는 기능을 말한다.
java 10에서 var 라는 지역 변수 타입 추론이 추가되었다.
//자바 9 이하에선 다음과 같이 써야함
String name = "dev-coco";
//자바 10 이상에선 다음과 같이 타입추론, var를 지원한다.
var name = "dev-coco";
주의 * var와 다이아몬드 연산자를 같이 사용하게 되면 컴파일 에러가 발생함 *
var name = new ArrayList<>(); //error
var의 잘못된 사용법
var는 초기화 없이 사용할 수 없다.
var i; // var타입은 초기화값을 선언할 때 명시해줘야함
var 타입 변수에는 null값이 들어갈 수 없다.
var i = null; //var 타입의 초기화 값은 'null'이 될 수 없음
var 타입은 로컬 변수에만 선언이 가능하다.
Lambda Expression에는 명시적인 타입을 지정해줘야 한다.
배열을 선언할 때, var 대신 타입을 명시해줘야 한다.
'🌈Programming > Java' 카테고리의 다른 글
온라인 자바 스터디 #5 - 클래스, 메소드, 생성자 정의, this, 객체 new 키워드 (0) | 2020.12.17 |
---|---|
JUnit 5 소개 (0) | 2020.12.16 |
온라인 자바 스터디 #4 - 제어문 (0) | 2020.12.14 |
온라인 자바 스터디 #3 - 연산자 (0) | 2020.12.11 |
자바 기본 개념 (3) | 2020.12.08 |
블로그의 정보
슬기로운 개발생활
coco3o