일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 뷰
- wargame.kr
- 써니나타스
- node
- 웹해킹
- 웹기초
- MongoDB
- gitbash
- 이진탐색트리
- Express
- 자바기초
- node.js
- materialize
- 이진트리
- 자료구조
- nodeJS
- NavBar
- mongoose
- 웹해킹기초
- CTF
- 포렌식워게임
- 포렌식
- 자바문제풀이
- GIT
- 자바
- 웹개발
- 워게임
- 워게임추천
- bootstrap
- 그래프
- Today
- Total
보안 전공생의 공부
참조 타입 | 배열 본문
출처 : https://kingpodo.tistory.com/54
http://www.tcpschool.com/java/java_datatype_basic
https://velog.io/@gkscodus11/%EC%9E%90%EB%B0%94%EC%9D%98-%EC%B0%B8%EC%A1%B0%ED%83%80%EC%9E%85
http://www.tcpschool.com/java/java_array_oneDimensional
프로그램 = 자료구조(데이터) + 알고리즘
☞ 자료구조를 통해 데이터 구상
☞ 알고리즘을 통해 문제 해결
따라서 데이터를 얼마나 잘 다루르냐가 좋은 프로그램을 작성할 수 있는 관건 !
◆ 데이터 타입 분류
· 타입(data type) : 해당 데이터가 어떻게 저장되고, 프로그램에서 어떻게 처리되어야 하는지 명시적으로 알려주는 역할
- 기본타입(primitive type) : 정수, 실수, 논리 리터럴 저장하는 타입
- 참조타입(Reference type) : 객체의 번지를 참조하는 타입 → 배열, 열거, 클래스, 인터페이스 타입
▶기본타입
실제 값을 변수 안에 저장
1) 정수형 타입
정수형 타입 |
할당되는 메모리의 크기 |
데이터의 표현 범위 |
byte |
1바이트 |
-128 ~ 127 |
short |
2바이트 |
-215 ~ (215 - 1) |
-32,768 ~ 32,767 |
||
int |
4바이트 |
-231 ~ (231 - 1) |
-2,147,483,648 ~ 2,147,483,647 |
||
long |
8바이트 |
-263 ~ (263 - 1) |
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
정수형 타입 |
할당되는 메모리의 크기 |
데이터의 표현 범위 |
byte |
1바이트 |
-128 ~ 127 |
short |
2바이트 |
-215 ~ (215 - 1) |
-32,768 ~ 32,767 |
||
int |
4바이트 |
-231 ~ (231 - 1) |
-2,147,483,648 ~ 2,147,483,647 |
||
long |
8바이트 |
-263 ~ (263 - 1) |
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
- 정수형 데이터 타입을 결정할 때, 반드시 자신이 사용하고자 하는 데이터의 최대 크기를 고려해야 함
→ 표현할 수 있는 범위를 벗어난 데이터 저장시 오버플로우/ 언더플로우 발생
( 오버플로우 : 해당 타입이 표현할 수 있는 최대 범위보다 큰 수를 저장할 때 발생
→ 최상위 비트(MSB)를 벗어난 데이터가 인접 비트를 덮어쓰므로 잘못된 결과 얻게 됨)
( 언더플로우 : 해당 타입이 표현할 수 있는 최소 범위보다 작은 수 저장할 때 발생)
타입별로 표현할 수 있는 범위 내인 경우와 범위 밖인 경우 출력프로그램이다.
2) 실수형 타입
실수형 타입 |
지수의 길이 |
가수의 길이 |
유효 자릿수 |
float |
8 비트 |
23 비트 |
소수 부분 6자리까지 오차없이 표현할 수 있음. |
double |
11 비트 |
52 비트 |
소수 부분 15자리까지 오차없이 표현할 수 있음. |
실수형 타입 |
할당되는 메모리의 크기 |
데이터의 표현 범위 |
리터럴 타입 접미사 |
float |
4바이트 |
(3.4 X 10-38) ~ (3.4 X 1038) |
F 또는 f |
double |
8바이트 |
(1.7 X 10-308) ~ (1.7 X 10308) |
D 또는 d (생략 가능함) |
- 실수형 데이터 타입을 결정할 때, 표현 범위뿐만 아니라 유효자릿수도 고려해야 함
- 오차가 발생할 수 밖에 없는 한계를 지님
3) 논리형 타입
- 참(true) / 거짓(false) 中 한 가지 값만 가질 수 있는 불리언 타입
논리형 타입 |
할당되는 메모리의 크기 |
데이터의 표현 범위 |
boolean |
1바이트 |
true 또는 false |
- 기본 값 = false;
▶ 참조타입
메모리의 주소를 값으로 갖는 변수
→ 주소를 통해 객체를 참조
출처 : https://m.blog.naver.com/PostView.nhn?blogId=jaeyoon_95
c1과 c2는 같은 값으로 보이지만,
서로 참조하고 있는 객체(힙 영역에서 생성된 객체)가 서로 다르므로 주소가 다르다!
◆ 메모리 사용
java.exe 프로그램 실행하면 JVM(Java Virtual Machine)이 실행됨
JVM은 운영체제에서 할당받은 메모리 영역(Runtime Data Area)을 메소드 영역(Method Area), 스레드 영역(Thread Area), 힙 영역(Heap area), 스택 영역(Stack Area)
출처 : http://www.tcpschool.com/java/java_array_memory
1) 메소드 영역
- 코드에서 사용되는 클래스들을 클래스 로더로 읽어 클래스별로 런타입 상수풀, 필드 데이터, 메소드 데이터. 생성자, static 변수 등이 생성되는 영역
- 모든 스레드가 공유하는 영역
( 스레드 : 하나의 프로세스 내에서 실행되는 단위)
- JVM은 자바 프로그램에서 특정 클래스가 사용되면 해당 클래스의 클래스 파일(*.class)를 읽어들여, 해당 클래스에 해당하는 정보를 메소드 영역에 저장함
2) 힙 영역
- 객체와 배열이 생성되는 영역
- JVM영역의 변수나 다른 객체의 필드에서 참조
- 만약 참조하는 변수/필드가 없으면 JVM은 쓰레기 수집기(Garbage Collector)를 실행시켜 힙 영역에서 자동으로 제거
- 낮은 주소에서 높은 주소 방향으로 할당
3) 스택 영역
- 지역변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등이 생성되는 영역
- 메소드 호출할 때마다 스택 영역 생성됨
- 선언된 블록 내에서만 존재
- push : 데이터 저장 / pop : 데이터 인출
◆ 배열
- 같은 타입의 변수들로 이루어진 유한 집합
- 각각의 값 = 배열요소(element)
- 위치를 가리키는 숫자 = 인덱스(index)
▶ 1차원 배열
· 선언
- 타입[] 배열이름 ;
- 타입 배열이름 ;
· 생성
- 배열이름 = new 타입[배열길이] ;
· 선언+생성
- 타입[] 배열이름 = new 타입[배열길이] ;
▶ 다차원 배열
· 선언 및 생성
- 타입[][] 배열이름 ;
- 배열이름 = new 타입[배열길이][배열길이] ;
· 초기화
- 타입 배열이름[행][열] = { { 1, 2 }, { 3, 4 }, { 5, 6 } } ;
1 |
2 |
3 |
4 |
5 |
6 |
▶ 가변배열 : 다양한 길이의 1차원 배열을 가지고 있는 배열, '배열의 배열' 이라고 표현함
· 선언 및 생성
- 타입[][] 배열이름 = new 타입[N][];
( N : 1차원 배열의 개수)
( 출처 : https://blockdmask.tistory.com/311 )
ex)
int[][] arr = new int [2][] ;
arr[0]=new int[2] ; arr[1]= new int[4] ;
arr[0][0] |
arr[0][1] |
arr[1][0] |
arr[1][1] |
arr[1][2] |
arr[1][3] |
※ 배열의 길이보다 적은 수의 배열 요소만 초기화할 경우 → 나머지 배열 요소들은 배열의 타입에 맞게 자동으로 초기화됨
배열의 타입 |
초깃값 |
char |
'\u0000' |
byte, short, int |
0 |
long |
0L |
float |
0.0F |
double |
0.0 또는 0.0D |
boolean |
false |
배열, 인스턴스 등 |
null |
'Language > JAVA' 카테고리의 다른 글
백준 2839번(미완) (0) | 2021.01.18 |
---|---|
백준 10430 번 (0) | 2021.01.18 |
변수와 자료형 | 조건문&반복문 | 연산자 (0) | 2021.01.17 |
자바 개발환경 구축 | 표준 입출력 (0) | 2021.01.17 |
변수와 자료형 / 조건문 & 반복문 / 연산자 (0) | 2021.01.15 |