백기선 자바 스터디 1기 2주차

2022. 4. 4. 23:32Java/java-live-study

728x90
반응형

목표

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

학습할 것

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

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

  • 자바에서는 총 8가지의 기본형 타입(Primitive type)을 미리 정의하여 제공한다.
  • 기본값이 있기 때문에 NULL이 존재하지 않는다.
  • 스택 메모리에 저장된다.
  타입 메모리 크기(byte) 기본 값 값의 범위
논리형 boolean 1 false true, false
정수형 byte 1 0 -128 ~ 127
short 2 0 -32,768
~
32,767
int(기본) 4 0 -2,147,483,648
~
2,147,483,647
long 8 0L -9,223,372,036,854,775,808
~
9,223,372,036,854,775,807
실수형 float 4 0.0F (3.4 X 10-38)
~
(3.4 X 1038) 의 근사값
double(기본) 8 0.0 (1.7 X 10-308)
~
(1.7 X 10308) 의 근사값
문자형 char 2 '\u0000' 0 ~ 65,535

 


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

  • 프리미티브 타입을 제외한 모든 타임은 참조형 타입(Reference type)이다.
  • 빈 객체를 의미하는 NULL이 존재한다.
  • 스택 메모리에는 레퍼런스 타입의 주소 값이 저장되고 해당 주소 값의 힙 메모리에 실제 값을 저장한다.
타입 예시 기본 값 메모리 크기(byte)
배열(Array) int[] arr = new int[5]; Null 4 (객체의 주소값)
열거(Enumeration)   Null
클래스(Class) String str = "test";
Student hong = new Student();
Null
인터페이스(Interface)   Null

리터럴

  • 소스코드 내에서 직접 입력된 값을 대표하는 용어이다.
  • 프로그램에서 직접 표현한 값이다.
  • 정수, 실수, 문자, 논리, 문자열 리터널이 존재한다.

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

변수 선언은 저장공간을 확보하겠다는 의미로 해석할 수 있다.

int a

위의 코드가 변수를 선언한 것인데, 해석해본다면 다음과 같다.

int 타입의 값을 저장할 수 있는 공간(4byte)을 확보했고 그 공간의 이름은 'a' 이다.

 

변수 초기화는 저장공간에 원하는 값을 저장하는 것을 의미한다.

변수는 클래스 영역에 선언한 멤버변수와 메소드 영역에 선언한 지역변수로 나뉘는데 멤버변수는 초기화를 하지 않아도 기본값을 할당해주지만 지역변수는 할당을 해주지 않아 사용 전에 초기화해주어야 한다.

public class Init {
	// 멤버변수, 멤버변수는 인스턴스 생성 시점에 기본값으로 초기화된다.
    	int a; //0
	String b; //null
	Boolean c; //null
	
	public static void main(String[] args) {
		//지역변수, 지역변수는 사용 전에 초기화 해주어야한다.
        int b
        
        b = 10;
        System.out.println(b); //10출력
	}

}

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

변수의 스코프란 해당 변수를 사용할 수 있는 영역 범위를 뜻하고 라이프타임은 해당 변수가 메모리에 언제까지 살아있는지를 뜻한다. 변수는 스코프에 따라 클래스 변수, 인스턴스 변수, 지역 변수로 나눌 수 있다.

 

 

클래스 변수

 

클래스 안에서 선언되어있고, 어떠한 메서드나 블럭 안에서 선언되지 않았으며 static 키워드로 선언된 변수

scope - 클래스 전체

lifetime - 프로그램 종료 시까지

 

인스턴스 변수

 

클래스 안에서 선언되어있고, 어떠한 메서드나 블럭 안에서 선언되지 않은 변수

scope - static method를 제외한 클래스 전체

lifetime - 객체가 메모리에서 사라질 때까지

 

지역 변수

 

클래스, 인스턴스 변수가 아닌 모든 변수

scope - 변수가 선언된 블럭 내부

lifetime - 변수가 선언된 블럭이 사용될 동안

 

public class Foo {
    static int result;  	//클래스 변수
    int num1, num2;   		//인스턴스 변수
    int add(int a, int b){  	//지역 변수
        num1 = a;
        num2 = b;
        return a+b;
    }
}

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

타입 캐스팅(Type casting)

 

타입 캐스팅이란 크기가 더 큰 자료형을 크기가 더 작은 자료형에 대입하는 것을 의미한다. 이때 변환하는 자료형보다 데이터의 크기가 커 범위를 넘어가게 되면 데이터의 손실이나 변형이 올 수 있다.

int a = 10;     
byte b = (byte)a;
System.out.println(b); //  -> 10
//byte 는 -256~255까지 표현할 수 있음으로 타입캐스팅을 했음에도 데이터 변형이나 손실은 오지 않았다 

	
int a = 10000;     
byte b = (byte)a;
System.out.println(b); //  -> 16
//표현범위를 벗어나는 값을 강제로 타입캐스팅해 데이터에 변형이 생겼다

 

타입 프로모션(Type promotion)

 

타입 캐스팅과 반대로 크기가 더 작은 자료형을 더 큰 자료형에 대입하는 것을 의미한다. 이 경우 데이터의 손실이나 변형 가능성이 없으므로 변환할 때 명시적으로 적지 않아도 자동으로 변환 가능하다.

byte a = 10;
int b = a;
System.out.println(b); //  -> 10

1차 및 2차 배열 선언하기

 

배열

 

배열이란 동일한 타입의 데이터를 연속된 공간에 저장하기 위한 자료구조이다.

 

1차 배열 선언

int[] arr1; 
int arr2[];

int [] arr = new int[10]; //int형을 10개 저장할 수 있는 배열 선언
arr[0] = 10; //초기화
arr[1] = 20;


//다음 두 코드는 같은 결과를 갖는다.
int arr [] = {1,2,3} 

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

 

2차 배열 선언

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

//위 코드는 다음 코드와 동일하다 

int arr[][] = {{1,2},{3,4}}

타입 추론, var

타입 추론이란 개발자가 변수의 타입을 명시해주지 않아도 컴파일러가 알아서 이 변수에 대입된 리터럴을 토대로 추론하는 것이다. Generic이나 자바 8에서 추가된 lamda에서 타입 추론이 사용되고 자바 10부터 type-inference를 위한 var 예약어가 추가되었다.

var a = "hello";	// String a = "hello";
var b = 10;		// int b = 10;

 

728x90
반응형