개발새발

[Java] 배열과 리스트 2 : ArrayList 본문

Java/개념을 Java

[Java] 배열과 리스트 2 : ArrayList

칸쵸. 2023. 9. 20. 01:30
728x90

순식간에 돌아온 배열과 리스트 2탄!

정확한 정체는 고사하고 선언하는 것도 제대로 모르는 나를 위해 빨리 돌아왔다 호호

공부하면서 쓰는 블로그~ 레즈고


1. ArrayList

Java에서 제공하는 (유)동적 배열로 크기를 동적으로 조정할 수 있는 자료구조

 

기존에 배운 배열은 항상 사이즈를 정해서 선언을 하거나, 값을 넣어서 초기화와 동시에 선언이 가능했다.

하지만 만약에 배열 사이즈 변경을 해야되는 상황이 온다면? 배열 요소가 몇 되지 않으면 큰 문제는 아니겠지만, 사실 열댓개만 넘어가도 코드를 수정하기 귀찮을 것이고, 몇 백 개의 요소가 존재한다면 이걸 어떻게 해! 소리가 절로 나올 것이다.

그래서 배열요소를 일일이 수정하는 것이 어렵다는 특징이 있다.

 

이때 자바에서 제공하는 아주 기가막힌 객체 배열 클래스가 있는데~ 그것이 바로 ArrayList인 것이다!

배열과 다른 점으로는...

객체 배열을 좀 더 쉽게 사용할 수 있도록 하는 것인데, 이 클래스는 객체 배열을 관리할 수 있는 멤버 변수와 메서드를 제공하므로 사용법 자체도 어렵지 않다. 

 

ArrayList의 특징은 다음과 같다

  1. 배열과 마찬가지로 요소들을 순서대로 저장하여 인덱스를 사용하고, 이를 통해 요소에 접근할 수 있음
  2. 배열과는 달리 크기를 미리 지정할 필요가 없으며, 요소를 추가하거나 제거할 때 자동으로 크기가 조정 됨

 

1) ArrayList 클래스 사용하기

 

ArrayList를 사용하는 기본 형식은 다음과 같다.

ArrayList<객체의 자료형> 배열이름 = new ArrayList<객체의 자료형>();

그리고 ArrayList는 java.util 패키지에 구현되어 있는 클래스이므로, 그냥은 사용할 수 없고 코드 맨 윗 부분에 ArrayList를 사용할 것이라고 선언하는 import가 필요하다. (import java.util.ArrayList;)

package arrayList;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {
		
		//ArrayList 선언
		ArrayList<String> pokemon = new ArrayList<String>();
		
		//add() 메서드로 요소 값 추가
		pokemon.add("가디");
		pokemon.add("윈디");
		pokemon.add("델빌");
		pokemon.add("헬가");
		pokemon.add("블레이범");
		
		System.out.println(pokemon);
	}

}

ArrayList 출력 결과

 

 

2) ArrayList 클래스형으로 선언하기

배열처럼.. 그냥 기본자료형으로 선언할 수도 있지만.. 생성한 다른 클래스형을 자료형으로 또 사용이 가능한 특징이 있는데.. 졸리군요 투비컨티뉴..

자자졸, 그리고 머대자 병에 걸린 현대인은 이만...

230927 무려 일주일만에 완성하러 돌아온 사람입니다 푸하하

 

사실요 이제와서 말하기 좀 그런데 ArrayList는 그.. 자바에서 제공하는 어떤 클래스인 것도 그렇고 뒤에 나올 인터페이스인 List와 비교해서 또 설명을 하고싶걸랑요..? 근데 제가 아직 거기까진 공부를 제대로 못해서 일단은 진짜 그냥 '사용법'만 정리해놓을게요. 일주일만에 돌아와서 한다는 소리가 참 구차하죠? 호호 하지만 어떡해요 진짜 공부를 못한걸 ㅠㅠ 암튼 이제 진짜루 이어서 써보겠습니다

 

일단 그.. Pokemon 클래스 하나를 만들어볼게요

public class Pokemon{
	//멤버변수
    String pokemonName; //포켓몬 이름
    int pokedexNum; //포켓몬 도감번호
    
    //생성자
    public Pokemon(String pokemonName, int pokedexNum) {
    	this.pokemonName = pokemonName;
        this.pokedexNum = pokedexNum;
    }
    
    //메서드
    public void PokemonInfo() {
    	System.out.println(pokemonName + "(" + pokedexNum + ")");
    }
}

그리고 이 Pokemon 클래스를 자료형으로 받는 ArrayList를 한번 구현해보겠습니다

package pokemonArrayList;

import java.util.ArrayList;

public class PokemonArrayList {

	public static void main(String[] args) {
		
		//Pokemon 클래스를 자료형으로 받는 firePokemon ArrayList 선언 (불타입 포켓몬들만 넣을래)
		ArrayList <Pokemon> firePokemon = new ArrayList<Pokemon>();
		
		firePokemon.add(new Pokemon("가디",58));
		firePokemon.add(new Pokemon("윈디",59));
		firePokemon.add(new Pokemon("브케인",155));
		firePokemon.add(new Pokemon("마그케인",156));
		firePokemon.add(new Pokemon("블레이범",157));
		
		for(int i=0 ; i<firePokemon.size() ; i++) {
			//Pokemon 클래스의 인스턴스 pokemon
			Pokemon pokemon = firePokemon.get(i);
			pokemon.PokemonInfo();
		}
		
		System.out.println(); //줄 띄움
		
		System.out.println("===향상된 for문 사용===");
		for(Pokemon pokemon : firePokemon) {
			pokemon.PokemonInfo();
		}

	}

}

출력결과

아주 잘 나옵니다. 암튼 위 코드를 통해 분석한 결과~

 

1. 배열과 다르게 배열 전체 길이를 미리 지정할 필요가 없다.

    → add() 메서드를 사용해 생성자만 호출하고 요소를 추가하면 된다

 

2. ArrayList의 요소를 하나 가져오는 메서드 get()

 

3. 배열의 크기는 '배열이름.length'를 통해 가져왔지만, ArrayList는 size() 메서드를 사용

    → size() : 배열에 유효한 값이 저장된 요소 개수 반환

 

firePokemon.add(new Pokemon("윈디",59));

저는 이 코드에 익숙해지는데 가장 힘들었던 것 같네요. 사실 아직도 어색할지도...


아무튼 사용법 자체는 이렇게 끝입니다.. 인터페이스까지 배워서 List랑 다시 찾아올게요~~~

안녕~!

 

'Java > 개념을 Java' 카테고리의 다른 글

[Java] Getter & Setter란 무엇인가?  (0) 2023.09.24
[Java] JUnit  (0) 2023.09.22
[Java] 배열과 리스트 1 : Array ~ 다차원 배열  (1) 2023.09.18
[Java] API  (1) 2023.09.14
[Java] 추상클래스 Abstract  (0) 2023.09.12