Java (자바)

[Java] Pair / 자료 구조 / 2개의 데이터 관리하기

Oscar:) 2024. 3. 25. 17:28

 

 

이번 포스팅에서는 Pair 클래스에 대해 알아보자.

 

 


 

Pair ?

 

 

안드로이드 관련 서적을 읽던 중 Pair라는 자료구조를 처음 만나게 되었다.

 

해당 코드는 2가지 데이터를 관리하는 단순한 구조였다.

 

*Pair : 한 짝, 한 쌍

사전적 정의를 듣고 보니 포커 족보의 원·투 페어가 이 페어인 것 같다.

 

별도의 데이터 클래스를 생성할 필요 없이 2개의 데이터를 관리할 수 있기에 편리해 보였다.

 


 

 

Pair 클래스는 Java 8 버전부터 추가된 클래스이며, 그 이전까지는 외부 라이브러리를 통해 사용되었다.

단순히 2가지의 데이터를 다룰 때 주로 사용된다.

 

이는 Key - Value 형태로 볼 수도 있고, First - Second 형태로 볼 수도 있다.

 

개인적인 견해로는 First - Second 형태에 더 가깝다고 생각한다.

2개의 데이터가 어떠한 연결점도 없을 수 있기에, Key - Value는 억지스러운 면이 있다.

 

실제로 javafx.util 패키지에서는 Key - Value 형태로 명시되어 있고,

kotlin, android.util 패키지에서는 First - Second 형태로 명시되어 있다.

 

 


 

다양한 패키지에서 참조

 

 

위에서도 살짝 언급했지만, Pair 클래스는 환경에 따라 다양한 패키지에서 만나볼 수 있다.

 

 

1. Java 8 이후 버전부터는 javafx.util 패키지에 포함된 클래스를 사용할 수 있다.

 

 

해당 클래스에서는 <Key, Value> 형태로 명시되어 있는 것을 확인할 수 있다.

 

 

 

2. Kotlin의 경우 kotlin 패키지에 포함된 클래스를 사용할 수 있다.

 

 

해당 클래스에서는 <A, B> 형태로 명시되어 있고,

first, second 라는 상수를 사용한다.

 

주석을 읽다보면 느끼겠지만, A, B 모두 value 취급을 한다.

Key - Value 형태가 아님을 명시한다.

 

 

 

3. 안드로이드 환경에서는 android.util 패키지에 포함된 클래스를 사용할 수 있다.

 

 

해당 클래스에서는 A, B도 모자라서 아예 <F, S> 형태로 명시한다.

 

 

 

간단한 예제로는 3번 방법의 android.util 패키지의 Pair 클래스를 사용해 보겠다.

 

 


 

사용법

 

 

✅ 기본적인 문법은 다음과 같다.

// 기본 문법
Pair<타입1, 타입2> pair = new Pair<>(값1, 값2);

// 그 외
Pair<타입1, 타입2> pair = new Pair<타입1, 타입2>(값1, 값2);
Pair<타입1, 타입2> pair = new Pair(값1, 값2);
Pair pair = new Pair(값1, 값2);

 

다른 자료 구조처럼, 선언과 초기화는 위 처럼 다양한 방법으로 할 수 있다.

공통적인 부분이 있다면, 초기화 시 인수에 값을 지정해줘야 한다.

 

 

 

값을 불러올 때는 다음과 같이 사용한다.

Pair<String, Integer> pair = new Pair<>("Oscar", 29);

System.out.print("이름 : " + pair.first);
System.out.print("나이 : " + pair.second);

 

정말 손쉽게 first, second 상수로 값을 불러올 수 있다.

 

 

 

결과

 

 


 

 

느낀점

 

단순한 데이터를 처리할 때 유용하게 사용할 수 있을 것 같다.

관리할 데이터가 1개 초과인 경우, 보통 데이터 클래스를 만들어서 사용해 왔었다.

 

ex)

// 데이터 클래스 만드는 번거로움...
public class Student {

    String name;
    int age;
    
    // 생성자
    // getter
    // setter

}

// 사용할 곳
main() {

    Student student = new Student("Oscar", 29);
    student.getName();
    student.getAge();

}

 

 

Pair 사용 시 위 처럼 번거로운 과정을 생략할 수 있다.

main() {

    Pair<String, Integer> pair = new Pair<>("Oscar", 29);
    pair.first;
    pair.second;

}

 

 

치명적인 단점이라고 하면, 이름 값 그대로 딱 2개의 데이터만을 다룰 수 있다는 점이다.

 

 

 


 

 

 

아직 만나보지 못한 자료 구조가 정말 많다고 느낀다.