티스토리 뷰
목표
자바 데이터 타입, 변수 그리고 배열
스터디 목차
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
1. 프리미티브 타입 종류와 값의 범위 그리고 기본 값
자료형 | 크기 | 범위 | 기본값 |
byte | 1byte | -128 ~ 127 | 0 |
short | 2byte | -32,768 ~ 32767 | 0 |
int | 4byte | -2,147,483,648 ~ 2,147,483,647 | 0 |
long | 8byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0 |
float | 4byte | -3.4E38 ~ 3.4E38 | 0.0f |
double | 8byte | -1.7E308 ~ 1.7E308 | 0.0d |
boolean | 1bit | true 또는 false (1,0) | False |
char | 2byte | 0 ~ 65,535 | \u0000 |
2. 프리미티브 타입과 레퍼런스 타입
Primitive type 이란
총 8가지의 기본형 타입(Primitive type)을 미리 정의하여 제공한다.
기본값이 있기 때문에 Null이 존재하지 않는다.
실제값을 저장하는 공간으로 스택(Stack) 메모리에 저장된다.
1) 특징
byte, short, int, long, float, double, char, boolean
모두 첫 글자가 소문자이다.
산술연산이 가능하다.
null로 초기화 할 수 없다.
Reference type 이란
기본형 타입(Primitive type)을 제외한 타입들이 모두 참조형 타입(Reference type)이다.
빈 객체를 의미하는 Null이 존재한다.
값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 힙(Heap)메모리에 저장된다.
1) 특징
Byte, Short, Integer, Long, Float, Double, Charater, Boolean
모두 첫 글자가 대문자이다.
산술연산이 불가능하다.
null로 초기화 할 수 있다.
2) 사용 하는 이유
매개변수로 객체가 요구될 때
기본형 값이 아닌 객체로 저장해야 할 때
객체간의 비교가 필요할 때
DB와 연동시 DTO 객체에 null이 필요한 경우 사용 할 수 있음
3. 리터럴
리터럴이랑 상수랑 거의 비슷한 뜻을 가지고 있는데
상수는 변하지 않는 변수를 뜻한다(메모리 위치).
하지만 리터럴은 변수의 값이 변하지 않는 데이터(메모리 위치안의 값)를 의미한다.
예를 들어
int a=1;
int 앞에 final를 붙일 시, a는 상수가 된다. 여기서의 리터럴은 1이다.
즉, 1과 같이 변하지 않는 데이터(boolean, char, double, long, int ...)를 리터럴 이라고 부른다.
4. 변수 선언 및 초기화 하는 방법
- 변수 선언
int a;
int => 변수 타입
a => 변수명 이 된다.
- 변수 초기화
1) 선언된 변수 초기화
a = 10;
2) 선언과 동시에 초기화
int a = 10;
5. 변수의 스코프와 라이프 타임
1) 인스턴스 변수 (Instance Variables)
인스턴스 변수는 인스턴스가 생성될 때 생성된다. 인스턴스 별로 다른 값을 가질 수 있으므로, 각각의 인스턴스 마다 고유의 값을 가져야 할 때는 인스턴스 변수로 선언한다.
2) 클래스 변수 (Class Variables)
클래스 변수는 인스턴스 변수에 static만 붙여주면 된다. 인스턴스 변수는 각각 고유한 값을 가지지만 클래스 변수는 모든 인스턴스가 공통된 값을 공유하게 된다. 한 클래스의 모든 인스턴스들이 공통적으로 값을 가져야할 떄 클래스 변수로 선언한다.
3) 지역 변수 (Local Variables)
메소드 내에서 선언되며 메소드 내에서만 사용할 수 있는 변수이다. 메소드가 실행될 때 메모리를 할당 받으며 메소드가 끝나면 소멸되어 사용할 수 없게 된다.
- 스코프
프로그램상에서 사용되는 변수들은 사용 가능한 범위를 가진다 그 범위를 변수의 스코프라고 한다.
인스턴스 변수 : 클래스 전체 (static 블록과 static 메소드 제외)
클래스 변수 : 클래스 전체
지역 변수 : 선언된 블록 내
- 타임라인
변수가 살아 있는 시간
인스턴스 변수 : 객체가 생성되고 객체가 메모리에 살아있는 동안
클래스 변수 : 클래스가 초기화 되고 프로그램이 끝날때 까지
지역 변수 : 변수 선언 이후 부터 블록을 벗어날 때까지
6. 타입 변환, 캐스팅 그리고 타입 프로모션
- 타입변환
하나의 타입을 다른 타입으로 바꾸는 것을 타입변환 이라고 한다.
자바에서는 boolean형을 제외한 나머지 기본 타입 간의 타입 변환을 자유롭게 수행할 수 있다.
자바에서 타입 변환은 크게 두 가지 방식이 있다.
1) 묵시적 타입 변환 (자동 타입 변환) : Promotion
대입 연산이나 산술 연산에서 컴파일러가 자동으로 수행해주는 타입 변환을 말한다.
이렇게 자바 컴파일러가 자동으로 수행하는 타입 변환은 언제나 데이터의 손실이 최소화되는 방향으로 이루어 진다.
따라서 자바에서는 타입의 표현 범위에 따라 다음과 같은 방향으로 자동 타입 변환이 이루어 진다.
2) 명시적 타입 변환 (강제 타입 변환) : Casting
사용자가 타입 캐스트 연산자를 사용하여 강제적으로 수행하는 타입 변환이다.
(변환할 타입) 변환할 데이터
변환 시키고자 하는 데이터의 앞에 괄호()를 넣고, 그 괄호 안에 변환할 타입을 적는다.
자바에서는 이 괄호를 타입 캐스트(type cast) 연산자 라고 한다.
7. 1차 및 2차 배열 선언하기
- 1차원 배열 선언
- 1차원 배열 선언 및 초기화
1) 배열 안에 값 0으로 세팅
int [] arr = new int[3];
arr이라는 이름을 가진 배열을 사이즈가 3인 배열로 초기화한다.
이렇게 하면 배열에는 모두 0으로 세팅이 된다.
2) 배열 안에 값 지정 해주기
int [] arr = {1, 2, 3, 4};
이런식으로 사용해주면 배열 안에 값을 지정해줄 수있다.
- 2차원 배열 선언
1차원 배열 생성 시와는 다르게 제일 위의 방법으로만 문법적 오류 없이 생성할 수 있다.
int [행][열] 이다.
- 2차원 배열 선언 및 초기화
1) 배열 안에 값 0으로 세팅
int [] [] arr = new int [1][5] (1행 5열)
2) 배열 안에 값 지정 해주기
int [] [] arr = {{1, 2, 3}, {4, 5, 6}}; (2행 3열)
- 배열 출력하기
1) 1차원 배열
System.out.println(arr);
배열이 담긴 변수명만 넣어서 출력을 하게 되면 쓰레기 값이 출력이된다
System.out.println(Arrays.toString(arr));
이런식으로 출력을 해줘야 정상 출력이 된다.
2) 2차원 배열
2차원 배열은 배열 안에 배열이 있는 형태이기 때문에 1차원 배열처럼 출력을 하면안된다.
배열은 기본적으로 Object 이고 Object의 toString이 호출되어 원하는 결과를 출력 해주지 않는다.
따라서 별도로 출력문을 구현해야한다.
8. 타입추론, var
타입 추론이란 타입이 정해지지 않은 변수의 타입을 컴파일러가 유추하는 기능이다.
자바에서는 일반 변수에 대해 타입 추론을 지원하지 않기 때문에 자바에서의 타입 추론은
제네릭과 람다에 대한 타입 추론을 말한다.
- 제네릭 (Generic)
제네릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다.
제네릭 타입은 클래스 또는 인터페이스 이름 뒤에 <> 부호가 붙고 사이에 타입 파라미터가 위치한다.
제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다.
자주 사용하는 타입인자
- 람다 (Rambda)
람다식이란 식별자 없이 실행가능한 함수, 함수 이름 없이 사용가능하다.
함수인데 함수를 따로 만들지 않고 코드한줄에 함수를 써서 그것을 호출하는 방식이라고 생각하면 된다.
함수적 프로그래밍을 위해 자바 8부터 람다식을 지원하면서 기존의 코드 패턴이 많이 달라졌다.
자바스크립트에서 주로 봤었던 문법들을 이제 자바에서 사용하게 되었다.
매개변수는 오른쪽 중괄호 { } 블록을 실행 하기 위해 필요한 값을 제공하는 역할을 한다.
- var
자바 10부터 var 구문이 생겼다.
선언과 동시에 초기화를 필수로 요구한다. 컴파일러가 초기화 값을 통해 타입을 유추한다.
제약사항이 몇가지 존재한다.
1) null 사용불가
2) 지역변수만 사용 가능
3) 배열의 타입없이 초기화값을 지정할 수 없다.
Reference
coding-factory.tistory.com/265
blog.naver.com/baekseongsa/222147180426
'Live Study' 카테고리의 다른 글
[JAVA 스터디] 6주차 과제 : 상속 (0) | 2020.12.24 |
---|---|
[JAVA 스터디] 5주차 과제 : 클래스 (0) | 2020.12.18 |
[JAVA 스터디] 4주차 과제 : 제어문 (0) | 2020.12.05 |
[JAVA 스터디] 3주차 과제 : 자바 다양한 연산자 학습 (0) | 2020.11.28 |
[JAVA 스터디] 1주차 과제: JVM은 무엇이며 JAVA 코드는 어떻게 실행하는것인가. (0) | 2020.11.15 |