1. 래퍼 클래스 (Wrapper Class)
- 래퍼 클래스는 기본 자료형의 값을 감싸는 클래스이다.
래퍼 클래스는 모든 자료형에 대해 정의되어 있으며 이는 다음과 같다.
public Boolean(boolean value)
public Character(char value)
public Byte(byte value)
public Short(short value)
public Integer(int value)
public Long(long value)
public Float(floatvalue), public Float(double value)
public Double(double value)
래퍼클래스는 값을 인스턴스로 감싸는 기능과 인스턴스에서 꺼내는 기능을 한다.
이를 각각 박싱, 언박싱이라고 칭한다.
박싱은
Integer val = new Interger(10);
과 같이 값을 인스턴스로 감싸 선언한다.
언박싱은
int num = val.intValue();
과 같이 저장된 값을 꺼내는 작업을 한다.
이러한 래퍼 인스턴스의 값을 증가시키려면
val = new Integer(val.intValue() + 20);
과 같이 새로운 래퍼 인스턴스를 생성해야 한다.
자바 5부터는 오토 박싱과 오토 언박싱을 지원한다.
앞서 사용한 박싱과 언박싱을 예로 들면
Integer val = 10;
int num = val;
로 사용 된다.
래퍼클래스는 java.lang.Number 클래스를 상속한다.
그리고 이 클래스에는 다음의 추상 메소드들이 존재한다.
public abstract int intValue()
public abstract long longValue()
public abstract double doubleValue()
따라서 이를 상속하는 Integer, Double 과 같은 클래스들은 위의 메소드 모두를 구현하고 있다. 따라서 어떠한 래퍼 인스턴스를 대상으로도 인스턴스에 저장된 값을 다양한 형태로 반환할 수 있다.
래퍼 클래스에는 static 으로 선언된 다양한 메소드들이 존재한다.
Integer.valueOf(int);
Integer.max(int, int);
Integer.sum(int, int);
이 외에도 많은 메소드들을 자바 문서를 통해 확인할 수 있다.
2. BigInteger, BigDecimal Class
int 나 long 보다 큰 정수형을 표현해야 하는경우에 java.math.BigInteger Class 를 사용한다.

이와 같이 참조값은 반드시 "" 로 문자열로 입력한다.
BigInteger 의 사칙연산 메소드는 다음과 같다.
public BigInteger add(BigInteger val)
public BigInteger subtract(BigInteger val)
public BigInteger multiply(BigInteger val)
public BigInteger divide(BigInteger val)
public BigInteger remainder(BigInteger val)
실수의 연산에서 발생하는 오차가 발생하지 않기를 원할 때 java.math.BigDecimal class 를 사용한다.

이와 같이 참조값은 반드시 "" 로 문자열로 입력한다.
해당 클래스에도 사칙연산 메소드가 정의되어 있다.
public BigDecimal add(BigDecimal augend)
public BigDecimal subtract(BigDecimal Integer subtrahend)
public BigDecimal multiply(BigDecimal multiplicand)
public BigDecimal divide(BigDecimal divisor)
3. Random Number
자바에는 난수 생성을 위한 클래스가 있고 이는 java.util.Random 클래스이다.
인스턴스 생성 후 아래의 메소드 중에서 하나를 선택하여 호출하면 난수가 생성된다.
public boolean nextBoolean() - boolean 형 난수 반환
public int nextInt() - int 형 난수 반환
public long nextLong() - long 형 난수 반환
public int nextInt(int bound) - 0 이상 bound 미만 범위의 int 형 난수 반환
public float nextFloat() - 0.0 이상 1.0 미만의 float 형 난수 반환
public double nextDouble() - 0.0 이상 1.0 미만의 double 형 난수 반환
사용법은 아래와 같다.

난수 생성은 숨겨진 패턴이 존재한다.
이를 일반적으로 알순 없지만 명백히 존재하기 때문에 이를 pseudo-random number 즉 유사 난수 라 한다.
이처럼 유사 난수가 아닌 실질적인 난수를 위해서는 Random 에 적당한 씨드 값을 넣어줘야 한다.
Random ran = new Random(System.currentTimeMillis());
와 같이 1970년 1월 1일 자정 이후로 지나온 시간을 밀리초 단위로 계산하여 반환하는 메소드를 삽입하여 씨드 값이 지속적으로 변경되도록 하면 유사 난수가 아닌 진정한 의미의 난수가 생성 된다고 할 수 있다.
이러한 원리로 현재
Random ran = new Random();
은 내부적으로 자동으로 현재의 시간을 넣는 씨드값을 넣어 호출해 주고 있으며 이를 알아둬야 한다.
4. Token 의 구분
특정 기준으로 문자열을 나눌 때 사용하는 StringTokenizer 클래스가 있다.
예를 들어 "PM:10:25" 라는 문자열을 나눈다고 하면
: 는 구분자(Delimiter) 이고 이 구분자로 인해 나뉜 문자열 조각은 Token 이다.
public StringTokenizer(String str, String delim)
으로 정의되는 이 클래스를 이용하여 위의 문자열을 나누면

다음과 같이 구현할 수 있따.
hasMoreToken 메소드로 반환할 토큰이 남아 있는지 체크하였으며
nextToken 매소드로 다음 토큰을 반환하는 코드이다.
만약에 구분자도 토큰으로 반환하고 싶다면
public StringTokenizer(String str, String delim, true)
로 사용하면 되고 그 결과는 다음과 같다.

5. Array Class
java.util.Arrays 클래스에는 배열을 다루는 여러 메소드들이 있다.
public static int[] copyOf(int[] original, int newLength)
-> Original 에 전달된 배열을 첫 번째 요소부터 newLength 의 길이만큼 복사
public static int[] copyOfRange(int[] original, int from, int to)
-> Original 에 전달된 배열을 인덱스 from 부터 to 이전 요소까지 복사
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
-> 배열 src 의 srcPos 에서 배열 dest 의 destPos 로 length 길이만큼 복사
위의 3가지 복사에 관한 메소드 들의 사용을 다음과 같이 확인하자.

배열의 비교는
public static boolean equals(int[] a, int[] a2)
-> 매개변수 a 와 a2 로 전잘된 배열의 내용을 비교하여 true 또는 false 반환
메소드를 사용한다.

또한 public static boolean equals(Object[] a, Object[] a2) 와 같이 Object 형 배열에 대해서도 정의되어 있으며
이는 참조 값이 아닌 참조하는 인스텉스의 내용을 비교한다.
배열의 정렬은
public static void sort(int[] a)
-> 매개변수 a 로 전달된 배열을 오름차순으로 정렬
로 정의되어 있다.

public static void sort(Object[] a)
와 같이 Object 에 대한 정렬도 정의되어 있다.
Object 의 순서 판별은
interface Comparable
-> int compareTo(Object o) 메소드 구현을 통해 인스턴스의 순서 판단 기준을 결정
위의 인터페이스의 추상메소드인 compareTo 를 구현하여 결정한다.

배열의 탐색에 사용되는 메소드는 다음과 같다.
public static int binarySearch(int[] a, int key)
-> 배열 a 에서 key 를 찾아서 있으면 key 의 인덱스 값, 없으면 0보다 작은 수 반환
이 메소드를 사용하기 위해서는 데이터가 정렬이 된 후에 호출해야 한다.

'JAVA' 카테고리의 다른 글
[JAVA] 제네릭(Generics) (자바 독학하기24) (0) | 2021.07.22 |
---|---|
[JAVA] Object 클래스 (자바 독학하기22) (0) | 2021.07.16 |
[JAVA] 메모리 모델 (자바 독학하기21) (0) | 2021.07.15 |
[JAVA] 예외처리(Exception Handling) (자바 독학하기20) (0) | 2021.07.14 |
[JAVA] 인터페이스와 추상 클래스 (자바 독학하기19) (0) | 2021.07.13 |