본문 바로가기

01. Java/02. etc

java.util.UUID

해당 개념에 대해 클래스와 같이 묶어서 간단하게 설명 하고 예제를 작성하였다.

 

참고

https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html

 

UUID (Java Platform SE 8 )

The timestamp value associated with this UUID. The 60 bit timestamp value is constructed from the time_low, time_mid, and time_hi fields of this UUID. The resulting timestamp is measured in 100-nanosecond units since midnight, October 15, 1582 UTC. The tim

docs.oracle.com

 

 

 UUID는 Universally Unique Identifer의 약자로 이름 그대로 범용적으로 고유한 식별자를 나타내기 위해 사용되는 128비트의 숫자다. UUID는 특히 분산 시스템에서 고유성이 보장되어야 하는 경우에 유용하게 활용된다. 라고 하는데.. 내가 봤던 것은 파일을 업로드 할 때 원본의 이름으로 구분을 하면 겹치는 경우가 생길수 있으니 (포인터 역할을 하는 DB 데이터) 이것을 원본 이름은 따로 두고(사용자가 다시 다운로드를 할 때 사용) UUID + 5자리 난수를 생성하여 유니크한 값으로 취급 했던것으로 기억한다. 

 

 참고에 가보면 범용 고유 식별자에 대해 막 설명이 있는데 어떤 법칙으로 저렇게 되는지까지는 이해 하는건 너무 깊은 것 같아 UUID의 variant, version 필드에 대해서만 정리하였다.

 

 

● Variant(변형)

ㆍVariant 필드는 UUID의 레이아웃을 식별하는 역할을 한다. 

(UUID의 비트 패턴 및 구조를 어떻게 정의하고 구분하는지에 관한 것)

ㆍ UUID는 특정 변형을 따르며, 변형 값은 UUID의 비트 레이아웃 및 구조를 정의.

ㆍ 가장 흔한 변형은 "Leach-Salz" 변형으로, 이 경우 variant 값은 2 이다.

ㆍ Leach-Salz 변형은 UUID의 일반적인 형태로 사용되며, 대부분의 UUID가 이 변형을 따른다.

 

  Version(버전)

  Version 필드는 UUID가 어떤 종류의 UUID인지를 나타낸다.

  다양한 종류의 UUID에는 다양한 버전 값이 할당되어 있다.

  주요 UUID 버전은 다음과 같다.

     버전 1 (Time-based) : 현재 시간 및 노드 식별자를 기반으로 생성된다.

     버전 2 (DCE Security) : DCE(분산 컴퓨팅 환경) 보안을 위해 예약되어 있다.

     버전 3 (Name-based) : 명명된 개체와 이름을 기반으로 생성된다.

     버전 4 (Random) : 무작위 비트를 사용하여 생성된다.

 

정리하면, 우리가 보통 사용하는 UUID는 variant = 2(Leach-Salz), version = 4(Random) 이다.

 

import java.util.UUID;

/**
 * UUID 활용해보기
 */
public class MyUUID {
	
	public static void main(String[] args) {
		
		//public static UUID randomUUID() - 임의의 UUID를 생성하는 메소드
		UUID myUuid1 = UUID.randomUUID();
		String myUuid1ToString = myUuid1.toString(); 
		
		//public static UUID fromString(String name) - 문자열로부터 UUID를 생성하는 메소드
		UUID myUuid2 = UUID.fromString("5a74b5a9-0325-4b31-af28-77ae6e80455f");
		System.out.println(myUuid2);
		
		/*
		 * 주어진 바이트 배열을 기반으로 이름 기반(UUIDv3)을 생성하는 메소드
		 * public static UUID nameUUIDFromBytes(byte[] name)
		 * 
		 * 
		 * UUID의 가장 낮은 비트를 가져오는 메소드
		 * public long getLeastSignificantBits()
		 * 
		 * 
		 * UUID의 가장 높은 비트를 가져오는 메소드
		 * public long getMostSignificantBits()
		 * 
		 * 
		 * UUID의 버전을 가져오는 메소드
		 * public int version()
		 * 
		 * 
		 * UUID의 변형을 가져오는 메소드
		 * public int variant()
		 * 
		 * 
		 * Timestamp, Clock Sequence, Node 값을 가져오는 메소드 (주로 UUIDv1에서 의미 있음)
		 * public long timestamp()
		 * public int clockSequence()
		 * public long node()
		 * 
		 * 
		 * UUID를 문자열로 변환하는 메소드
		 * public String toString()
		 * 
		 * 
		 * UUID의 해시 코드를 가져오는 메소드
		 * public int hashCode()
		 * 
		 * 
		 * 다른 객체와 UUID를 비교하는 메소드
		 * public boolean equals(Object obj)
		 * 
		 * 
		 * 다른 UUID와 비교하여 순서를 반환하는 메소드
		 * public int compareTo(UUID val)
		 * */
	}
}

 

 내가 봤던 것은 String myUuid = UUID.randomUUID().toString(); 이런식으로 만들어서 사용하는 거 밖에 몰라서 메소드 종류와 설명만 달아뒀다. fromString 메소드의 경우 형태가 안 맞으면 계속 에러를 뱉는다. 

 

public static UUID fromString(String name)

 

'01. Java > 02. etc' 카테고리의 다른 글

[Java]Apache POI  (0) 2023.12.01
java.util.Base64  (0) 2023.11.22
java.lang.System  (0) 2023.11.20
java.util.Properties  (0) 2023.11.20