반응형
JAVA TYPE
기본형과 참조형이 있다.
기본형의 한계
- 객체 내부에는 유용한 메서드를 포함하는데 사용 불가능
- 값이 없는 경우를 표현해야 할 때 불가능 (기본형은 무조건 값을 갖고있음)
래퍼 클래스란
java.lang 패키지의 클래스들 중 기본형 변수를 감싸는 클래스
※기본형 int, float, double, boolean 등
래퍼 클래스 사용방법
Integer i = new Integer(10); // 향후 자바에서 제거될 예정
Integer i = Integer.valueOf(10); // Boxing 이렇게 사용
i.intvalue(); //Unboxing
래퍼클래스 비교는 equals() 사용
래퍼클래스 객체 그대로 출력시 내부에서 toString()으로 출력
Auto-Boxing, Auto-Unboxing
개발자의 불편함을 해결차 도입
// Primitive -> Wrapper
int value = 7;
Integer boxedValue = value; // 오토 박싱(Auto-boxing)
// Wrapper -> Primitive
int unboxedValue = boxedValue; // 오토 언박싱(Auto-Unboxing)
System.out.println("boxedValue = " + boxedValue);
System.out.println("unboxedValue = " + unboxedValue);
//boxedValue = 7
//unboxedValue = 7
Class 클래스
Class명.class를 하면 해당 클래스 메타정보를 조회할 수 있다.
※이런걸 리플랙션이라고 한다.
주요기능
- 타입정보 출력: 클래스의 이름, 슈퍼클래스, 인터페이스, 접근 제한자 조회가능
- 리플렉션 가능: 필드, 메서드 정보 조회가능
- 동적로딩 가능: Class.forName() 메서드를 통해 동적 로드 가능하며,
newInstance() 메서드를 통해 새로운 인스턴스 생성 가능
// Hello.java
public class Hello {
public String hello(){
return "hello!";
}
}
// ClassCreateMain.java
public class ClassCreateMain {
public static void main(String[] args) throws Exception {
Class helloClass = Hello.class;
//Class helloClass = Class.forName("lang.clazz.Hello");
Hello hello = (Hello)helloClass.getDeclaredConstructor().newInstance();
String result = hello.hello();
System.out.println("result = " + result);
}
}
//result = hello!
new Hello(); 로만 인스턴스 생성 할 수 있는줄 알았는데, 아니었다. (신기)
리플렉션(reflection)이라는건데 특정한 상황에서는 유용할 수 있는데, 성능이나 유지보수 측면에서는 별로라고 한다.
반응형
'공부 > Java' 카테고리의 다른 글
메모리 가시성 (0) | 2024.09.20 |
---|---|
스레드 기본 정보 (1) | 2024.09.18 |
스레드 생성과 실행 (0) | 2024.09.16 |
프로세스와 스레드란 (0) | 2024.09.16 |
String이란 (0) | 2024.05.29 |