슬기로운 개발생활

온라인 자바 스터디 #2 - 자바 데이터 타입, 변수 그리고 배열

by coco3o
반응형

목표

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

학습할 것

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

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

- 총 8가지의 프리미티브 타입을 미리 정의하여 제공한다.

  타입 할당되는 메모리 크기 기본값 데이터의 표현 범위
논리형 boolean 1 byte false true, false
정수형 byte 1 byte 0 -128 ~ 127
short 2 byte 0 -32,768 ~ 32,767
int(기본) 4 byte 0  -2,147,483,648 ~ 2,147,483,647
long 8 byte 0L -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
실수형 float 4 byte 0.0F (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값
double(기본) 8 byte 0.0  (1.7 X 10-308) ~ (1.7 X 10308) 의 근사값
문자형 char 2 byte (유니코드) '\u0000' 0 ~ 65,535

 


2. 레퍼런스 타입

- 프리미티브 타입을 제외한 타입들이 모두 레퍼런스 타입이다.

- 빈 객체를 의미하는 Null이 존재한다.

- 값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 힙(Heap) 메모리에 저장된다.

타입 예시 기본값 할당되는 메모리 크기
배열(Array) int[] arr = new int[5]; Null 4 byte (객체의 주소 값 )
클래스(Class) String str = "test";
Student coco = new Student();
열거(Enumeration)  
인터페이스(Interface)  

3. 리터럴

리터럴이란 ?

소스 코드의 고정된 값을 대표하는 용어다.

int i = 1;
String s = "코코";
double d = 3.14;
boolean b = true;

위와 같이 = 의 오른쪽처럼 값들이 존재한다. 프로그램이 실행되고 끝날때 까지 임의로 변경하지 않는 이상

변경되지 않는다.

이것이 리터럴이다.

상수와 햇갈릴 수 있지만 리터럴과 상수는 조금 다른 개념이다.

상수는 변하지 않는 변수를 뜻한다.


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

변수란 무엇인가?

말 그대로 변하는 수. 즉, 고정되지 않은 수를 변수라고 한다.

 

프로그래밍 언어에선 변수란 어떤 수, 문자, 혹은 위치정보를 저장하는 저장 공간을 의미한다.

 

변수 선언 방법은 간단하다.

 

  • 변수 타입 + 변수이름 + ;

변수 타입은 int, long, float, double 과 같은 변수의 형태를 말하고, 변수이름은 다른 변수와 서로 구분짓기 위해 사용하는 이름이라고 보면 된다. 변수선언 후에 ';'를 넣어주는데, ';'는 프로그래밍 언어에서 명령이 끝났음을 의미한다.

  • int num;

int 는 변수타입, num은 변수이름이 된다.

 

public class Example {
	
    public static void main(String[] args) {
    
    int num1 = 100;
    int num2;
    
    System.out.println(num1); // 100
    int num2 = num1;
    System.out.println(num2); // 100
    int num1 = 200;
    System.out.println(num1); // 200
    }
}

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

변수의 스코프(Scope)란?

변수에 접근하거나 접근할 수 있는 유효범위/영역

 

변수의 라이프타임(Lifetime)?

변수가 메모리에서 살아있는 시간

 

  • 변수의 스코프와 라이프타임
Variable Type Scope(유효 범위) Life time
인스턴스 변수 static 메서드를 제외한 클래스 전체 객체가 메모리에 남아있을 때까지
클래스 변수 클래스 전체 프로그램이 끝날때까지 또는
클래스가 메모리에 로드되는 동안
지역 변수 변수가 선언된 블록내부 블록을 벗어날 때까지
class Example {
	int x, y; //인스턴스 변수
    static int result; // 클래스 변수
    
    void add(int a, int b) { // a , b 로컬 변수
    x = a;
    y = b;
    int sum = x + y;
    System.out.println("sum = " + sum);
    }
    public static void main(String[] args) {
    Example ex = new Example();
    ex.add(10,20);
    }
}

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

자바에는 두 종류의 타입 변환이 있다.

  • 자동 타입 변환 (묵시적)
  • 강제 타입 변환 (명시적)

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

- 프로그램 실행 도중 자동으로 타입 변환이 일어남.

작은 크기의 타입이 큰 크기를가지는 타입에 저장될 때 발생함

큰 크기 타입 = 작은 크기 타입

 

타입별 크기 순서 (byte)
byte (1) < short (2) < int (4) < long(8) < float (4) < double (8)

float은 표현 범위가 더 크기 때문에 더 큰 타입으로 들어간다.

 

byte byNum = 10;
int inNum = byNum; //자동 타입 변환으로 byNum은 int형으로 변환

int inNum = 20;
double douNum = inNum; // 20.0 실수 타입으로 변환하면 .0이 붙은 실수값이 됨

char charVal = 'A';
int inNum = charVal; // A의 유니코드 값인 65가 저장

 

2. 강제 타입 변환(Casting)

큰 크기의 타입은 작은 타입으로 자동 타입 변환을 할 수 없다.

하지만 강제 타입 변환을 하면 변환할 수 있다.

작은 크기 타입 = (작은 크기 타입)큰 크기 타입
int inNum = 'A'; // 65 저장
char charVal = (char)inNum; // 65에 해당되는 유니코드 문자('A')가 저장

/*실수 타입(float, double)은 정수 타입으로 자동 타입 변환되지 않기 때문에 강제 타입 변환을
 *사용해야 함. 소수점 이하 부분은 버려지고 (값 손실), 정수만 저장된다.
 double douNum = 3.14;
 int inNum = (int)douNum; //정수인 3 저장

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

배열이란?

동일 타입의 값을 여러개 취급할 수 있는 기능

인덱스라고 불리는 [ ] 로 감싼 0부터 시작하는 정수를 사용해 배열의 길이나 순서를 나타냄

 

1차 배열 선언하기

int[] arr = new int[5];

int 배열 선언시 {0, 0, 0, 0, 0} 와 같이 0으로 10개의 값이 초기화됨

 

1차 배열에 값 넣기

int[] arr = new int[5];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;

for(int i = 0; i < arr.length; i++) {
	System.out.println(arr[i]); //반복문 사용으로 순서대로 값 추출
}

 

2차 배열 선언하기

int[][] arr = new int[5][3];

arr[0]ㅁㅁㅁ

arr[1]ㅁㅁㅁ

arr[2]ㅁㅁㅁ

arr[3]ㅁㅁㅁ

arr[4]ㅁㅁㅁ

위 처럼 5개의 공간 안에 3개의 칸이 생김

 

2차 배열에 값 넣기

int[][] arr = new int[5][3];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;

arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;

arr[2][0] = 7;
arr[2][1] = 8;
arr[2][2] = 9;

arr[3][0] = 10;
arr[3][1] = 11;
arr[3][2] = 12;

arr[4][0] = 13;
arr[4][1] = 14;
arr[4][2] = 15;

8. 타입 추론, var

타입 추론?

타입 추론이란 타입이 정해지지 않은 변수에 대해서 컴파일러가 변수의 타입을 대입된 리터럴로 추론하는 기능을 말한다.

 

java 10에서 var 라는 지역 변수 타입 추론이 추가되었다.

//자바 9 이하에선 다음과 같이 써야함
String name = "dev-coco";

//자바 10 이상에선 다음과 같이 타입추론, var를 지원한다.
var name = "dev-coco"; 

주의 * var와 다이아몬드 연산자를 같이 사용하게 되면 컴파일 에러가 발생함 *

 

var name = new ArrayList<>(); //error

 

var의 잘못된 사용법

var는 초기화 없이 사용할 수 없다.

var i; // var타입은 초기화값을 선언할 때 명시해줘야함

var 타입 변수에는 null값이 들어갈 수 없다.

var i = null; //var 타입의 초기화 값은 'null'이 될 수 없음

var 타입은 로컬 변수에만 선언이 가능하다.

 

Lambda Expression에는 명시적인 타입을 지정해줘야 한다.

 

배열을 선언할 때, var 대신 타입을 명시해줘야 한다.

반응형

블로그의 정보

슬기로운 개발생활

coco3o

활동하기