본 게시글은 백기선님의 자바 라이브 스터디를 진행하기 위한 정리 자료입니다
2주차 자바 데이터 타입, 변수 그리고 배열
Primitive Type 종류와 값의 범위 그리고 기본 값
Primitive Variable
- 8가지의 기본형 타입을 미리 정의하여 제공한다
- Java 8에는 unsigned 가 지원된다.
- 사칙 연산이 따로 지원이 된다
- divideUnsigned 나누기
- remainderUnsigned 나머지
- compareUnsigend 비교연산
**System.out.println("Byte min="+Byte.MIN_VALUE+" max="+Byte.MAX_VALUE);
System.out.println("Short min="+Short.MIN_VALUE+" max="+Short.MAX_VALUE);
System.out.println("Integer min="+Integer.MIN_VALUE+" max="+Integer.MAX_VALUE);
System.out.println("Long min="+Long.MIN_VALUE+" max="+Long.MAX_VALUE);
System.out.println("Float min="+Float.MIN_VALUE+" max="+Float.MAX_VALUE);
System.out.println("Double min="+Double.MIN_VALUE+" max="+Double.MAX_VALUE);
System.out.println("Character min="+(int)Character.MIN_VALUE+" max="+(int)Character.MAX_VALUE);
int unsignedInt = Integer.parseUnsignedInt("4294967295");
System.out.println("unsignedInt = "+Integer.toUnsignedString(unsignedInt));
long unsignedLong = Long.parseUnsignedLong("17916881237904312345");
System.out.println("unsignedLong = " + Long.toUnsignedString(unsignedLong));**
- 결과
Short min=-32768 max=32767
Integer min=-2147483648 max=2147483647
Long min=-9223372036854775808 max=9223372036854775807
Float min=1.4E-45 max=3.4028235E38
Double min=4.9E-324 max=1.7976931348623157E308
Character min=0 max=65535
unsignedInt = 4294967295
unsignedLong = 17916881237904312345
Reference Type
참조형 타입(Reference Type)
- 기본형 타입을 제외한 타입들이 모두 참조형 타입이다
- null 값이 존재한다
- 주소값을 저장하는 공간으로 Heap에 저장된다
ReferenceType 자료형 보다 기본형 자료형을 선호하는 이유
- 산술 연산이 가능하다
- 매개변수로 객체가 요구되지 않을때
- 기본값을 주어져서 저장할때
- 객체간의 비교가 없을때
성능상의 이점이 있을때
-
접근 속도
-
기본 자료형은 스택 메모리에 값이 존재하고 래퍼 클래스는 스택 메모리에 참조 값이 있다. 실제 값은 heap 에 존재하게 된다. 값을 필요할 때마다 unboxing 과정을 거쳐야 하기 때문에 Primitive Type과 비교할때 접근 속도가 느려지게 된다.
-
-
차지하는 메모리의양
- 64비트 컴퓨터기준
리터럴
- 리터럴이란 프로그램에서 직접 표현한 값인 데이터 그 자체를 뜻한다 변수에 넣는 변하지 않는 데이터이다
int i = 2020;
- int 앞에 i는 변수, 2020은 리터럴이다.
- 2020과 같이 변하지 않는 데이터들을 리터럴이라고 부른다
int i = 2020;
float f = 0.1f;
boolean b = true;
char c = 'A';
String str = "String";
변수 선언 및 초기화하는 방법
int i ; // 변수 선언
i = 2020; // 초기화
변수의 스코프와 라이프사이클
- 스코프는 변수의 사용 가능한 범위를 말한다
- 예시를 들어 보겠다
- global 변수의 생명주기는 main 메소드까지 들어오지 못한다
- 즉 static 영역에 접근할 수 없어서이다.
- 위와 같이 static을 선언하면 접근이 가능하게 된다
static
- 같은 클래스 내에 있음에도 해당 변수는 사용이 불가능하다
- static 변수나 메소드는 객체를 생성하지 않고 바로 사용을 할 수 있다.
Type Conversion, Casting and Type Promotion
타입 변환, 캐스팅
캐스팅
- 타입을 명시적으로 변환하는 것
Widening Casting
- 작은 크기의 타입을 더 큰 타입으로 전달할 때 캐스팅이 자동으로 수행된다
int i = 2020;
double d = i;
System.out.println(i);
System.out.println(d);
- 결과
2020
2020.0
Narrowing Casting
- 큰 크기의 타입을 작은 타입으로 전달할 때 수동으로 캐스팅해줘야 한다
double d = 2020.0;
int i = (int) d;
System.out.println(d);
System.out.println(i);
- 결과
2020.0
2020
Type Promotion
- 모든 byte, short 및 char값은 int로 승격된다.
- 피연산자가 long 이면 전체 식이 long으로 승격된다
- 피연산자가 float면 전체 식이 float로 승격된다.
- 피연산자 중 하나가 double이면 결과는 double이다
byte b = 42;
char c = 'a';
short s = 1024;
int i = 50000;
float f = 5.67f;
double d = .1234;
double result = (f * b) + (i / c) - (d * s);
System.out.println((f * b) + " + " + (i / c) + " - " + (d * s));
System.out.println("result =" + result);
1차 및 2차 배열 선언하기
1차원 배열 선언
// 초기화 없이 선언
int[] arr;
int arr[];
//선언과 동시에 배열 크기 할당
int[] arr = new int[5];
// 선언 및 초기화
int[] arr;
arr = new int[5];
// 선언 및 값 지정
int[] arr = {1,2,3,4,5};
// 선언과 크기 지정 및 초기화
int arr = new int[]{1,2,3,4,5};
2차원 배열 선언
// 2차원 배열 선언
int[][] arr;
int arr[][];
//선언과 동시에 배열 크기 할당
int[][] arr = new int[5][5];
// 선언 및 초기화
int[][] arr;
arr = new int[5][5];
// 선언과 크기 지정 및 초기화
int[][] arr = new int[][]{{1,2},{3,4},{5,6}};
// 선언과 값지정
int[][] arr = {{1,2},{3,4},{5,6}};
1차원 배열 출력하기
import java.util.*;
public class Main {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
System.out.println(Arrays.toString(arr));
}
}
//결과
[1, 2, 3, 4, 5]
2차원 배열 출력하기
import java.util.*;
public class Main {
public static void main(String[] args) {
int[][] arr = {{1,2},{3,4},{5,6}};
System.out.println(Arrays.deepToString(arr));
}
}
//결과
[[1, 2], [3, 4], [5, 6]]
타입 추론, var
var
- Java 9까지는 local variable 유형을 명시적으로 언급하고 초기화에 사용된 이니셜 라이저와 호환되는지 확인해야 했다
String str = "Java 9";
- Java 10에서는 다음과 같이 local variable을 선언 할 수 있다
var str = "java 10";
- 사용시 중요한 것은 이니셜 라이저가 있는 지역변수에만 사용이 가능하다
'스터디 > LiveStudy' 카테고리의 다른 글
7주차 과제: 패키지 (0) | 2020.12.30 |
---|---|
6주차 과제: 상속 (0) | 2020.12.21 |
5주차 과제: 클래스 (0) | 2020.12.19 |
4주차 과제: 제어문 (0) | 2020.12.09 |
1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (0) | 2020.11.20 |