배열
arr[0] | arr[1] | arr[2] | arr[3] | arr[4] | arr[5] |
배열은 이 표처럼 리스트 구조, 선형 구조, 연속적인 구조를 가진 자료형이다. 배열의 핵심은 다양한 데이터 타입이 모인 객체와 달리 같은 데이터 타입이 여러 개 담긴다는 점이다.
정수형 배열을 생성할 때는 아래와 같이 코드를 작성하면 된다.
// 배열을 생성만 해놓을 수 있다.
int[] a = new int[5]
// 혹은 선언과 동시에 바로 초기화할 수 있다.
int[] a = {10, 11, 12, 13, 14}
// 혹은 잘 사용하는 방법은 아니지만 new 키워드를 사용하여 선언 시 배열을 초기화할 수 있다.
int[] a = new int[]{10, 11, 12, 13, 14}
그리고 C언어처럼 자바에서도 int[][]로 선언해서 2차원 배열을 만들 수 있다.
왜 배열이 필요할까?
배열이 없는 경우를 먼저 생각해보자. 하나의 값만 가진 변수를 여러 개 선언하려면 다음과 같이 작성해야 한다.
int a, b, c;
a= 10;
b= 11;
c= 12;
그리고 이 값들의 합을 구하고 싶다면 int sum = a+b+c 를 해야 하며, 변수가 늘어남에 따라 int sum = a+b+c+d+e... 이렇게 계속 변수를 더해줘야 한다.
하지만 배열이 있다면
int[] intArr = {10,11,12};
한 번에 배열 선언과 할당을 할 수 있다. 그리고 이렇게 생긴 배열을 활용해서 반복문을 만들어서 더해야 할 값이 추가되든 줄어들든 쉽게 합산을 구할 수 있다. 정리하면 배열을 이용해서 동일한 유형의 여러 값을 저장하고 조작하는 것을 보다 체계적이고 효율적으로 할 수 있당!!
배열의 종류
1. 기본자료형 배열 : int, float, boolean 등 요소가 기본자료형으로 구성된 배열
2. 객체형 배열 : 객체를 참조하는 참조 변수들의 모음
3. 1차원 배열 : 배열의 요소가 값인 배열
4. 2차원 배열 : 배열의 요소로 1차원 배열을 가지는 배열
객체 배열의 반복문
public class CarPractice {
public static void main(String[] args) {
Car[] carArr = new Car[3];
carArr[0] = new Car();
carArr[0].model = "Morning";
carArr[0].price = 2000;
carArr[0].make = "KiA";
carArr[0].year = 2023;
carArr[0].isGasolineModel = true;
carArr[1] = new Car();
carArr[1].model = "Seltos";
carArr[1].price = 2700;
carArr[1].make = "KiA";
carArr[1].year = 2021;
carArr[1].isGasolineModel = true;
carArr[2] = new Car();
carArr[2].model = "Genesis";
carArr[2].price = 6000;
carArr[2].make = "Hyundai";
carArr[2].year = 2023;
carArr[2].isGasolineModel = true;
for (int i = 0; i < carArr.length; i++) {
System.out.println("Car " + (i + 1) + ":");
System.out.println("Model: " + carArr[i].model);
System.out.println("Price: " + carArr[i].price);
System.out.println("Make: " + carArr[i].make);
System.out.println("Year: " + carArr[i].year);
System.out.println("Is Gasoline Model: " + carArr[i].isGasolineModel);
System.out.println("-----------------------");
}
}
}
// 또는
public class CarPractice {
public static void main(String[] args) {
Car carA = new Car();
carA.model = "Morning";
carA.price = 2000;
carA.make = "KiA";
carA.year = 2023;
carA.isGasolineModel = true;
Car carB = new Car();
carB.model = "Seltos";
carB.price = 2700;
carB.make = "KiA";
carB.year = 2021;
carB.isGasolineModel = true;
Car carC = new Car();
carC.model = "Genesis";
carC.price = 6000;
carC.make = "Hyundai";
carC.year = 2023;
carC.isGasolineModel = true;
Car[] carArr = new Car[3];
carArr[0] = carA;
carArr[1] = carB;
carArr[2] = carC;
for (int i = 0; i < carArr.length; i++) {
Car car = carArr[i];
System.out.println("Car " + (i + 1) + ":");
System.out.println("Model: " + car.model);
System.out.println("Price: " + car.price);
System.out.println("Make: " + car.make);
System.out.println("Year: " + car.year);
System.out.println("Is Gasoline Model: " + car.isGasolineModel);
System.out.println("-----------------------");
}
}
}
객체 배열의 반복문 사용도 기본 배열의 반복문 사용과 비슷하다.
두 번째 방법에서 Car car = carArr[i] 이 부분에서 Car 유형의 car라는 변수를 선언해서 반복문을 진행한다. car 변수는 배열의 현재 인덱스에 Car 개체를 저장하는 데 사용된다. car가 아니라 someCar와 같이 내가 원하는 변수명으로 지어도 된다.
나는 위 두 방법 중 어떤 방법이 더 효율적인 방법인지 궁금했다! 챗지피티 선생님 왈
두 접근 방식 모두 유효하며 동일한 출력을 생성합니다. 그러나 두 번째 접근 방식은 일반적으로 특히 더 큰 배열이나 더 복잡한 개체를 처리할 때 더 효율적이고 유지 관리가 쉬운 것으로 간주됩니다.
첫 번째 접근 방식에서는 먼저 배열을 만든 다음 각 요소에 개별적으로 값을 할당합니다. 이는 특히 배열에 많은 수의 요소가 있는 경우 오류가 발생하기 쉽고 지루할 수 있습니다. 또한 요소에 값을 잘못 할당하면 잘못된 데이터가 생성될 수 있습니다.
반면에 두 번째 접근 방식에서는 Car 개체의 인스턴스를 만들고 배열 요소에 직접 할당합니다. 이것은 더 깨끗하고 읽기 쉽고 오류가 덜 발생합니다. 또한 배열에 영향을 주지 않고 Car 개체의 속성을 쉽게 수정하거나 확장할 수 있습니다.
또한 두 번째 접근 방식을 사용하면 각 Car 객체(carA, carB, carC)에 대해 별도의 변수를 생성할 수 있으므로 필요한 경우 개별 객체로 작업하기가 더 쉽습니다. 또한 코드의 다른 부분에서 개별 Car 객체를 사용할 수 있으므로 코드 재사용성이 향상됩니다.
전반적으로 두 번째 접근 방식은 보다 체계적이고 유연하며 유지 관리가 용이합니다. 일반적으로 Java에서 객체 배열로 작업할 때 두 번째 접근 방식을 사용하는 것이 좋습니다.
라고 한다. 참고하장!!
배열의 요소를 한 번에 출력하려면?
자바스크립트를 알고 나서 자바를 배우니 불편하게 느껴지는 것 중 하나는 출력이 불편하다는 점이다. 자바스크립트에서는 그냥 console.log(data)를 하면 그 data가 숫자형 변수든, 객체든, 배열이든 한 번에 출력할 수 있다. 하지만 자바는 그렇지 않다. API를 import해야 할 때도 있고 자바스크립트보다 출력 과정이 복잡하다ㅠ_ㅠ
import java.util.Arrays;
public class ArrayFirst {
public static void main(String[] args) {
int[] arr = new int[5];
arr[0] = 5;
arr[1] = 10;
arr[2] = 15;
arr[3] = 20;
arr[4] = 25;
System.out.println("arr = " + arr);
// arr = [I@3cda1055
for(int i=0; i<arr.length; i++){
// var, let, const 선언 키워드를 사용하는 자바스크립트와 달리 int로 데이터 타입을 알려줘야 한다.
System.out.println("arr[i] = " + arr[i]);
}
// arr[i] = 5
// arr[i] = 10
// arr[i] = 15
// arr[i] = 20
// arr[i] = 25
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
// Arrays.toString(arr) = [5, 10, 15, 20, 25]
}
}
당연히 자바스크립트처럼 println(arr)하면 자바스크립트처럼 [5,10,15,20,25]가 나오겠지?? 했는데 아니었다. [I@3cda1055 ..?? 이게모람🥲 다행히 정처기 공부한 짬밥으로 눈치껏 해시코드로 구성된 arr가 저장된 메모리 주소라는 걸 알아챘다.
그러면 반복문으로는 각 요소들을 볼 수 있을까? 다행히 볼 수 있당!!
그러면 내가 원하는 [5,10,15,20,25] 이 형태로 보려면 어떻게 해야 할까? 우리 챗지피티 선생님께서 알려주시길 java.util.Arrays를 import해서 봐야 한다고 한다. 그래서 시키는대로 했더니 원하는 형태로 결과가 출력되었당!!
아무래도 자바와 친해지려면 어떤 매소드들이 있는지 머리에 좀 담아놔야할 것 같다...배열의 요소 전체를 출력할 때조차 import가 필요하다닛..자바스크립트에 비하면 까탈스러운 프로그래밍처럼 느껴진다. 얼른 친해지자 자바야...
'> 개발 > JAVA' 카테고리의 다른 글
자바 Scanner (0) | 2023.07.30 |
---|---|
자바의 배열 : 1차원배열과 2차원배열 (0) | 2023.07.30 |
자바의 객체와 클래스 (0) | 2023.07.23 |
자바의 기본 자료형 : 숫자자료형, 문자자료형, 형 변환 (0) | 2023.07.15 |
자바의 변수와 자료형, 기본자료형의 종류, 할당과 초기화, 심볼 테이블 (0) | 2023.07.14 |
댓글