(수근수근)

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

JAVA

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

InformationFarm 2021. 1. 7. 11:19

목표

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

학습할 것

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

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

기본형 타입(Primitive type)

  • 자바언어에 내장된 기본 타입
  • 총 8개이 타입이 존재한다. (boolean, byte, short, int, long, float, double, char)
  • stack메모리에 저장이 된다 실제 값들이 저장이 된다. 
  • wrapper class들은 primitive type를 클래스로 만든 것
Type 사이즈 값의 범위 기본 값
int 4byte  -2,147,483,648 ~ 2,147,483,647 0
short 2byte -32,768 ~ 32,767 0
long 8byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 0L
float 4byte (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값 0.0F
char 2byte 0 ~ 65535  '\u0000'
boolean 1byte false, true false
byte 1byte -128 ~ 127 0
double 8byte (1.7 X 10-308) ~ (1.7 X 10308) 의 근사값 0.0

 

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

Reference Type 와 레퍼런스 타입 종류

출처 한빛 미디어 뇌를 자극하는 자바프로그래밍

Reference type의 특징

  • 기본형 타입을 제외한 타입은 모두 참조형이다.
  • 빈 객체를 의미하는 Null값이 존재한다
  • 값을 저장시키는게 아닌 저장되어있는 주소를 heap메모리에 저장한다.

Literal이란

리터럴이란 프로그램에서 직접 표현한 값으로 정수리터럴, 실수, 문자, 논리 문자열 리터럴이 존재한다

  • 정수리터럴  (ex. 15(십진수), 014(8진수), 0x15(16진수), 0b (2진수)   )
  • 실수리터럴 
    double로 컴파일 (ex. double db = 0.0432) /  float는 숫자뒤에 f를 명시적으로 붙여주어야함
  • 문자리터럴 : '' 로 표현한다
  • 문자열 리터럴 :  "" 로문자열 표현

 

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

변수선언이란

  • 데이터를 저장하기 위해 메모리를 잡는것
  • 자바에서 변수 선언시 안되는 경우가 여러가지가 존재
    • 변수 앞에 숫자 불가
    • 변수에 특수문자 불가
    • 예약어 사용불가

변수 초기화란

  • 변수를 선언하고 사용하기 위해 값을 넣어주는 작업이 반드시 필요하다! 
  • 변수를 초기화 할때는 대입연산자를 사용해서 초기화를 시켜준다.
  • 초기화를 하지 않으면 쓰레기 값이 들어있을 수 있기 떄문에 초기화가 반드시 필요!
int a = 10; // 변수 선언 및 초기화
int 12number = 10 // 컴파일 에러
boolean class = false // 예약어 사용불가

 

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

 

변수의 스코프란?

  • 변수에 접근하거나 접근할 수 있는 유효범위/영역
  • 일반적으로 {}선언된 블록 안에서 엑세스 가능

변수의 라이프타입이란?

  • 변수가 메모리에서 살아있는 기간
  • 모든 변수는 생명주기를 가지고 있고, 변수가 생성되는 죽는 일련의 과정
public class Test{
	int var1 = 10; // 인스턴스 변수, 전역변수
    static int var2; //클래스 변수 정적변수
    
    int sun(int a, int b){ //매개변수, 파라미터
    	int var3 = 30; //지역변수
    	return a+b+c;
    }
    
}
  • 인스턴스 변수는 객체가 생성될때 변수 생성 
    • 인스턴스는 참조가 없을 때 가비지 컬렉터가 객체를 삭제한다.이때 인스턴스도 같이 제거
  • 클래스 변수는 클래스가 호출되면서 생성 어플리케이션이 종료되는 시점에 같이 소멸된다.
  • 지역변수는 {} 이 끝나는 시점 삭제된다.
  • 매개변수는 함수가 끝나는 시점에 소멸된다.

 

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

타입변환

  • 자동타입변환 : 프로그램 실행 도중 자동으로 변환 
    byte >> short/char >> int >> long >> float >> double
  • 강제타입변환 : 큰 타입에서 작은타입으로 변환
int num1 = (int)10.3432; //강제 형변환
float num2 = 10; //  자동형변환 -> 10.0

Casting & Promotion

출처. https://tedock.tistory.com/75

  • casting(명시적 형 변환) : 큰데이터 타입에서 작은타입으로 형변환 되는것
    int num = (int)10.3434;
  • Promotion(묵시적 형 변환 ): 작은타입에서 큰변환으로 형 변환
    float num2 = 10; //컴파일러가 자동적으로 수행한다.

1차 및 2차 배열 선언하기

Reference Type에 속하는 배열은 안에 많은 값들이 존재한다.

배열 선언

// 1차원 배열 선언
int[] odds ={1,3,5,7,9};
int[] name = new int[10];  //크기 지정가능, 배열의 값은 0으로 초기화 된다.

//2차원 배열의 선언

int[][] matrix = new int[2][4]; // 가정 선호된는 선언
int[][] matrix2 =  {{1,2,3,4},{5,6,7,8}};
int arr[][] matrix3 = new int[2][4]; // 선언가능
int[] arr[] matrix4 = new int[2][4]; // 선언가능

 

배열의 특징

  • 배열의 길이는 고정이 되어있다.
  • 배열의 인덱싱은 0부터 시작한다.

 

타입추론(Type Inference), var

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

(자바 10에서 var라는 Local Variable Type-Inference가 추가 됨)

 

var name = "JUHA";

if(name instanceof String){
	System.out.println("String 타입입니다");
}


var hm = new HashMap<String, Integer>();

타입추론의 특징

  • 지역변수로만 선언이 가능하며 값이 필요하다
  • 배열을 불가능하다
  • method의 인자값으로 사용 불가
  • 람다식 사용 불가
  • 초기화 후에 다른 타입의 할당은 불가능하다 
var name = "juha";
var age = 20;
var character ="cute";

age = "이십살"; // 컴파일 에러, 컴버팅 되지않는다.

 

Comments