Java

Java / 래퍼, Class 클래스

Dear-J 2025. 2. 24. 21:06

기본형의 한계

객체가 아니기 때문에 메서드를 제공할 수 없음

>>객체 참조가 필요한 컬렉션 프레임워크 사용 불가, 제네릭 사용 불가

null 값을 가질 수 없음

 

래퍼 클래스 (Wrapper Class)

특정 기본형을 감싸서(Wrap) 만드는 클래스

 

자바는 기본형에 대응하는 래퍼 클래스를 기본으로 제공

>> 불변이며 equals로 비교

 

래퍼 클래스 생성 - 박싱(Boxing)

기본형을 래퍼 클래스로 변경하는 것을 마치 박스에 물건을 넣은 것 같다고 해서 박싱이라 함

Integer.valueOf(...) : 내부에서 new Integer(...)을 사용해서 객체를 생성하고 돌려줌

 

Integer.valueOf()에는 성능 최적화 기능

>> 일반적으로 자주 사용하는 -128 ~ 127 범위의  Integer 클래스를 미리 생성, 해당 범위 값이 없으면 new Integer() 호출

>> 마치 문자열 풀과 비슷

 

intValue() - 언박싱(Unboxing)

래퍼 클래스에 들어있는 기본형 값을 다시 꺼내는 메서드

 

주요 메서드

 

유지보수 vs 최적화

유지보수하기 좋은 코드를 먼저 고민

>> 최신 컴퓨터는 매우 빠르기 때문에 메모리 상에서 발생하는 연산을 몇 번 줄인다 해도 실질적 도움이 되지 않는 경우

 

성능 최적화는 대부분 복잡함을 요구하고 더 많은 코드들을 추가로 만들어야 함

>> 최적화를 한다고 했지만 전체 애플리케이션의 성능 관점에서 보면 불필요한 최적화 가능성

 

웹 애플리케이션의 경우 메모리 안에서 발생하는 연산 하나보다 네트워크 호출 한번이 더 오래 걸림

>> 자바 메모리 내부에서 발생하는 연산을 줄이는 것 보다 네트워크 호출 한 번을 더 줄이는게 효과적

 

개발 이후에 성능 테스트를 해보고 정말 문제가 되는 부분을 찾아서 최적화!!

 

Class 클래스

클래스의 정보(메타데이터)를 다루는데 사용

 

주요 기능

타입 정보 얻기 : 클래스의 이름, 슈퍼클래스, 인터페이스, 접근 제한자 등과 같은 정보 조회

리플렉션 : 클래스에 정의된 메서드, 필드, 생성자 등을 조회하고,  객체 인스턴스를 생성하거나 메서드 호출 등의 작업

동적 로딩과 생성 : Class.forName() 메서드로 클래스를 동적으로 로드하고 newInstance()를 통해 새 인스턴스 생성

애노테이션 처리 : 클래스에 적용된 애노테이션(annotation)을 조회하고 처리하는 기능 제공

 

 

System 클래스

 

Math 클래스

 

Random 클래스

java.util 패키지 소속

 

'Java' 카테고리의 다른 글

Java / 중첩 클래스, 내부 클래스  (0) 2025.02.27
Java / 열거형 - ENUM  (0) 2025.02.25
Java / String 클래스  (0) 2025.02.24
Java / 불변 객체  (0) 2025.02.24
Java / Object 클래스  (0) 2025.02.24