2주차 과제. 자바 데이터 타입, 변수 그리고 배열

Jiwon·2022년 6월 21일
0

JAVA

목록 보기
2/4
post-thumbnail

2주차. 자바 데이터 타입, 변수 그리고 배열

목표 : 자바의 프리미티브 타입, 변수 그리고 배열 사용하는 방법 익히기


프리미티브 타입 종류와 값의 범위 그리고 기본 값

프리미티브? Primitive Type
영어 사전으로는 '원시사회의, 원시적인'이란 뜻.
컴퓨터 프로그래밍 언어에서는 '이용가능한 가장 단순한 요소들'
https://m.blog.naver.com/aim4u/222108130986

  • 실제 데이터 값을 저장하는 타입
  • 기본값이 있기 때문에 null이 존재하지 않는다.
  • 값이 할당되면서 JVM의 Runtime Data Area 영역 중 Stack 영역에 값이 저장
  • 값의 범위를 벗어나면 컴파일 에러 발생

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


1차 및 2차 배열 선언하기

배열의 특징
: 메모리 구조가 정해져있기 때문에 데이터 삽입시 공간을 늘릴 수 없고,
데이터 삭제시에는 삭제된 데이터 공간에는 빈공간으로 그대로 남아있기 때문에
메모리 낭비가 발생한다.

배열은 인덱스가 있기 때문에 조회시에는 속도 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


타입 추론, var

타입을 미리 선언하지 않고 리터럴(데이터 값 그 자체) 값으로 컴파일러가 이를 추론하게 하는 것

쓰는 목적은 중복을 줄여서 가독성 향상을 높이는 것.

https://93jpark.tistory.com/124

profile
과연 나는 ?

0개의 댓글