- 백기선-JAVA STUDY/WEEK22020년 12월 19일 00시 18분 29초에 업로드 된 글입니다.작성자: jCurve728x90반응형
목표: 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
프리미티브 타입 종류와 값의 범위 그리고 기본값
자바에서 타입은 크게 프리미티브 타입과 레퍼런스 타입이 있다.
여기서 프리미티브 타입은 총 8가지로 기본적으로 정의되어진다.
기본값이 정의되어 있기 때문에 null을 할당하고 싶다면 래퍼 클래스를 사용해야한다.
모든 변수에는 타입이 있으며 이 타입에 따라 표현 가능한 값의 범위가 달라지고,
변수를 사용하는 도중 타입을 변경하는 것은 불가능하므로 처음 선언시 충부히 고려해야한다.
간단한 비트 연산으로 범위를 외우지 않고도 도출해낼 수 있다.
1btye=8bit
1bit는 표현 범위가 0과1 두 가지
2bit는 4가지 즉 2의 n비트 제곱으로 값을 표현 가능하다.
그렇다면 1byte는 2의 8비트 제곱으로 가능하다. 2^8은 256이다.
양의 정수로만 256을 표현할 수 있다는 뜻이다
이 값의 범위의 절반을 음수로 사용하기 위해 2로 나눈다면 128이 된다.
그렇다면 이제 두개의 범위를 갖는 것이다. 1~128,-1~-128 근데 이렇게 되면 0이 없기 때문에
의도적으로 음수 표현 부분의 범위를 1개 줄이고 1~128,0,-1~-127 이렇게 값이 설정되는 것이다.
나머지 타입의 값의 표현 범위 연산도 대동소이하다.
프리미티브 타입과 레퍼런스 타입
-프리미티브 타입은 위에서 보여준 8가지 타입을 말하는 것이다.
-레퍼런스 타입은 1가지 이며 용도는 3가지 이다.
배열에 대한 레퍼런스
클래스에 대한 레퍼런스
인터페이스에 대한 레퍼런스
레퍼런스 타입은 변수들의 실제 값을 저장는 것이 아니다. 실제 값이 저장되어있는 메모리
주소를 저장하고 있는 것이다.
이 주소를 통해 실제 값을 참조하기 때문에 Reference type(참조 타입)이라고 한다.
리터럴
소스 코드 내에서 변수의 값으로 직접 입력된 값을 리터럴이라고 부른다.
변수 선언 및 초기화하는 방법
변수 선언은 2 부분만 신경쓰면 된다.
첫째.
사용하고자 하는 변수의 값의 범위를 생각하여 타입을 선언한다.
둘째.
선언한 범위 내에서 원하는 초기값을 지정한다.
변수를 먼저 선언하고 나중에 범위에 맞게 값을 할당해도되고,
처음 변수 선언시 표현 범위에 맞게 값을 설정하는것 둘 다 가능하다.
변수명에 대한 규칙이 몇 가지 있다.
첫 글자는 문자이거나 '$','_',이어야 하고 숫자로 시작할 수 없다.
영어 대소문자가 구분된다.
첫 문자는 영어 소문자로 시작하되, 다른 단어가 붙을 경우 첫 문자를 대문자로 한다(관례)
문자 수의 제한이 없다.
자바 예약어는 사용할 수 없다. (필수)
변수의 스코프와 라이프타임
변수의 스코프는 해당 변수에 접근과 해당 변수가 존재할 수 있는 영역을 의미한다.
스코프로 변수를 구분해보면
클래스 변수, 인스턴스 변수, 지역 변수로 나누어 볼 수 있다.
클래스 변수와 인스턴스 변수는 클래스 내부에서 선언되어야 하며 그중 클래스 변수는 static을 앞에 붙여 선언한다.
지역변수는 메소드 안에서 변수 선언시 지역변수가 됩니다.
지역 변수는 메서드 호출 시 stack 메모리에 생성되고 , 종료시 소멸됩니다.
인스턴스 변수는 new키워를 사용하여 생성하고 heap메모리에 생성되어 해당 클래스의 메서드를 사용가능합니다.
접근제어자에 따라 해당 클래스를 사용할 수 있는 범위가 달라집니다.
소멸은 GC에 의해 수거됩니다.
클래스 변수는 프로그램 실행시 클래스 메모리에 로드되면서 데이터영역에 생성됩니다.
미리 생성되어 있기 때문에 속도는 빠르지만 종료시까지 메모리에서 해제되지않으므로 주의하여 사용해야합니다.
타입 변환,캐스팅 그리고 타입 프로모션
타입 변환은 자동 타입 변환과 강제 타입 변환이 있습니다.
자동 타입 변환(타입 프로모션)
치환문이나 수식 내에서 타입이 일치하지 않을 때 , 컴파일러는 오류 대신 작은 타입을 큰타입으로 자동 변환합니다.
long m =25; // 리터럴 25는 int 타입 , 25가 long 타입으로 자동 변환
double d = 3.14*10; //실수 연산을 하기 위해 10이 10.0으로 자동 변환
강제 타입 변환(캐스팅)
개발자가 강제로 타입 변환을 지시 하는 경우이다.
이때 큰 타입의 값을 작은 타입의 값으로 변환한다면 데이터 손실이 발생한다.
int n = 300;
byte b = (byte)n
이렇게 되면 byte의 값의 표현 범위인 256 사이즈 보다 300이 크기 때문에
300%256=44 가 b에 저장되어 데이터 손실이 생깁니다.
1차 및 2차 배열 선언하기
자바에서 배열은 여러 형색으로 선언이 가능합니다.
int[] array;
int array[];
둘 다 가능합니다.
이렇게 배열에 대한 레퍼런스 변수를 선언하고 나중에 배열을 생성해도 무관하고
선언시에 배열 공간을 할당하는것도 가능합니다.
int[] array = new int[3];
//
int array[] = {0,1,2,3};
//
int[] array;
Arrays.fill(array,1);
//
for(int i=0;i_array.length,i++){
array[i]=i;
}
2차원 배열도 1차원 배열과 동일 개념으로 [] 을 추가하여 범위가 더 넓게 선언이 가능합니다.
int[][] array;
int array [][];
레퍼런스 변수 먼저 선언 후
array = new int[2][2];
array = {{1,2,3,4},{5,6,7,8}};
타입 추론, var
타입 추론이란 코드 작성당시에는 타입이 정해지지 않았지만, 컴파일러가 그 타입을 유추하는 것을 의미합니다. 자바 9까지는 generics나 lamda식에 대해서만 타입추론을 지원했지만 자바 10부터 타입추론을 지원하는 var이라는 키워드가 추가되어 자바에서도 타입추론을 사용가능하게 되었습니다. var은 지역변수로 사용해야하고 선언과 동시에 초기화가 필요합니다
반응형'JAVA' 카테고리의 다른 글
백기선-JAVA/STUDY/WEEK6 (0) 2021.01.07 백기선-JAVA STUDY/WEEK5 (0) 2020.12.19 백기선-JAVA STUDY/WEEK4 (0) 2020.12.19 백기선-JAVA STUDY/WEEK3 (0) 2020.12.19 백기선-JAVA STUDY/WEEK1 (0) 2020.12.19 댓글