자바 데이터 타입들을 알아봅시다 #6 😀
자바에는 무수히 많은 데이터 타입들이 존재합니다. 오늘은 그 중에서도 배열에 대해 알아봅시다.
[ 자바 자료형 링크 ]
1. [JAVA] 자바 자료형 알아보기 #1 - byte, short, int, long
2. [JAVA] 자바 자료형 알아보기 #2 - float,double
3. [JAVA] 자바 자료형 알아보기 #3 - boolean
4. [JAVA] 자바 자료형 알아보기 #4 - char, String
5. [JAVA] 자바 자료형 알아보기 #5 - 래퍼 클래스(Wrapper class)
배열이란 ,
한가지 타입을 가진 데이터들을 연속된 공간에 저장하기 위한 자료구조입니다.
배열을 선언하는 방법 2가지
- 배열에 넣을 데이터를 배열을 선언할때 정의하는 방법
- 데이터를 미리 정의하지 않고 배열의 크기만 정의하는 방법
이렇게 두가지가 존재합니다.
1. 배열에 넣을 데이터를 배열을 선언할때 정의하는 방법
DataType[] 배열이름 = { 데이터1, 데이터2 , 데이터3 , ... };
int[] nums = {10,20,30,40,50};
double[] nums2 = {10.1,10.2,10.3,10.4,10.5};
boolean[] truth = {true,false,false,true,true};
String[] names = {"이00","김00","최00","박00"};
Speaker[] speakers = {new Speaker(),new Speaker(),new Speaker()}; // 자신이 만든 클래스로도 가능
이 방법은 데이터들의 값을 알고 있을때 사용하면 편리합니다.
2. 데이터를 미리 정의하지 않고 배열의 크기만 정의하는 방법
DataType[] 배열이름 = new DataType[배열 크기];
int[] nums = new int[5]; // 0으로 초기화
String[] names = new String[10]; // null로 초기화
Car[] cars = new Car[5];
데이터들을 모를때 배열의 크기만 정의하는 방법이 있습니다.
이제 배열을 사용하는 방법에 대해 알아봅시다.
배열 값 복사 - clone()
int[] nums = {10,20,30,40,50};
int[] a = nums.clone();
int[] b = nums;
clone()을 이해하기 위해 위 a,b의 차이점을 알아봅시다!
배열이 만들어지면 각 배열들은 고유의 참조값을(id=*) 가집니다.
위 사진에서 id=18처럼 18이 nums 배열의 참조값입니다.
이때 같은 id 값을 가지고 있으면 같은 힙 영역의 공간을 참조하고 있습니다.
메모리 영역까지 이해하긴 복잡하니 그냥 같은 공간을 참조하고 있다고 알고있으면 되겠습니다.
int b[] = nums; 부터 살펴봅시다.
int[] nums = {10,20,30,40,50};
int[] b = nums;
nums[0] = 999;
int[] b = nums; 까지 실행한 모습입니다.
nums와 b가 같은 id를 가지고 있는 것을 볼 수 있습니다.
nums[0] = 999;를 실행하고 난 모습입니다.
b와 nums는 같은 공간을 참조하고 있기 때문에 한 곳에서 변경이 일어나면 다른 한 곳에서도 변경이 일어납니다.
nums와 b의 0번째 인덱스가 999로 변경된 것을 볼 수 있습니다.
int[] a = nums.clone(); 을 봅시다.
int[] nums = {10,20,30,40,50};
int[] a = nums.clone();
nums[0] = 999;
clone은 참조값을 복사한것이 아닌 값을 복사 한 것입니다.
값을 복사한 것이기 때문에 참조값, 즉 id가 다르게 나옵니다.
그래서 nums의 값을 바꿔도 a의 값이 바뀌지 않습니다.
clone()은 값을 복사한다고 알면 되겠습니다.
배열의 크기 - length
int length = nums.length;
length는 배열의 크기를 구해줍니다.
배열의 값 구하기 - for 문 / 확장 for문 을 사용해서 배열의 값을 구해봅시다.
Car Class
public class Car {
public void drive() {
System.out.println("달려요!");
}
}
main에서 Car 클래스로 배열을 만들어 볼 것이기 때문에 Car 클래스를 선언해줍니다.
main
//1. Car type 을 담을 수 있는 방 5개짜리 빈 배열객체를 생성해서
// 그 참조값을 cars 라는 이름의 지역변수에 담아 보세요
Car[] cars = new Car[5];
//2. 반복문 돌면서 cars 배열의 모든방에 각각다른 Car객체의 참조값을 넣어보세요.
for(int i=0;i<cars.length;i++) {
cars[i] = new Car();
}
//3. 반복문 돌면서 cars배열안에 있는 Car객체의 참조값을 하나씩 참조해서
//drive() 메소드를 호출해보세요.
for(int i=0;i<cars.length;i++) {
//i 번째 방에 저장된 값을 tmp라는 임시변수에 담기
Car tmp = cars[i];
//tmp 안에 있는 참조값을 이용해서 메소드 호출
tmp.drive();
}
Car type을 담을 수 있는 방 5개짜리 빈 배열객체를 생성해서 cars에 담아줍니다.
이 배열의 길이만큼 반복문을 실행하면서 새로운 Car객체의 참조값을 넣어줍니다.
만들어진 배열의 값을 구하기 위해서 cars의 길이만큼 반복문을 실행하면서 cars[i]의 drive 메소드를 출력해줍니다.
확장 for문을 사용하여 구하기
for(Car tmp:cars) {
tmp.drive();
}
확장 포문을 사용할 수 도 있습니다.
확장for문 형식
for(DataType 변수이름 : 배열이름) { }
'Languages > JAVA' 카테고리의 다른 글
[JAVA] DTO vs VO vs Entity / DTO 살펴보기 (0) | 2021.11.10 |
---|---|
[JAVA] 랜덤 숫자(난수) 생성하기 - Random , Math (3) | 2021.11.09 |
[JAVA] HashSet의 개념, 사용법, 예제 (0) | 2021.11.09 |
[JAVA] HashMap의 개념, 사용법, 예제 (0) | 2021.11.08 |
[JAVA] ArrayList 의 개념, 사용법, 예제 (0) | 2021.11.08 |