자바에서 컬렉션을 출력하는 방법
이 글에서는 자바(Java)에서 컬렉션(Collection)을 출력하는 방법을 단계별로 살펴봅니다. 컬렉션은 객체들의 그룹을 저장하고 조작할 수 있는 아키텍처를 제공하는 자바의 핵심 프레임워크입니다. 자바 컬렉션을 활용하면 데이터에 대한 검색, 정렬, 삽입, 조작, 삭제와 같은 거의 모든 연산을 손쉽게 수행할 수 있습니다.
그럼 실제 예제를 통해 어떻게 동작하는지 확인해 보겠습니다.
[입력]
프로그램 실행
[출력 결과]
컬렉션의 요소는 다음과 같습니다: Language : Java | Language_id : 101 Language : Scala | Language_id : 102 Language : Python | Language_id : 103 Language : Mysql | Language_id : 104
알고리즘
전체 흐름은 다음과 같은 단계로 진행됩니다.
STEP 1 - 프로그램 시작 STEP 2 - input_array라는 이름의 컬렉션(ArrayList) 선언 STEP 3 - 저장할 값 정의 STEP 4 - object_1 ~ object_4 객체를 생성하고, 각 객체를 컬렉션에 추가 STEP 5 - for-each 루프를 사용하여 컬렉션의 모든 요소 출력 STEP 6 - 프로그램 종료
핵심 포인트는 toString() 메서드를 오버라이드(재정의)하는 것입니다. System.out.println()으로 사용자 정의 객체를 출력하면, 재정의된 toString()이 반환하는 문자열 형식 그대로 화면에 표시됩니다.
예제 1 – main 함수에서 모든 로직을 한 번에 처리
첫 번째 예제에서는 객체 생성부터 출력까지 모든 연산을 하나의 main 함수 안에서 처리합니다. 코드가 짧고 흐름을 한눈에 파악하기 좋습니다.
import java.util.*;
public class Demo {
String name;
int id;
Demo(String s, int n){
name = s;
id = n;
}
public String toString(){
return "Language : " + name + " | Language_id : " + id;
}
static void print(ArrayList<Demo> input_array){
System.out.println("The Elements of the collection are: ");
for (Demo element : input_array)
System.out.println(element);
}
public static void main(String[] args){
ArrayList<Demo> input_array = new ArrayList<Demo>();
Demo object_1 = new Demo("Java", 101);
Demo object_2 = new Demo("Scala", 102);
Demo object_3 = new Demo("Python", 103);
Demo object_4 = new Demo("Mysql", 104);
input_array.add(object_1);
input_array.add(object_2);
input_array.add(object_3);
input_array.add(object_4);
print(input_array);
}
}출력 결과
The Elements of the collection are: Language : Java | Language_id : 101 Language : Scala | Language_id : 102 Language : Python | Language_id : 103 Language : Mysql | Language_id : 104
예제 2 – 객체 지향 프로그래밍(OOP) 방식으로 캡슐화
두 번째 예제에서는 데이터를 담는 클래스와 출력 로직을 분리하여, 객체 지향 프로그래밍의 캡슐화 원칙에 맞게 구조를 개선합니다. 데이터 클래스(Language)와 실행 클래스(Demo)를 나누면 역할이 명확해지고 유지보수가 쉬워집니다.
import java.util.*;
class Language {
String name;
int id;
Language(String s, int n){
name = s;
id = n;
}
public String toString(){
return "Language : " + name + " | Language_id : " + id;
}
}
public class Demo {
static void print(ArrayList<Language> input_array){
System.out.println("The Elements of the collection are: ");
for (Language element : input_array)
System.out.println(element);
}
public static void main(String[] args){
ArrayList<Language> input_array = new ArrayList<>();
input_array.add(new Language("Java", 101));
input_array.add(new Language("Scala", 102));
input_array.add(new Language("Python", 103));
input_array.add(new Language("Mysql", 104));
print(input_array);
}
}출력 결과
The Elements of the collection are: Language : Java | Language_id : 101 Language : Scala | Language_id : 102 Language : Python | Language_id : 103 Language : Mysql | Language_id : 104
정리
두 예제 모두 동일한 결과를 출력하지만, 접근 방식에는 차이가 있습니다. 첫 번째 방식은 빠르게 프로토타입을 만들 때 유용하고, 두 번째처럼 클래스를 분리하는 방식은 규모가 커지는 프로젝트에서 가독성과 확장성 면에서 훨씬 유리합니다. 또한 toString() 오버라이드만 잘 활용해도 반복문 없이 println 한 줄로 깔끔하게 컬렉션 내용을 확인할 수 있다는 점도 기억해 두세요.