이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 28269|회답: 1

[출처] 자바에서의 튜플 사용

[링크 복사]
게시됨 2021. 8. 31. 오전 11:22:41 | | | |
튜플은 컴퓨터 분야에서 특별한 의미를 가지며, 이 이름은 다소 낯설게 들릴 수 있고, 코드를 작성할 때 실제로 적용되는 시나리오는 거의 없습니다. 하지만 놀랍게도 튜플은 프로그래밍과 밀접한 관련이 있습니다. 일부 학생들은 관계형 데이터베이스에서 '레코드'의 또 다른 학술적 명칭이 '튜플'이라는 사실을 모를 수도 있습니다. 레코드는 튜플, 테이블은 관계, 레코드는 테이블로 구성되고, 튜플은 관계를 생성합니다. 이것이 관계형 데이터베이스의 핵심 개념입니다.

튜플은 관계형 데이터베이스에서 분리할 수 없는 부분이지만, 프로그래밍에서는 꼭 필수적이지는 않습니다. 파이썬, F#, haskell, scala 등과 같이 자체 튜플 문법을 가진 프로그래밍 언어도 있지만, Java, JavaScript, C++, C# 등 튜플 문법이 없는 더 인기 있는 언어들도 있습니다.

튜플은 배열이나 객체처럼 필수적인 프로그래밍 요소는 아니지만, 특히 함수가 여러 값을 반환해야 할 때 코드를 작성할 때 매우 편리하게 사용할 수 있습니다. 이 경우 일반적인 관행은 객체를 정의하고, 함수가 반환해야 할 값을 객체의 속성으로 설정한 후, 함수의 반환 값 타입을 객체의 타입으로 설정하는 것입니다. 또는 이 함수가 특정 데이터가 존재하는 매핑 데이터 구조를 반환하도록 할 수도 있습니다. 하지만 두 방법 모두 단점이 있으며, 첫 번째 방법은 신뢰할 수 있지만 코드가 유난히 방대합니다. 요구사항 자체는 함수가 여러 값을 반환하는 한 매우 간단하지만, 이 방법은 미리 타입을 정의하고, 인스턴스화한 뒤 인스턴스 속성을 설정한 뒤 마지막으로 반환해야 하므로 너무 비효율적입니다. 두 번째 방법은 빠르지만 충분히 안전하지 않지만, 함수 내부에서는 맵에 어떤 값이 저장되어 있는지 알 수 있지만, 함수 외부에서는 이 함수의 반환값이 맵임만 알 수 있습니다. 맵에 어떤 값이 저장되는지, 어떤 타입이 있는지는 다인자 개발 프로젝트에서 알 수 없습니다. 이 단점은 특히 명백하며, 안타깝게도 이 방식은 일부 동적 타입 언어에서 선호되는 해결책이며, 이것이 동적 타입 언어가 보안성과 가독성이 떨어진다는 불만을 제기하는 근본적인 이유 중 하나입니다. 따라서 이 유형의 문제에 대한 최선의 해결책은 튜플을 사용하는 것입니다.

문법 자체가 튜플을 지원하는 언어에서는 튜플이 괄호로 표현되며, 예를 들어 (int, bool, string)는 삼중 타입이며, 그 값은 (1, true, "abc")일 수 있습니다. 각 튜플 타입은 고유하며, (int, bool), (bool, int), (string, double)은 모두 이진이지만 서로 다른 튜플입니다. 여기서 특정 튜플을 함수의 반환 값으로 취하면, 가독성과 보안 면에서 앞서 언급한 맞춤 타입을 사용하는 첫 번째 솔루션만큼 좋지는 않지만, 맵을 사용하는 두 번째 솔루션보다는 훨씬 낫습니다. 적어도 튜플을 사용하면 함수가 반환할 값의 수를 알 수 있습니다. 이 값들은 어떤 종류의 가치이며, map을 사용해 두 번째 스킴을 간단하고 빠르게 코딩할 수 있다는 장점이 있습니다.

다행히도 이 프로그래밍 언어들은 이제 제네릭을 지원하며, 내장 튜플이 아닌 튜플 구현이 매우 간단해졌지만, 결국 튜플은 비언어 내장 문법 요소이기 때문에 네이티브 튜플만큼 편리하게 사용하지는 않습니다.

다음은 공식 홈페이지와 수백 개의 깃허브 별을 가진 서드파티 Java 튜플 라이브러리인 Javatuples를 소개합니다. 이 라이브러리는 Java 튜플 분야에서 거의 독점적인 위치를 차지하고 있습니다.

자바튜플은 최대 길이가 10인 튜플을 정의하지만, 10개 튜플에 포함된 요소 수는 이미 너무 많고, 사실상 가독성이 거의 없다고 생각합니다. 튜플 클래스는 다음과 같이 정의됩니다:

단위<A> (1요소)

쌍<A,B> (2 원소)

트리플<A, B, C> (3가지 원소)

사중주<A, B, C, D> (4요소)

퀸텟<A, B, C, D, E> (5가지 요소)

6중주<A, B, C, D, E, F> (6요소)

7중< A, B, C, D, E, F, G> (7 원소)

8중주<A, B, C, D, E, F, G, H> (8 요소)

에네아드<A, B, C, D, E, F, G, H, I> (9가지 원소)

10년<A, B, C, D, E, F, G, H, I, J> (10가지 원소)

이 원형 클래스들은 일반 클래스이므로 괄호 안의 글자는 임의의 타입으로 대체할 수 있습니다. 아래는 이진 코드의 예시입니다





추론을 그리면 나머지 튜플 유형도 같은 방식으로 사용됩니다.

자바의 튜플은 언어 자체에서 지원되지 않기 때문에, 코드가 자바어처럼 보이고 덜 우아해 보입니다. 하지만 코드를 작성할 때는 작성의 편리함이 효율성을 높일 수 있을 뿐만 아니라, 코드 자체가 표현하는 의미, 즉 튜플 자체의 의미(함수)를 사용해 코드를 향상시키는 데 더 많은 주의를 기울여야 하며, 어떻게 작성하는지는 사실상 부차적인 문제일 뿐입니다.

마지막으로, 일반적인 괄호 안의 타입은 Java의 기본 타입이 될 수 없다는 점을 유념해야 합니다. 기본 타입을 사용하려면 박스에 갇힌 기본 타입이어야 합니다. 예를 들어 int 타입은 정수로 변환해야 하며, bool 타입은 불리언 타입에 대응해야 합니다.




이전의:POI CellStyle은 셀 배경 색상을 설정합니다
다음:.NET/C# MailKit 메일 전송 튜토리얼 [소스 코드 포함]
 집주인| 게시됨 2021. 9. 15. 오전 10:55:08 |
이런 의존성을 도입하려면 Maven을 사용해야 합니다:


자바튜플은 최대 10개의 반환 값을 생성할 수 있게 해줍니다


면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com