이번 포스팅에서는 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개의 데이터만을 다룰 수 있다는 점이다.
아직 만나보지 못한 자료 구조가 정말 많다고 느낀다.
'Java (자바)' 카테고리의 다른 글
[Java] 데이터 직렬화 / Serializable (0) | 2024.03.30 |
---|---|
[Java] Set / 자료 구조 / 예제 (0) | 2024.03.26 |
[Java] Garbage Collector (0) | 2024.03.06 |
[Java] JVM 메모리 할당 방식 - Stack · Heap Memory (2) | 2024.03.05 |
[Java] JDK · JRE · JVM (0) | 2024.03.04 |