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