송민준의 개발노트

기본자료형과 래퍼클래스 정리 본문

JAVA

기본자료형과 래퍼클래스 정리

송민준 2021. 1. 12. 23:10

기본자료형과 래퍼클래스는 자바의 기본적인 내용중 하나임.

근데 이걸 제대로 알고 있느냐??는 한번 생각해봐야할듯

 

자바의 기본자료형이란?
일단 자바의 자료형은 기본 자료형과 참조 자료형으로 구분됨. 또한 자바는 타입을 강력하게 규제함.
이에 따라 안전성과 확실성을 보장함
어떤 데이터를 저장하느냐에 따라 여러 가지 타입이 있는데 이는 필요에 따라 정함.
기본자료형은 정수형(byte, short, int, long), 실수형(float, double), 논리형(boolean), 문자형(char)이 있음.
반면 참조 자료형은 참조 또는 주소가 들어가 있음.

***중요***
사실 자바의 세계에서는 모든 것이 객체로 되어 있을텐데 왜 기본자료형이라는 것을 정해놨을까라고 생각이 들 수 있음
기본자료형의 경우 자주 사용되기 때문에 성능 저하를 막기 위해 객체로 되어 있지 않음.
하지만 이들 각 기초형도 대응되는 클래스들이 있음.
그리고 선언만 하고 초기화 하지 않았을 경우는 어떻게 될까???
각자 기본값이 있음...!!(null을 가질 수 없음)

1. 정수형의 경우 가장 많이 사용되는 건 int가 아닐까싶음. int는 32비트를 이용하여 약 -21억~21억까지 표현 가능
그 이상일 경우 64비트의 Long을 사용하면 됨. 만약 이하일 경우 short, byte를 사용하면 됨.
범위를 벗어날 경우 exception이 발생함...!

특이케이스(?)로 정수형 상수와 기호 상수가 있음. (나도 첨 알음)
-정수형 상수는 2진수~16진수까지 표현이 가능함.
ex) 8진수 : 016, 018, 019
    16진수 : 0xe, 0x10, 0x11
    2진수 : 0b1010
얼마전 db에서 blob을 byte로 16진수로 해서 가져왔었는데 이런식으로 담겼나봄...
-기호상수
 리터럴을 숫자료 표현하는 것보다 변수처럼 이름을 주어서 사용하게 하는 것임.
  예를 들어 엑셀업로드의 최대로우를 65000으로 주고 싶은데 이를 final int MAX_LOW = 65000으로 해서 쓴다는 얘기임

2. 논리형의 경우 가장 심플함 true와 false

3. 실수형의 경우 float은 32비트 double은 64비트를 표현함
 여기서 재밌는건 정밀도라는 개념인데 정밀도라는건 변수가 얼마나 많은 유효 숫자를 가질 수 있냐는 것이다.
  float의 정밀도는 7개 정도인데 이는 세밀하게 나눠야 하는 분야(물리학 같은...)인 경우 충분하지 않음
  double이 약 15개로 대부분의 경우 double을 사용하는 것을 권장한다고 함
 float의 경우 숫자 뒤에 F를 붙여줘야 함.

4. 문자형의 경우 char는 하나의 문자를 저장 가능함. 유니코드를 지원하기 때문에 각 16비트로 표현됨.




레퍼클래스 박싱 언박싱
자 우선 래퍼 클래스가 왜 나왔냐부터 알아야 함.
프로그래밍을 하다보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 있음.
이럴 때 사용하기 위해 있는 것이 래퍼 클래스임. 
그리고 이런 기본타입을 래퍼클래스로 바꿔주는 것이 박싱(기본타입 -> 래퍼클래스),
래퍼클래스를 기본타입으로 바꿔주는 것을 언박싱(래퍼클래스 -> 기본타입) 이라고 함.
그리고 이러한 박싱과 언박싱을 고맙게도 자바에선 자동으로도 해줌. 이를 자동 박싱과 언박싱이라고 함.
ex) Integer ex = 17; // 자동박싱
    int n = num;      // 자동 언박싱

자 여기까지 왔으면 얘들끼리 비교가 가능한가 궁금한게 정상임.
고맙게도 래퍼클래스와 기본타입은 == 와 equals로 비교가 가능하고
래퍼클래스 간에는 ==는 안되고 equals는 가능함.
클래스를 뒤져보면
public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }
이런식으로 정의해놨음
해시코드는 보니까 기본자료값 그대로 반환해줌.

** 참고로 제네릭스에서는 Wrapper형태로만 들어올 수 있음.
** 기본 자료형은 객체가 아니기 때문에 null이 안들어가는데 래퍼 클래스를 호라용하면 삽가능하다.

'JAVA' 카테고리의 다른 글

추상 클래스란  (0) 2021.01.28
제네릭이란...?  (0) 2021.01.17
JAVA에서 SFTP 활용하기!! CSV 파일 적용(JSch 사용)  (0) 2020.11.08
String 클래스 isEmpty 메소드  (2) 2020.04.16
JavaBean  (0) 2019.11.12