Java

Number 모든 숫자를 담을 수 있는 자료형

note994 2024. 7. 29. 18:37

먼저, 이 게시글은 오직 Number 자료형에 대해서만 설명한다. 람다식, streams에 대한 내용은 관련 제목 게시글에 있을것이다.

public void printbignums(Integer a){ // Integer 형으로 받았을 때
    Predicate<Number> bignum = num -> num.intValue() > a;
    List<Number> bignumlist = list.stream()
            .filter(bignum)
            .collect(Collectors.toList());
    System.out.println(bignumlist);
}

public void printbignums(Double a){ // Double형으로 받았을 때
    Predicate<Number> bignum = num -> num.doubleValue() > a;
    List<Number> bignumlist = list.stream()
            .filter(bignum)
            .collect(Collectors.toList());
    System.out.println(bignumlist);
}

 

 

메서드 오버로딩한 두 메서드는 main에서 Number 타입의 숫자를 입력받는다.

 

Number타입이란 모든 숫자타입의 슈퍼타입 클래스로  Java의 수치형 데이터를 다루기 위한 기본 클래스를 제공한다. 여러 수치형 클래스들이 상속을 받도록 설계되어 있다.

 

이를 상속받은 클래스에는 Integer, Double, Float, Long, Byte, Short 등이 있다.

 

쉽게 말하면 모든 숫자 자료형을 담을 수 있는 슈퍼 숫자형 자료형이다.  

 

또 특징은 Number 자료형끼리 단순 연산이 안된다. +, *, / 같은 연산을 하기 위해선 형 변환을 해줘야 한다.


그런데 Number 타입을 받는데 Integer 형인지 Double형인지 어떻게 구분해서 적절하게 실행할까? 그건 main에서 Number 자료형을 Integer나 Double로 형변환을 해서 메서드에 전달하는 방식으로 해결했다.

 try{
                    System.out.println("숫자를 입력 시 그 숫자 보다 큰 리스트 출력: ");
                    input = sc.next(); // Number형이기 때문에 먼저 문자열로 입력받고 Interger형 또는 Double형으로 변환을 시도한다.
                    c = Integer.parseInt(input);
                    calculator.printbignums((Integer) c);
                }catch (NumberFormatException e){
                    try{
                        c = Double.parseDouble(input);
                        calculator.printbignums((Double) c);
                    }
                    catch (NumberFormatException e2){
                        System.out.println("올바른 입력이 아닙니다.");
                    }

1. 첫번째 try문은 입력받을 숫자를 먼저 문자열로 받는다. (sc.nextln은 사용해선 안된다. 줄바꿈 문자가 문제가되어 다음 입력을 스킵해버리는 현상이 일어난다.)

 

2. 그 문자열을 Int 즉, 정수형으로 변환을 시도한다.

 

3. 성공했다면 아까 위에서 본 printbignums의 메서드를 매개변수에 넣어서 호출한다. 그리고 오류가 발생하지 않았기 때문에 catch문은 그냥 넘어간다.

 

4. 만약 정수형으로 변환을 실패한다면 NumberFormatException 오류가 발생하므로 이 오류가 발생하면 실수형인 Double형으로 변환을 시도한다. 

 

5. 실수형으로 성공적으로 변환 성공하면 마찬가지로 printbignums 메서드를 실행한다. 이 때 double형으로 오버로딩한 메서드가 실행된다.

 

6. 여기서도 형변환 오류가 나면 적절하지 않은 값이니 올바른 입력이 아님을 알리고 끝난다.

 


요약)

 

1. Number형 변수는 모든 숫자형 자료형을 받을 수 있다.

 

2. 하지만 Number형 끼리의 연산은 그냥은 불가능하며 적절하게 형 변환을 해줘야 한다.

 

3. Number형 자료형은 출력 시 문자열로 출력된다.


Number형을 사용할 때 유용한 메서드들 (지속적 갱신)

 

this.a instanceof Integer

this.a 는 Number형 자료형이며, 해당 Number의 숫자 형식이 Int형인지 아닌지 true 또는 false로 구분해준다. Integer 외에 Double, float, byte 등등 모든 숫자형 자료들도 가능