본문 바로가기
Programming/Java

[whiteship 온라인 스터디] 2주차 과제: 자바 데이터 타입, 변수 그리고 배열

by 읽고 쓰는 개발자 2020. 12. 26.

github.com/whiteship/live-study/issues/2

 

2주차 과제: 자바 데이터 타입, 변수 그리고 배열 · Issue #2 · whiteship/live-study

목표 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다. 학습할 것 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언

github.com

목표

자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.

학습할 것

  • 프리미티브 타입 종류와 값의 범위 그리고 기본 값
  • 프리미티브 타입과 레퍼런스 타입
  • 리터럴
  • 변수 선언 및 초기화하는 방법
  • 변수의 스코프와 라이프타임
  • 타입 변환, 캐스팅 그리고 타입 프로모션
  • 1차 및 2차 배열 선언하기
  • 타입 추론, var

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

자바의 기본 자료형은 총 8개가 있다.

8대 자료형이라고 부른다.

(1 byte == 8bit == 2의 8제곱)

ex) int형 : 4byte == 4*8bit == 2의 32승 ( 음수까지 표현하기 위하여 -2의 31승 ~ 2의 31승 +1 까지가 표현 범위가 된다)

 

+ 프로그래밍에서 실수를 표현할 때는 부동소수점 방식을 이용한다. ( 과거 모기업 신입 필기 기출문제였다.. 다시 공부해봐야지)

이미지 출처 : https://ehclub.co.kr/1825
이미지 출처 : https://m.blog.naver.com/satyee/140127143696

2. 프리미티브 타입과 레퍼런스 타입

primitive type ( 원시 타입 ) : 직접 저장하는 타입. 스택영역에 직접 저장된다. 

reference type (참조 타입) : 객체의 번지를 참조하는 타입. 스택영역에 주소값이 저장되며, 실제 객체는 힙 영역에 생성된다.

  • 배열타입
  • 열거타입
  • 클래스
  • 인터페이스 

이미지 출처 : https://getter-setter.com/2019/08/08/stackandheap/

3. 리터럴

리터럴(literal) : 소스 코드 내에서 직접 입력된 값

  • 값의 종류에 따라 구분 : 정수 리터럴, 실수 리터럴, 문자 리터럴, 논리 리터럴 
  • 정해진 표기법대로 작성되어야 함.
구분   예시 저장할 수 있는 타입
정수 리터럴  소수점 없는 리터럴은 10진수로 간주  0, 75, -100 byte, char, short, int, long
0으로 시작하는 리터럴은 8진수로 간주 02, -04
실수 리터럴  소수점이 있는 리터럴은 10진수 실수로 간주 0.25 , -3.14 float, double
대문자 E 또는 소문자 e가 있는 리터럴은 10진수 지수와 가수로 간주 5E7   //5* 10의 7승
0.12E-5   // 0.12*10의 5승
문자 리터럴 작은 따옴표(')로 묶은 텍스트는 하나의 문자 리터럴로 간주 'A' char
문자열 리터럴 큰 따옴표(")로 묶은 텍스트는 문자 열 리터럴로 간주
큰따옴표 안에 텍스트가 없어도 문자열 리터럴
(문자열 내부에서 이스케이프 문자 사용 가능)
"대한민국" String
논리 리터럴 true, false true, false boolean

cf) 상수(constant)와 같은 의미지만, 상수는 "값을 한 번 저장하면 변경할 수 없는 변수"로 정의되기 때문에 구분을 위해 리터럴 용어를 사용한다. 

 

4. 변수 선언 및 초기화하는 방법

public class VariableExam {

	public static void main(String[] args) {
    	int value;  // 변수 선언 (초기화 x)
        value = 20;   // 변수 초기화 
        
        
        int value2 = 10 ; // 변수 선언 + 초기화 
        

        
        
    }
}

5. 변수의 스코프와 라이프타임

변수의 스코프 : 선언된 블록( 중괄호 {} ) 내에서만 사용이 가능하다. = 블록 스코프

  • 로컬 변수 : 메소드 블록 내에 존재하는 변수. 메소드 실행이 끝나면 메모리에서 자동으로 사라진다.

6. 타입 변환, 캐스팅 그리고 타입 프로모션

타입 변환 : 데이터 타입을 다른 데이터 타입으로 변환하는 것 

  • 자동 (묵시적) 타입 변환 (promotion) :
    • 프로그램 실행 도중 자동적으로 타입 변환 일어나는 것을 의미한다.
    • 작은 크기의 타입이 큰 크기의 타입에 저장될 때 발생 (메모리 크기).  
    • 변환 이전의 값이 손실없이 그대로 보존된다.
  • 강제 (명시적) 타입 변환 (casting) 
    • 큰 크기의 타입이 작은 크기의 타입에 저장될 때 발생
    • 안전하게 값이 보존될 수 있는지 검사하는 것이 좋다.
int intValue = 200;
double doubleValue = intValue; 		//200.0 (자동 타입 변환)


int intValue = (int) doubleValue ; // 200 (강제 타입 변환) 

 

7. 1차 및 2차 배열 선언하기

// 1차원 배열 선언 

// 선언과 초기화가 구분될 수 없다. 잘못된 선언 ( 컴파일 오류) 
int[] value;
int value[]; 
value = {1,2,3,4,5};

// 선언과 초기화가 구분되지 않은 제대로 된 선언
int[] value1 = new int[5];
value1 = {1,2,3,4,5};

int[] value2 = new int[] {1,2,3,4,5};

int[] value3 ;
value3 = new int[5] {1,2,3,4,5};


// 2차원 배열 선언 
int[][] value = new int[2][3];


// 가변 2차원 배열 
int[][] value = new int[2][];
value[0] = new int[10];
value[1] = new int[20];

이미지 출처 : https://m.blog.naver.com/PostView.nhn?blogId=ff1030&logNo=220876906178&proxyReferer=https:%2F%2Fwww.google.com%2F

배열의 저장 구조 (레퍼런스 타입) : 첫 index 주소값이 스택 영역에 저장된다.

 

 

8. 타입 추론, var

타입 추론 : 코드 작성 당시 타입이 정해지지 않았지만, 컴파일러가 그 타입을 유추하는 것이다.

var : 자바10에서 추가되었다. 

  • 로컬 변수
  • 선언과 동시에 초기화되어야 한다.
  • 다이아몬드 연산자(<>)와 함께 사용하면 컴파일 에러가 난다.

출처 : velog.io/@bk_log/Java-%ED%83%80%EC%9E%85-%EC%B6%94%EB%A1%A0

 

출처 : 이것이 자바다 ( 신용권 저)