본문 바로가기
JAVA

[JAVA] - 변수 타입 확인 방법

by nam_ji 2023. 12. 4.

변수 타입 찾기

  • 자바 진영에선 기본적으로 객체 지향 프로그래밍 언어이기 때문에 int형이나 double형 같은 primitive 타입은 Wrapper 클래스 타입으로 확인할 수 밖에 없습니다. Object 클래스의 getClass() 메소드를 이용하여 타입을 쉽게 찾아보겠습니다.
  • 또한 Wrapper 클래스 타입이 아닌 primitive 타입으로 출력이 필요하다면 클래스 생성 후 typeOf 메소드를 오버라이딩하여 찾는 방법도 있습니다.

getName() / getTypeName()

  • 작성 방법은
    변수명.getClass().getName()
    변수명.getClass().getTypeName()
    이렇게 작성하고 출력하면 변수의 타입을 찾을 수 있습니다.
  • 다만, 이 메소드는 객체만 호출할 수 있기 때문에 기본자료형의 데이터 타입은 Object로 캐스트 후 확인해야 합니다.
  • 두 메소드는 출력시 패키지명과 타입명을 같이 출력합니다.
//		계속 사용할 변수
		int i = 0;
		double d = 1.0;
		Integer I = 0;
		String s = "";
		Boolean b = true;
		List<String> list1 = new ArrayList<String>();
		List<Integer> list2 = new ArrayList<Integer>();
		
//		getClass().getName(); 이 메소드는 객체만 호출할 수 있습니다.
		System.out.println("getClass().getName(); : " + ((Object) i).getClass().getName());
		System.out.println("getClass().getName(); : " + ((Object) d).getClass().getName());
		System.out.println("getClass().getName(); : " + I.getClass().getName());
		System.out.println("getClass().getName(); : " + s.getClass().getName());
		System.out.println("getClass().getName(); : " + b.getClass().getName());
		System.out.println("getClass().getName(); : " + list1.getClass().getName());
		System.out.println("getClass().getName(); : " + list2.getClass().getName());
		
//		getClass().getTypeName(); 이 메소드는 객체만 호출할 수 있습니다.
		System.out.println("getClass().getTypeName(); : " + ((Object) i).getClass().getTypeName());
		System.out.println("getClass().getTypeName(); : " + ((Object) d).getClass().getTypeName());
		System.out.println("getClass().getTypeName(); : " + I.getClass().getTypeName());
		System.out.println("getClass().getTypeName(); : " + s.getClass().getTypeName());
		System.out.println("getClass().getTypeName(); : " + b.getClass().getTypeName());
		System.out.println("getClass().getTypeName(); : " + list1.getClass().getTypeName());
		System.out.println("getClass().getTypeName(); : " + list2.getClass().getTypeName());
getClass().getName(); : java.lang.Integer
getClass().getName(); : java.lang.Double
getClass().getName(); : java.lang.Integer
getClass().getName(); : java.lang.String
getClass().getName(); : java.lang.Boolean
getClass().getName(); : java.util.ArrayList
getClass().getName(); : java.util.ArrayList

getClass().getTypeName(); : java.lang.Integer
getClass().getTypeName(); : java.lang.Double
getClass().getTypeName(); : java.lang.Integer
getClass().getTypeName(); : java.lang.String
getClass().getTypeName(); : java.lang.Boolean
getClass().getTypeName(); : java.util.ArrayList
getClass().getTypeName(); : java.util.ArrayList

getSimpleName()

  • 작성 방법은
    변수명.getClass().getName()
    변수명.getClass().getTypeName()
    이렇게 작성하고 출력하면 변수의 타입을 찾을 수 있습니다.
  • 다만, 이 메소드는 객체만 호출할 수 있기 때문에 기본자료형의 데이터 타입은 Object로 캐스트 후 확인해야 합니다.
  • 위와 다른 점은 이 메소드는 타입명만 출력합니다.
//		계속 사용할 변수
		int i = 0;
		double d = 1.0;
		Integer I = 0;
		String s = "";
		Boolean b = true;
		List<String> list1 = new ArrayList<String>();
		List<Integer> list2 = new ArrayList<Integer>();
        
//		getClass().getSimpleName(); 이 메소드는 객체만 호출할 수 있습니다.
		System.out.println("getClass().getSimpleName() : " + ((Object) i).getClass().getSimpleName());
		System.out.println("getClass().getSimpleName() : " + ((Object) d).getClass().getSimpleName());
		System.out.println("getClass().getSimpleName() : " + I.getClass().getSimpleName());
		System.out.println("getClass().getSimpleName() : " + s.getClass().getSimpleName());
		System.out.println("getClass().getSimpleName() : " + b.getClass().getSimpleName());
		System.out.println("getClass().getSimpleName() : " + list1.getClass().getSimpleName());
		System.out.println("getClass().getSimpleName() : " + list2.getClass().getSimpleName());
getClass().getSimpleName() : Integer
getClass().getSimpleName() : Double
getClass().getSimpleName() : Integer
getClass().getSimpleName() : String
getClass().getSimpleName() : Boolean
getClass().getSimpleName() : ArrayList
getClass().getSimpleName() : ArrayList

isInstance()

  • 작성 방법은
    찾고자 하는 객체타입.class.isInstance(찾고 싶은 변수명) 이렇게 작성하면 변수의 타입을 찾을 수 있습니다.
  • 위와 다른 점은 이 메소드는 타입을 찾아주기 보다는 내가 타입을 찾는다 생각하면 됩니다.
  • 출력은 내가 예상한 타입이 맞다면 true 아니라면 false를 출력합니다.
//		계속 사용할 변수
		int i = 0;
		double d = 1.0;
		Integer I = 0;
		String s = "";
		Boolean b = true;
		List<String> list1 = new ArrayList<String>();
		List<Integer> list2 = new ArrayList<Integer>();
        
		System.out.println(Integer.class.isInstance(i));
		System.out.println(Double.class.isInstance(d));
		System.out.println(Integer.class.isInstance(I));
		System.out.println(String.class.isInstance(s));
		System.out.println(Boolean.class.isInstance(b));
		System.out.println(ArrayList.class.isInstance(list1));
		System.out.println(ArrayList.class.isInstance(list2));
true
true
true
true
true
true
true

typeOf 오버라이딩 하는 방법

  • 작성 방법은 출력하고 싶은 클래스 밑에 type을 구분할 수 있는 메소드를 만들기 위한 클래스를 생성합니다.
    그 클래스 안에 메소드를 구현합니다.
  • 다시 본 클래스로 돌아와 type을 구분하기 위한 메소드를 활용하여 코드를 작성하면 됩니다.
package com.namji95.javabasic;

public class CheckVariableType {
	public static void main(String[] args) {
		int i1 = 0;
		long l1 = 0;
		float f1 =  0f;
		double d1 = 0;
		boolean b1 = true;
		
		System.out.println("type : " + type.typeOf(i1));
		System.out.println("type : " + type.typeOf(l1));
		System.out.println("type : " + type.typeOf(f1));
		System.out.println("type : " + type.typeOf(d1));
		System.out.println("type : " + type.typeOf(b1));
	}
}
class type {
	public static Class<Integer> typeOf (final int expr) {
		return Integer.TYPE;
	}
	public static Class<Long> typeOf (final long expr) {
		return Long.TYPE;
	}
	public static Class<Float> typeOf (final float expr) {
		return Float.TYPE;
	}
	public static Class<Double> typeOf (final double expr) {
		return Double.TYPE;
	}
	public static Class<Boolean> typeOf (final boolean expr) {
		return Boolean.TYPE;
	}
}
type : int
type : long
type : float
type : double
type : boolean

'JAVA' 카테고리의 다른 글

[JAVA] - 문자열 한 글자씩 분리하는 방법  (1) 2023.12.04
[JAVA] - 문자열 치환 메소드  (0) 2023.12.04
[JAVA] - Math 클래스 정리  (0) 2023.11.27
[JAVA] - JSP란  (0) 2023.11.15
[JAVA] - contains, indexOf, matches()  (0) 2023.11.13