본문 바로가기
자바/스터디

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

by jeonghaemin 2020. 11. 21.
728x90

본 게시글은 백기선 님의 live-study 과제를 수행하면서 작성한 글입니다.

목표

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

학습할 것

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

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

자료형 예약어 크기 값의 범위 기본 값
논리형 boolean 1 byte true 또는 false false
문자형 char 2 byte 0~65535 /u0000
정수형 byte 1 byte -128 ~ 127 0
short 2 byte -32768 ~ 32767 0
int 4 byte -231 ~ 231-1 0
long 8 byte -263 ~ 263-1 0L
실수형 float 4 byte 1.4*10-45 ~ 3.4*1038 0.0f
double 8 byte 4.9*10-324 ~ 1.8*10308 0
  • 위 표를 보면 실수형 자료형에는 정밀도라는 용어가 사용되었는데 이 값이 높을수록 오차의 범위가 줄어듭니다.
  • 정밀도가 n자리라는 것은 n자리의 10진수를 오차 없이 저장할 수 있습니다.
  • float의 경우는 정밀도가 7자리이기 때문에 7자리의 10진수를 오차 없이 저장할 수 있습니다.
  • float과 long의 경우가 각각 접미사 f(F), l(L)이 붙습니다.

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

자바의 데이터 타입은 프리미티브 타입과 레퍼런스 타입 두 가지로 나뉩니다.

  • 프리미티브 타입 : 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 8개를 말하며 계산을 위한 실제 값을 저장합니다.
  • 레퍼런스 타입 : 프리미티브 타입 8개를 제외한 나머지로써 값을 직접 저장하는 것이 아닌 객체의 주소를 저장합니다.

리터럴

  • 변수 : 값을 저장하기 위한 공간
  • 상수 : 최초 한 번만 값을 저장 가능하며, 추후 수정할 수 없는 변수, 변수 앞에 final 키워드를 붙여 사용
  • 리터럴 : 그 자체로 값을 의미하는 것

리터럴은 보통 우리가 말하는 상수와 같은 의미인데, 프로그래밍에서는 이미 상수를 한 번만 값을 저장할 수 있는 공간을 상수로 정의하였기 때문에 리터럴이라는 용어를 만들어서 사용합니다.

int sum = 0;

이와 같은 코드가 있을때 값 자체인 0은 리터럴, 그리고 이 리터럴에 이름을 붙이는 것이 변수 또는 상수입니다.

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

변수란 프로그래밍에서 값을 저장하는 공간으로써 사용되는 용어입니다.

자바에서 변수를 선언 및 초기화는 기본적인 형식은 '자료형 변수명 = 값;'과 같습니다.

int num = 10; //변수의 선언 및 초기화 
final int NUM = 10; //상수의 선언 및 초기화

변수를 최초 한 번만 값을 저장할 수 있는 상수로 만들고 싶다면 자료형 앞에 final을 붙여주면 됩니다. 상수의 이름은 보통 대문자로 적어줍니다.

또한 변수의 선언과 초기화를 다음과 같이 분리할 수도 있습니다.

int num; // 변수의 선언 
num = 0; // 변수의 초기화

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

자바의 변수는 클래스 변수, 인스턴스 변수, 지역 변수 3가지의 종류로 나누어집니다.

public class Exam { 

    static a = 0; // 클래스 변수 
    int b = 0; // 인스턴스 변수 
    
    public void method() { 
    	int c = 0; // 지역 변수 
    } 
}
  • 인스턴스 변수 : 클래스의 안에, 메소드의 밖에 선언된 변수로써 객체가 생성될 때 각각의 객체에 하나씩 생성되고 객체 소멸 시 소멸됩니다.
  • 클래스 변수 : 변수 앞에 static 키워드를 붙혀 사용하고 선언 위치는 인스턴스 변수와 같지만, 객체 생성 시 생명이 시작되는 인스턴스 변수와 달리 클래스가 메모리에 올라가는 시점에 생성이 되며, 모든 객체에서 공유하며 사용된다. 프로그램 종료 시 소멸됩니다.
  • 지역 변수 : 메서드나 반복문 블럭 안에 선언하는 변수로써, 메서드 안에서만 사용 가능하며 메서드나 반복문이 종료될 때 소멸됩니다.

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

타입 변환

타입(형) 변환이란 변수나 상수를 다른 타입으로 변환하는 것을 말합니다.

  • 문자열 → 숫자형

문자열에서 숫자형으로의 형변환은 변환하고자 하는 자료형의 래퍼 클래스의 valueOf() or parse자로형() 메서드를 통해 수행할 수 있습니다.

//String to int 
Integer.parseInt("문자열"); 
Integer.valueOf("문자열");

//String to float 
Float.valueOf("123.123"); 

//String to double 
Double.valueOf("123.123"); 

//String to long
Long.parseLong("123"); 
Long.valueOf("123"); 

//String to short 
Short.parseShort("123"); 
Short.valueOf("123");​

 

  • 숫자형 → 문자열

String.valueOf() or 래퍼클래스의 toString()를 사용하여 형변환

//int to String 
String.valueOf(123); 
Integer.toString(123); 

//double to String 
String.valueOf(123.123); 
Double.toString(123.123); 

//float to String 
String.valueOf(123.123f); 
Float.toString(123.123f); 

//long to String 
String.valueOf(123); 
Long.toString(123); 

//short to String 
Short.toString(123);
  • 기본형 → 기본형
//변환 방법 : (자료형)피연산자 //Ex) 
double to int double a = 123.123; 
int b = (int)a; // 결과 : 123

기본형 간의 형변환은 Boolean을 제외한 나머지 타입끼리 형변환이 가능합니다. 하지만 범위가 넓은 타입에서 좁은 타입으로 변환 시 값 손실이 일어날 수 있습니다. 예를 들어 위 코드에서는 실수형을 정수형으로 변환하였기 때문에 실수형이 잘려나가 정수형 부분만 남은 것을 볼 수 있습니다.

자동 형변환(타입 프로모션)

넓은 범위에서 좁은 범위로는 명시적으로 형변환 해주어야 하지만 좁은 범위에서 넓은 범위로는 형변환을 생략하여도 자동으로 형변환을 해줍니다.

// int 보다 double의 표현 범위가 넓기 때문에 형변환을 생략해도 Ok 
int a = 100; 
double b = a;

기본형의 자동 형변환 규칙은 다음과 같습니다.

(화살표 방향으로 자동 형변환 가능)

 

1차 및 2차 배열 선언하기

선언

  • 1차원 배열 : 타입[] 변수명;
  • 2차원 배열 : 타입[][] 변수명;

초기화

  • 1차원 배열 : 타입[] 변수명 = new 타입[길이];
  • 2차원 배열 : 타입[][] 변수명 = new 타입[행 길이][열 길이];
// 1차원 배열의 선언 및 초기화 예 
int[] arr11 = new int[5]; 
int[] arr12 = new int[5]{1,2,3,4,,5}; 
int[] arr13 = {1,2,3,4,5}; 

// 2차원 배열의 선언 및 초기화 예 
int[][] arr21 = new int[2][2]; 
int[][] arr22 = new int[2][2]{ {1,2}, {3,4} }; 
int[][] arr23 = { {1,2}, {3,4} };

예제 코드에서 볼 수 있듯이 2차원 배열은 1차원 배열을 여러 개 가지고 있는 형태입니다.

타입 추론, var

타입 추론이란 자바에서 제네릭과 같이 코드 작성 시점에선 타입이 정해지지 않지만, 컴파일러가 타입을 유추하여 결정하는 것을 말합니다.

자바10부터는 var라는 것이 생겼는데 이를 사용하여 변수를 선언하게 되면 코드 작성 시에 타입을 정해주지 않아도 컴파일러가 변수의 타입을 결정해줍니다.

var의 사용 조건

  1. 초기화된 지역 변수 선언 시
  2. 반복문에서 지역변수 선언 시
var message = "타입 추론"; 

for(var i : list) { 
System.out.println(i); 
}

참고

자바의 정석 3판(남궁성 저)

댓글