자바 - List 인터페이스

안녕하세요, 자바 프로그래밍에 도전하는 여러분! 오늘 우리는 자바 프로그래밍에서 가장 기본적이고 다재다능한 개념 중 하나인 List 인터페이스에 대해 깊이 알아보겠습니다. 프로그래밍 초보자라도 걱정하지 마세요; 저는 여러분을 단계별로 안내해 드릴 것입니다. 수년 동안 수많은 학생들을 가르쳐온 경험을 바탕으로 말이죠. 그럼 커피 한 잔(또는 차, 만약 당신의 취향이라면)을 손에 들고, 이 흥미로운 여정에 함께 뛰어들어 보겠습니다!

Java - List Interface

List는 무엇인가요?

구체적인 내용에 들어가기 전에 간단한 비유로 설명해 보겠습니다. 파티를 계획하고 손님들을 관리해야 한다고 가정해 봅시다. 그들의 이름을 종이에 적을 수 있죠? 자바에서 List는 그 종이와 비슷하지만, 훨씬 강력하고 유연합니다.

자바에서 List는 요소들의 순서된 컬렉션을 나타내는 인터페이스입니다. 이는 자바 컬렉션 프레임워크의 일부로, 일반적으로 재사용할 수 있는 컬렉션 데이터 구조를 구현하는 클래스와 인터페이스의 모음입니다.

List의 주요 특성

  1. 순서가 있음: List에 있는 요소들은 그들의 삽입 순서를 유지합니다.
  2. 중복 허용: List에는 여러 개의 동일한 요소를 가질 수 있습니다.
  3. 인덱스 기반: List의 요소는 인덱스(위치)를 통해 액세스할 수 있습니다.

List 생성하기

이제 코드로 손을 대보겠습니다! 자바에서는 List 인터페이스를 구현하는 두 가지 클래스를 주로 사용합니다: ArrayList와 LinkedList. 지금은 ArrayList에 집중하겠습니다. ArrayList는 가장 일반적으로 사용됩니다.

import java.util.ArrayList;
import java.util.List;

public class ListExample {
public static void main(String[] args) {
// String 타입의 List 생성
List<String> guestList = new ArrayList<>();

// 손님을 List에 추가
guestList.add("Alice");
guestList.add("Bob");
guestList.add("Charlie");

System.out.println("손님 명단: " + guestList);
}
}

이 코드를 실행하면 다음과 같은 출력을 볼 수 있습니다:

손님 명단: [Alice, Bob, Charlie]

이제 이 코드가 어떻게 작동하는지 설명해 보겠습니다:

  1. 필요한 클래스를 java.util 패키지에서 가져옵니다.
  2. String 타입의 guestList List를 생성합니다.
  3. add() 메서드를 사용하여 손님을 List에 추가합니다.
  4. 마지막으로 전체 List를 출력합니다.

List의 일반적인 연산

이제 손님 명단이 준비되었으니, List에서 수행할 수 있는 일반적인 연산을 탐구해 보겠습니다.

요소 추가

이미 add() 메서드를 사용하여 요소를 추가하는 방법을 보았지만, 더 많은 방법이 있습니다!

// 특정 인덱스에 요소 추가
guestList.add(1, "David");

// 여러 요소를 한 번에 추가
List<String> moreGuests = Arrays.asList("Eve", "Frank");
guestList.addAll(moreGuests);

System.out.println("업데이트된 손님 명단: " + guestList);

출력:

업데이트된 손님 명단: [Alice, David, Bob, Charlie, Eve, Frank]

요소 액세스

List의 요소에 액세스하려면 get() 메서드를 사용합니다:

String firstGuest = guestList.get(0);
System.out.println("첫 번째 손님은: " + firstGuest);

출력:

첫 번째 손님은: Alice

요소 제거

인덱스나 요소 자체를 사용하여 요소를 제거할 수 있습니다:

// 인덱스에 의한 제거
guestList.remove(2);

// 요소에 의한 제거
guestList.remove("Frank");

System.out.println("제거 후: " + guestList);

출력:

제거 후: [Alice, David, Charlie, Eve]

요소 존재 여부 확인

List에 특정 요소가 있는지 확인하려면 contains() 메서드를 사용합니다:

boolean isAliceInvited = guestList.contains("Alice");
System.out.println("Alice가 초대됐나요? " + isAliceInvited);

출력:

Alice가 초대됐나요? true

List의 크기 확인

List에 있는 요소의 수를 알고 싶다면 size() 메서드를 사용합니다:

int numberOfGuests = guestList.size();
System.out.println("손님 수: " + numberOfGuests);

출력:

손님 수: 4

List을 반복하다

List의 요소를 반복하는 것은 가장 일반적인 연산 중 하나입니다. 자바는 여러 가지 방법을 제공합니다:

for-each 루프 사용

가장 직관적이고 가독성이 높은 방법입니다:

System.out.println("손님 명단:");
for (String guest : guestList) {
System.out.println("- " + guest);
}

출력:

손님 명단:
- Alice
- David
- Charlie
- Eve

전통적인 for 루프 사용

인덱스에 접근이 필요하다면 전통적인 for 루프를 사용할 수 있습니다:

System.out.println("번호별 손님 명단:");
for (int i = 0; i < guestList.size(); i++) {
System.out.println((i + 1) + ". " + guestList.get(i));
}

출력:

번호별 손님 명단:
1. Alice
2. David
3. Charlie
4. Eve

이터레이터 사용

보다 고급된 연산을 위해 이터레이터를 사용할 수 있습니다:

System.out.println("이름이 'A'로 시작하는 손님 제거:");
Iterator<String> iterator = guestList.iterator();
while (iterator.hasNext()) {
String guest = iterator.next();
if (guest.startsWith("A")) {
iterator.remove();
System.out.println("제거됨: " + guest);
}
}
System.out.println("업데이트된 손님 명단: " + guestList);

출력:

이름이 'A'로 시작하는 손님 제거:
제거됨: Alice
업데이트된 손님 명단: [David, Charlie, Eve]

List 메서드 표

다음은 일부 일반적인 List 메서드의 표입니다:

메서드 설명
add(E e) List의 끝에 요소 추가
add(int index, E element) 지정된 위치에 요소 삽입
get(int index) 지정된 위치의 요소 반환
remove(int index) 지정된 위치의 요소 제거
remove(Object o) 첫 번째 발생 요소 제거
size() List의 요소 수 반환
clear() List의 모든 요소 제거
contains(Object o) List에 요소가 있는지 확인
indexOf(Object o) 첫 번째 발생 요소의 인덱스 반환
isEmpty() List가 비어 있는지 확인

결론

축하합니다! 자바 List의 세계로 첫 걸음을 뗐습니다. List의 생성, 조작, 반복에 대한 기본적인 내용을 다루었습니다. 이는 모든 자바 프로그래머에게 필수적인 기술입니다.

List는 자바 컬렉션의 일부에 불과합니다. Sets, Maps, Queues와 같은 다른 흥미로운 데이터 구조와 그들의 독특한 속성과 사용 사례를 접하게 될 것입니다.

프로그래밍은 연습이 중요합니다. 다양한 List를 만들어보고, 우리가 논의한 예제에 자신의 독창적인 요소를 더해보세요. 그리고 가장 중요한 것은, 즐겁게 프로그래밍하자! 누가 알랭지, 당신이 다음 대박 앱을 만들어 파티 계획을 혁신할지도 모릅니다!

다음에 만날 때까지, 즐거운 코딩 시간 되세요!

Credits: Image by storyset