본문 바로가기
Book

자바의 정석 - 자바 기본기 정리하기 (8)lang 패키지와 유용한 클래스

by devLog by Ronnie's 2021. 11. 15.

들어가며


문제 구현에 있어서 자바에 대한 기본기의 부족함을 느껴서 오랜만에 자바의 기본 저서인 자바의 정석을 다시 피게 됐다. 그러면서 정말 신기한 경험을 하게 되었는데 바로 예전에 잘 이해가 안가서 읽고 넘어갔던 내용들이 이제는 내 머릿속에서 자연스럽게 그려지는 경험을 하게 되었다. 그동안에 시간들이 헛되지는 않았나보다.

 

어느 곳에서나 기본기는 중요하듯이 이번 기회를 통해 자바 기본기를 더 단단히 다지고자 챕터별로 글로 정리하면서 다시 한번 암기를 하고 좀 더 디테일하게 알아야 되는 곳은 챕터를 나눠서 자바의정석에 나온 내용 + 보강된 내용을 더해서 정리를 하고자 한다. 

 

정리


String클래스
변경 불가능한 클래스 = 불변객체
String클래스는 문자열을 저장하기 위해서 문자형 배열 참조변수 value를 인스턴스 변수로 정의해놓고 있다. 인스턴스 생성시 생성자의 매개변수로 입력받는 문자열은 이 인스턴스변수에 문자형 배열로 저장되는것이다. 한번 생성된 String인스턴스가 갖고있는 문자열은 읽어 올 수만 있고 변경은 불가능하다. 새로운 문자열을 더하면 인스턴스내의 문자열이 바뀌는 것이 아니라 새로운 문자열이 생성되는 것이다. 

StringBuffer클래스
String클래스는 인스턴스를 생성할때 지정된 문자열을 변경할 수 없지만 StringBuffer클래스는 변경이 가능하다.
내부적으로 문자열 편집을 위한 버퍼를 가지고 있으며 인스턴스를 생성할때 그 크기를 지정할 수 있다. 문자열의 길이를 고려하여 버퍼의 길이를 충분히 잡아주는 것이 좋다. 

 


StringBuilder클래스
StringBuffer에서 쓰레드의 동기화만 뺀 것이 StringBuilder

래퍼클래스
객체지향 개념에서 모든 것은 객체로 다루어져야 한다. 그러나 자바에서는 8개의 기본형을 객체로 다루지 않는데 이것이 바로 자바가 완전한 객체지향 언어가 아니라는 얘기를 듣는 이유다. 그 대신 보다 높은 성능을 얻을 수 있었다.
하지만 때로는 기본형 변수도 어쩔수 없이 객체로 다뤄야하는 경우가 있다. 예를 들면 매개변수로 객체를 요구할때, 기본형 값이 아닌 객체로 저장해야 할때 등등.. 이때 사용되는 것이 래퍼 클래스이다.

넘버클래스
래퍼클래스들의 부모 클래스이며 래퍼클래스 이외에 BigInteger, BigDecimal 클래스 자식을 갖는다.
BigInteger는 long으로 다룰수 없는 큰 범위 정수를 BigDecimal은 double로도 다룰수 없는 큰 범위의 부동 소수점수를 처리하기위한 것이다.

오토박싱 & 언박싱
jdk1.5 이전에는 기본형과 참조형 간의 연산이 불가능하여 래퍼클래스로 기본형을 객체로 만들 후 연산해야했다.
하지만 1.5부터는 컴파일러가 Integer객체를 int타입의 값으로 변환해주는 intValue()를 추가해주어 형변환을 해준다. 이렇게 래퍼 객체를 기본형 타입으로 변환해주는 것을 언박싱 그 반대가 오토박싱이라고 한다. 

댓글