목표 : 자바의 프리미티브 타입, 변수 그리고 배열 사용하는 방법 익히기
프리미티브? Primitive Type
영어 사전으로는 '원시사회의, 원시적인'이란 뜻.
컴퓨터 프로그래밍 언어에서는 '이용가능한 가장 단순한 요소들'
https://m.blog.naver.com/aim4u/222108130986
3번째 특징의 "값이 할당되면서 JVM의 Runtime Data Area 영역 중 Stack 영역에 값이 저장된다."
-> Stack Area : 지역변수, 파라미터, 리턴값 연산에 사용되는 임시 값 등이 생성되는 영역이기 때문.
https://wikidocs.net/102803
프리미티브 타입 종류로는
논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double)이 있으며
프리미티브 타입은 값을 할당할 때 변수의 주소 값에 값이 그대로 저장되는 데이터 타입
https://kdg-is.tistory.com/217
https://93jpark.tistory.com/57 -> 같이 보면 좋을 것 같아서,,
프리미티브 타입은 위의 설명 참고
레퍼런스? Reference
영어 사전적 의미로는 '참고', '기준', '표준', '자료'
https://runparty.tistory.com/entry/%EB%A0%88%ED%8D%BC%EB%9F%B0%EC%8A%A4-%EB%9C%BB-%EC%97%AC%EB%9F%AC-%EB%B6%84%EC%95%BC-%EC%9D%98%EB%AF%B8-%EC%B4%88%EA%B0%84%EB%8B%A8-%EC%84%A4%EB%AA%85
왜 프리미티브 타입과 레퍼런스 타입을 구분해야 하죠?
자바의 변수형이 두 타입으로 나눠지기 때문.
https://jinbroing.tistory.com/3
데이터(값) 그 자체
즉, 변수에 넣는 변하지 않는 데이터를 의미
const a = 1; //a : 변하지 않는 변수로 상수를 뜻한다, 1이 리터럴
https://velog.io/@pjeeyoung/%EB%A6%AC%ED%84%B0%EB%9F%B4
Long var1; // Long : 타입, var1 : 변수 이름
"변수 선언"
타입을 선언하고 바로 뒤에 변수 이름을 집어 넣으면 된다.
변수는 지역변수와 필드(== 멤버변수, 전역변수) 로 나뉜다.
필드는 어떠한 객체의 데이터를 저장하기 위한 역할 담당하고 선언하는 방법은
[접근제어자(public, private 등)][static, final 등] 자료형 변수명 [= 초기값];
https://catch-me-java.tistory.com/16
https://salix97.tistory.com/15
스코프란 Scope?
'범위' 라는 뜻.
'변수에 접근할 수 있는 범위'
지역(local), 전역(global)로 나눌 수 있다. ( 위 변수 선언 참고해도 됨 )
https://simplejs.gitbook.io/olaf/10.-scope
변수의 스코프(범위)란,
변수가 접근할 수 있는 유효 범위를 말한다.
일반적인 규칙은 변수가 선언된 블록내에서만 접근 가능.
블록은 {} 를 말함.
Java에서 Class와 Method가 블록을 가짐.
즉,
스코프 : 변수를 사용할 수 있는 영역
그리고 이 스코프는 변수가 선언되는 영역에 따라 접근하는 방법이 다름.
라이프 타임 : 변수가 유효한 시간
프로그램이 구동되는 동안 변수가 '값을 담고 있을 수 있는 주기'
변수의 종류에 따라 상이하기 때문에 각각의 차이를 이해하는 것이 중요하다.
https://hyunsdevnote.tistory.com/9
캐스팅 : 타입을 변환하는 것 ( == 형변환 )
연산을 수행하는 코드에서는 같은 타입끼리만 가능하기 때문에 형변환이 필요하다.
https://velog.io/@sezzzini/Java-Casting
프로모션 : 작은 데이터 타입에서 큰 데이터 타입으로 형 변환
캐스팅 : 큰 데이터 타입에서 작은 데이터 타입으로 형 변환
short 타입 (16비트) -> int 타입 (32비트) 문제 발생 x
long 타입 (8바이트) -> float 타입 (4바이트) 문제 발생 x
표현할 수 있는 값의 범위가 float 가 더 크기 때문 (참고로 1byte == 8bit)
https://league-cat.tistory.com/412
배열의 특징
: 메모리 구조가 정해져있기 때문에 데이터 삽입시 공간을 늘릴 수 없고,
데이터 삭제시에는 삭제된 데이터 공간에는 빈공간으로 그대로 남아있기 때문에
메모리 낭비가 발생한다.
배열은 인덱스가 있기 때문에 조회시에는 속도 O(1)이라는 상당히 좋은 메리트.
그래도 보통 ArrayList를 많이 사용한다.
public class Parent {
public static void main(String[] args){
int[] arr; //배열 선언
int[] arr1 = new int[5]; //배열 선언과 동시에 크기 할당
int[] arr2;
arr2 = new int[5]; //두 줄로 표현 가능
int[] arr4 = new int[] {1, 2, 3, 4, 5}; //배열 초기화
}
}
public class Parent {
public static void main(String[] args){
//2차원 배열 선언
int[][] arr5 = new int[3][4]; //3행 4열의 크기를 갖는 2차원 배열
int[][] arr6 = { {1,2,3}, {4,5,6}, {7,8,9} }; //3행 3열의 크기를 갖는 2차원 배열
}
}
https://azurealstn.tistory.com/99
타입을 미리 선언하지 않고 리터럴(데이터 값 그 자체) 값으로 컴파일러가 이를 추론하게 하는 것
쓰는 목적은 중복을 줄여서 가독성 향상을 높이는 것.