일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 백준 #알고리즘 #파이썬 #코딩테스트
- java #자바 #동빈나
- 백준 #파이썬 #알고리즘 #코딩테스트
- 파이썬
- java #자바 #나동빈
- BFS
- DFS
- react #리액트 #동빈나
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- css #생활코딩 #웹
- java #자바
- react #리액트 #동빈나 #나동빈 #유튜브강의
- 백트랙킹
- css #웹 #생활코딩
- 재귀
- 파이썬 #백준 #알고리즘 #코딩테스트
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- 자바 #java
- dp
- java #자바 #생활코딩
- 프로그래머스
- 다익스트라
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- 투포인터
- Dijkstra
- 백준
- 다이나믹프로그래밍
- PYTHON
- 코딩테스트
- 알고리즘
- Today
- Total
커리까지
[백기선] 2주차 과제: 자바 데이터 타입, 변수 그리고 배열 본문
프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입은 기본형으로도 불리며 논리형과 숫자형 문자열형 등의 기본적인 데이터 타입이다.
- 자바의 기본 타입으로서 정수, 실수, 문자, 논리 리터럴을 직접 저장하는 타입이다.
값의 종류 | 기본 타입 | 메모리 사용 | 크기 | 저장되는 값의 범위 |
---|---|---|---|---|
정수 | byte | 1 byte | 8 byte | -27 ~ (27 - 1)(-128 ~ 127) |
char | 2 byte | 16 bit | 0 ~ 216 -1(유티코드 \u0000 ~ \uFFFF, 0 ~ 65535) | |
short | 2 byte | 16 bit | -215 ~ (215 -1)(-32,768 ~ 32,767) | |
int | 4 byte | 32 bit | -231 ~ (231 -1)(-2,147,483,648 ~ 2,147,483,647) | |
long | 8 byte | 64 bit | -263 ~ (263 - 1) | |
실수 | float | 4 byte | 32 bit | (+/-)1.4E-45 ~ (+/1)3.4028235E38 |
double | 8 byte | 64 bit | (+/-)4.9E-324 ~ (+/-)1.7976931348623157E308 | |
논리 | boolean | 1 byte | 8 bit | true, false |
- byte 타입
- 색상 정보 및 파일 또는 이미지 등의 이진데이터를 처리할 때 주로 사용
- short 타입
- 정수값을 저장할 수 있는 데이터 타입이며, C언어와의 호환을 위해 사용되며 비교적 자바에서는 잘 사용하지 않는다.
- int 타입
- 자바에서 정수 연산을 하기 위한 기본 타입이며 byte 타입 또는 short 타입의 변수를 + 연산하며 int 타입을 변환된 후 연산되고 연산의 결과 역시 int가 된다.
- 그 이유는 자바에서 정수 연산을 4byte로 처리하기 때문이다.
- long 타입
- 수치가 큰 데이터를 다루는 프로그램에서는 long 타입이 필수적으로 사용되며, 대표적인 예가 은행 및 우주와 관련 프로그램 들이 있다.
- long 타입의 변수를 초기화 할 때에는 정수값 뒤에 소문자 'l'이나 대문자 'L'을 붙일 수 있다.
- 4byte 정수 데이터가 아니라 8byte 정수임을 컴파일러에게 알려주기 위해서다.
- int 타입의 범위를 넘어가는 경우 소문자 'l' 혹은 대문자 'L'을 붙여야 에러가 나지 않기에 반드시 붙여줘야 한다.
- 실수 타입(float, double)
- 메모리 사용 크기에 다라 float, double로 나뉜다.
- 논리 타입(boolean)
- 두 가지 상태값을 저장할 필요성이 있을 경우 사용한다.
- 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는데 주로 이용한다.
프리미티브 타입과 레퍼런스 타입
- 자바 변수의 데이터 타입에는 프리미티브 타입과 레퍼런스 타입이 존재한다.
- 프리미티브(기본형 변수)는 언어에서 사전 정의 되어있는 데이터 타입이며 레퍼런스 타입(참조형 변수)는 프리미티브의 wrapper객체로서 object를 상속한 개체형으로 나타난다.
기본형 변수
- 실제 값을 저장
참조형 변수
어떤 값이 저장되어 있는 주소를 값으로 가짐
프로그래머가 직접 만들어 추가할 수 있어서 그 개수가 정해져 있지 않다.
참조형 변수를 선언할 때 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름이 변수의 타입이 된다.
새로운 클래스를 작성한다는 것은 새로운 참조형을 추가하는 것이 된다.
선언 방법
클래스 이름 변수명; Date today;
Date 클래스 타입의 참조변수 today를 선언하기
Date today = null; or Date today = new Date();
참조형 변수는 null 또는 객체의 주소를 값으로 갖고 참조변수의 초기화는 위와 같이 한다.
객체를 생성하는 연산자 new의 ㅅ연산결과는 생성된 객체의 주소이며 이 주소가 대입연사자(=)에 의해 참조변수 today에 저장되고 참조변수 today를 이용해 생성된 객체를 사용할 수 있다.
자바는 C언어와 달리 String을 제외한 참조형 변수 간의 연산이 불가능하므로 실제 연산에 사용되는 것은 모두 기본형 변수이다.
리터럴
- 프로그램에서 직업 표현한 값으로 소스 코드의 고정된 값을 대표하는 용어이다.
- 종류는 정수, 실수, 문자, 논리, 문자열 리터럴이 있다.
정수 리터럴
10진수, 8진수, 16진수, 2진수 리터럴이 있다.
int a = 15; int b = 015; int c = 0x15; int d = 0b0101;
15 -> 10진수 리터럴 15 015 -> 0으로 시작하면 8진수, 십진수값으로 13을 출력 0x15 -> 0x로 시작하면 16진수, 십진수값으로 21을 출력 0b0101 -> 0b로 시작하면 2진수, 십진수값으로 5를 출력
실수 리터럴
소수점 형태나 지수 형태로 표현한 값이며 double로 컴파일 되지만 숫자 뒤에 f(float) 혹은 d(double)을 명시적으로 붙이기도 한다.
double f = 0.1234; double g = 1234E-4;
float는 반드시 f를 붙여줘야 하고 double는 생략가능하다.
float h = 0.1234f; double i = .1234D;
문자 리터럴
단일 인용부호('')로 문자를 표현한다.
char a = 'H'; char b = "한"; char c = \uae00;(유니코드값) (\u다음에 4자리 16진수로, 2바이트의 유니코드(Unicode))
문자열 리터럴
문자열은 기본타입이 아니며, ("")로 문자열을 표현한다.
String lter = "JAVA"; lter + 26 = "lter26"(문자열 출력)
논리 타입 리터럴, 외 리터럴
boolean 타입 변수에 치환하거나 조건문에 이용한다.
boolean a = true; boolean b = 10 >0; (여기선 b값이 true) boolean c = 0; (c언어와 달리 boolean 타입으로 1,0을 참, 거짓으로 사용 불가)
null 리터럴은 레퍼런스에 대입해서 사용한다.
기본타입에는 사용이 불가하고 String 같은 경우에는 사용가능하다.
int a = null(에러 발생) String str = null; str = "JAVA"
변수 선언 및 초기화하는 방법
변수 선언하기
public class TestObject {
int number;
String name;
}
변수 초기화 하기
public class TestObject {
int number = 123;
String name = "test"
}
변수의 스코프와 라이프타임
변수의 스코프
- 변수에 접근하거나 접근할 수 있는 유효 범위/ 영역이다.
- 일반적인 규칙은 변수가 선언된 블록내에서만 엑세스 할 수 있다는 것이다.
- 블록은 왼쪽 중괄호
{
로 시작하고 오른쪽 중괄호}
로 끝난다.
변수의 라이프 타임
- 변수가 메모리에서 살아있는 기간을 말한다.
Instance Variables
- 정의
- 클래스 내부와 모든 메소드 및 블록 외부에서 선언된 변수
- scope
- 정적 메서드를 제외한 클래스 전체
- 라이프타임
- 객체가 메모리에 남아있을 때까지
- 예시
Class Variables
- 정의
- 클래스 내부, 모든 블록 외부에서 선언되고 static으로 표시된 변수
- scope
- 클래스 전체
- 라이프타임
- 프로그램이 끝날때까지 또는 클래스가 메모리에 로드 되는 동안
- 예시
Local Variables
- 정의
- 인스턴스 및 클래스 변수가 아닌 모든 변수
- scope
- 선언된 블록 내에 있음
- 라이프타임
- 컨트롤이 선언 된 블록을 떠날때까지
- 예시
타입 변환, 캐스팅 그리고 타입 프로모션
타입변환
- 데이터 타입을 다른 데이터 타입으로 변환하는 것이다.
- 타입변환에는 두 가지 종류가 있다.
- 자동(묵시적) 타입 변환
- 강제(명시적) 타입 변환
캐스팅
- 강제적으로 큰 데이터를 타입을 작은 데이터 타입으로 쪼개어서 저장하는 것을 강제 타입 변환(Casting)이라고 한다.
- 예시
int testIntValue = 123456789;
byte textByteValue = (byte) testIntValue; // 강제 타입 변환 (캐스팅)
double doubleTestValue = 3.14;
int textIntValue = (int) doubleTestValue; // textIntValue는 정수 부분인 3만 저장한다.
타입 프로모션
- 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것이다.
- 자동 타입 변환은 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 발생한다.
- 프로모션의 경우엔 변환 이전의 값과 변환 이후의 값이 동일한다.
byte byteTestValue = 10;
int intTestValue = byteTestValue; // 자동 타입 변환이 일어난다.
1차 및 2차 배열 선언하기
배열
- 동일 타입의 값을 여러개 취급할 수 있는 기능이다.
- 인덱스라고 불리는
[]
로 감싼 0부터 시작하는 정수를 사용하여 배열의 길이나 순서를 나타낼 수 있다. - 타입에 따라 디폴트 값으로 채워진다.
- 참조 : null
- float, double : 0.0
- bool : false
- char : \u0000
1차 배열 선언
int []array = new int[10];
- 초기 값이
{0,0,0,0,0,0,0,0,0,0}
과 같이 0으로 10개 값이 초기화된다.
1차 배열에 값 넣기
int[] array = new int[5];
array[0] = 1;
array[1] = 3;
array[2] = 6;
array[3] = 1;
array[4] = 1;
2차 배열 선언
int [][]array = new int[10][10];
2차 배열에 값 넣기
int [][]array = new int[5][5];
array[0][0] = 1;
array[0][1] = 12;
array[0][2]= 2;
array[1][0] = 1;
array[2][0] = 1;
...
타입 추론, var
- Java 10에서
var
라는 Local Variable Type-Inference가 추가 되었다. - 타입추론
- 정적 타이핑을 지원하는 언어에서, 타입이 정해지지 않은 변수에 대해서 컴파일러가 변수의 타입을 스스로 찾아낼 수 있도록 하는 기능이다.
- 즉, 타입을 명시하지 않아도 된다는 뜻이고 이것은 코드량을 줄이고 코드의 가독성을 높일 수 있다.
- 기존 자바는 일반 변수에 대해 타입추론이 지원되지 않고, generics와 lambda식에 대해서만 타입 추론을 지원하고 있었다.
- 다이아몬드 연산자를 같이 사용하면 어떤 데이터 타입이 들어오는지 확인하기 어려워 컴파일 에러가 발생한다.
지원예시
var name = "test";
자바 9 이하
String name = "test";
자바 10 이상
var name = "test";
참고
https://mine-it-record.tistory.com/100
https://league-cat.tistory.com/410
'자바' 카테고리의 다른 글
[백기선]4주차 과제: 제어문 (0) | 2021.10.24 |
---|---|
[백기선] 3주차 과제: 연산자 (0) | 2021.10.24 |
[백기선] 1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) | 2021.10.03 |
생성자 (0) | 2021.07.02 |
인스턴스 생성과 힙 메모리 (0) | 2021.06.30 |