java.lang 패키지와 유용한 클래스

geonu·2022년 5월 14일
0
post-custom-banner

출처 : 자바의 정석
http://www.yes24.com/Product/Goods/24259565
https://cafe.naver.com/javachobostudy/20665

아래의 내용은 '자바의 정석'이라는 책의 내용을 간략하게 정리한 글입니다.

java.lang 패키지

equals (Object obj)

  • 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과값을 boolean 값으로 알려 주는 역할을 한다.

  • equals 메서드는 주소값으로 비교

hashCode()

  • 해시함수는 찾고자하는 값을 입력하면, 그 값이 저장된 위치를 알려주는 해시코드(hashcode)를 반환

  • String 클래스는 문자열 내용이 같으면 동일한 해시코드를 반환하도록 hashCode 메서드가 오버라이딩 되어 있음

clone()

  • 자신을 복제하여 새로운 인스턴스를 생성하는 일을 한다.

  • Object 클래스에 정의된 clone()은 단순히 인스턴스 변수의 값만을 복사, 참조변수는 복사하지 않음

  • 따라서 참조 타입의 인스턴스 변수가 있는 클래스는 완전한 인스턴스 복제가 안됨

  • Cloneable 인터페이스가 구현된 클래서에서만 호출 가능, 미호출시 예외 발생

  • 반드시 예외 처리 해줘야한다.

얕은 복사와 깊은 복사

  • 얕은 복사
    원본과 복사본이 같은 객체를 공유하므로 완전한 복제라고 보기 어려움
    원본이 복사본에게 영향을 줌

clone은 얕은 복사에 해당한다.

  • 깊은 복사
    원본이 참조하고 있는 객체까지 복제
    원본이 복사본에 영향을 주지 않음

getClass()

이름이 Class인 클래스 객체

  • Class객체는 클래스이 모든 정보를 담고 있으며, 클래스당 1개만 존재
  • 클래스 파일이 '클래스 로더(ClassLoader)'에 의해 메모리에 올라갈 때, 자동으로 생성

String 클래스

  • 변경 불가능한(immutable) 클래스
String str1 = "123"; // 주소값 : 0x100
String str2 = "123"; // 주소값 : 0x100
/*
 str1 == str2
 0x100 == 0x100
 true
*/

String str3 = new String("123"); // 주소값 : 0x200
String str4 = new String("123"); // 주소값 : 0x300
/* 
str3 == str4
0x200 == 0x300 
false
*/

join & split

  • str.split("구분자") : 문자열을 구분자를 나눠서 배열에 저장
  • str.join("구분자") : 문자열을 구분자로 구분하여 결함

StringBuffer클래스와 StringBuilder클래스

  • String클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없음

StringBuffer

  • StringBuffer클래스는 변경 가능
  • StringBuffer클래스는 버퍼를 가지고 있으며, 인스턴스 생성시 그 크기를 지정할 수 있음
  • 크기를 지정해주지 않으면 16개의 문자를 지정할 수 있는 크기의 버퍼를 생성
  • equals 메서드를 오버라이딩하지 않아서 StringBuffer 클래스의 eqauls 메서드를 사용해도 등가비교연산자(==)로 비교한 것과 같은 결과를 얻음
  • 따라서 toString()을 호출해서 String인스턴스를 얻은 다음, equals 메서드를 사용해서 비교해야함
  • int capactiry() : StringBuffer 인스턴스의 버퍼 크기를 알 수 있음

StringBuilder

  • StringBuilder 는 멀티쓰레드에 안전(thread safe)하도록 동기화됨, 이로인해 성능 저하 발생
  • StringBuffer에서 쓰레드의 동기화만 뺀 것이 StringBuilder

Math 클래스

  • int round() : 소수점 첫째자리 반올림
  • double rint() : 소수점 첫째자리 반올림
  • sqrt() : 제곱근
  • pow() : n제곱

StrictMath 클래스

  • Math 클래스는 JVM이 설치된 OS의 메서드를 호출해서 사용
  • StrictMath 클래스는 어떤 OS에서 실행되어도 항상 같은 결과를 얻도록 Math 클래스를 새로 작성한 것

래퍼(wrapper) 클래스

자바에서는 8개의 기본형을 객체로 다루지 않는데 이것이 바로 자바가 완전한 객체지향 언어가 아니라는 애기를 듣는 이유

  • 기본형들을 객체로 사용할 때는 객체로 변환해서 작업 수행

  • char형과 int형을 제외한 나머지는 자료형 이름 첫 글자를 대문자로 한 것이 각 래퍼 클래스 이름
    char : Character
    int : Interger

  • 래퍼 클래스들은 모두 equals()가 오버라이딩 되어 있어 주소값이 아닌 객체가 가지고 있는 값을 비교

오토박싱(autoboxing) & 언박싱(unboxing)

오토박싱 : 기본형 값을 래퍼 클래스의 객체로 자동 변환하는 것
언박싱 : 래퍼 클래스의 객체를 기본형 값으로 변환하는 것

java.util.Objects 클래스

  • static boolean isNull(Object obj)
    : 해당 객체가 null이면 true 아니면 false

  • static boolean nonNull(Object obj)
    : isNull 과 반대

  • static T requireNonNull(T, obj)
    : 객체가 null이면 NullPointerException 발생

  • static int compare(Object a, Object b, Comparator c)
    : 두 대상이 같으면 0, 크면 양수, 작으면 음수

  • static boolean equals(Object a, Object b)
    : Objects 클래스의 equals는 Object 클래스의 equals와 다르게 차이는 null 검사를 하지 않아도 된다는 차이점이 있다.

java.util.Random 클래스

  • Random() : System 현재시간을 종자값(seed)으로 이용하는 Random 인스턴스 생성
  • Random(Long seed) : 매개변수 seed를 종자값으로 하는 Random 인스턴스 생성
  • 같은 종자값을 갖는 Random인스턴스는 시스템이나 실행시간 등에 관계 없이 항상 같은 값을 같은 순서로 반환할 것을 보장

java.util.StringTokenizer 클래스

StringTokeniner는 긴 문자열을 지정된 구분자를 기준으로 토큰이라는 여러 개의 문자열로 자르는데 사용

StringTokenizer는 구분자로 단 하나의 문자 밖에 사용하지 못함.
복잡한 구분자를 사용할 때는 정규식을 사용해야한다.

  • StringTokenizer(String str, String delim)
    : 문자열을 구분자로 나누는 StringTokenizer 생성 (구분자는 토큰으로 간주하지 않음)

  • StringTokenizer(String str, String delim, boolean returnDelims)
    : 문자열을 구분자로 나누는 StringTokenizer 생성 (returnDelims을 true로 하면 구분자도 토큰으로 간주)

  • int countTokens()
    : 전체 토큰 수 반환

  • boolean hasMoreTokens()
    : 토큰이 남아있는지 확인

  • String nextToken()
    : 다음 토큰 반환

StringTokenizer st = new StringTokenizer(str, "+-*/=()", true);
// StringTokenizer는 단 하나의 구분자만 사용할 수 있기에 "+-*/=()" 전체가 하나의 구분자가 아닌 각각의 문자가 구분자로 사용된다.

split()은 빈 문자열도 토큰으로 인식하는 반면 StringTokenizer는 빈 문자열을 토큰으로 인식하지 않기 때문에 인식하는 토큰의 개수가 다르다.

profile
시작이 있어야
post-custom-banner

0개의 댓글