Chapter09 java.lang패키지와 유용한 클래스(java.lang package & util classes)

2021. 8. 26. 09:00· LANGUAGE/[JAVA]
목차
  1. 1. java.lang패키지
  2. 1.1 Object클래스
  3. 1.2 String클래스
  4. 1.3 StringBuffer클래스와 StringBuilder클래스
  5. 1.4 Math 클래스
  6. 1.5 래퍼(wrapper) 클래스

1. java.lang패키지

1.1 Object클래스

  • 모든 클래스의 최고 조상. 오직 11개의 메서드만을 가지고 있다.
  • 이 중 notify(), wait() 등은 쓰레드와 관련된 메서드이다.

 

1.1.1 equals(Object obj)

  • 객체 자신과 주어진 객체를 비교하여, 같으면 true, 다르면 false를 반환
  • 객체의 주소를 비교(참조변수 값 비교)X → 내용을 비교함

 

1.1.2 hashCode()

  • 객체의 해시코드(hash code, 객체의 지문)를 반환하는 메서드
  • Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환.
  • equals()를 오버라이딩하면, 두 객체의 hashCode()는 같아야 한다.
  • System.identityHashCode(Object obj)는 Object클래스의 hashCode()와 동일

 

1.1.3 toString()

  • 객체를 문자열(String)으로 변환하기 위한 메서드
  • 보통 오버라이딩을 한다.

 

1.1.4 clone()

  • 자신을 복제하여 새로운 인스턴스를 생성.
  • 단, 참조타입의 인스턴스 변수가 있는 클래스는 완전한 인스턴스 복제가 이루어지지 않고 복제본이 원래의 인스턴스에 영향을 미치게 된다.
//아래와 같이 Cloneable 인터페이스를 구현해야 clone()을 사용할 수 있다.
class 클래스명 implements Cloneable {
 // ...
    public Object clone() {
        Object obj = null;
        try {
             obj = super.clone()
        } catch(CloneNotSupportedException e) { }
        return obj;
    }
}

<얕은 복사와 깊은 복사>

  • 얕은 복사 : 복사본이 원본에 영향을 끼침
    • 깊은 복사 : 복사본이 원본에 영향을 끼치지 않음.

 

1.1.5 getClass()

  • 자신이 속한 클래스의 Class객체를 반환하는 메서드.

 

1.2 String클래스

  • 문자열을 다루기 위한 클래스
  • String클래스 = 데이터(char[]) + 메서드(문자열 관련)
  • 내용을 변경할 수 없는 불면(immutable) 클래스
  • 내용이 바뀔 수 없기 때문에 덧셈 연산자를 이용한 문자열 결합은 성능이 떨어짐(새로운 문자열이 담긴 String인스턴스가 생기기 때문) -> StringBuffer를 사용

 

1.2.1 문자열의 비교

String str1 = "abc";
String str2 = "abc"; // 하나의 문자열(abc), 좋은 방법를 str1과 str2가 공유함(주소).
String str3 = new String("abc");
String str4 = new String("abc"); // str3, str4는 각각 새로운 객체(문자열)가 생성됨

따라서 등가비교(==, 주소 비교) 연사자를 사용하지 말고, .equals()를 사용하여 내용 비교를 해야한다.

 

1.2.2 문자열 리터럴

  • 프로그램 실행시 자동으로 생성(constant pool)에 저장
  • 같은 내용의 문자열 리터럴은 하나만 만들어진다.

 

1.2.3 빈 문자열

  • 내용이 없는 문자열. 크기가 0인 char형 배열을 저장하는 문자열
String str = ""; // str을 빈 문자열로 초기화
char c = ' '; // 공백으로 초기화
  • 크기가 0인 배열을 생성하는 것은 어느 타입이나 가능

 

1.2.4 String클래스의 생성자와 메서드

 

 

1.2.5 join()과 StringJoiner

  • join()과 StringJoiner는 여러 문자열 사이에 구분자를 넣어서 결합한다.
String animals = "dog,cat,bear";
String[] arr = animals.split(",");
System.out.println(String.join("-", arr)); // 구분자 : "-"
///////////////////////////////////////
 StringJoiner sj = new StringJoiner("/","[","]"); // 구분자 : "/", 시작 : "[", 끝 : "]" 
        for(String s : arr)
            sj.add(s);
System.out.println(sj.toString());

 

1.2.6 문자열과 기본형 간의 변환

1. 숫자를 문자열로 바꾸는 방법

int i = 100;
String str1 = i + "";
String str2 = String.valueOf(i); // 속도가 더 빠름

2. 문자열을 숫자로 바꾸는 방법

int i = Integer.parseInt("100");
int i2 = Integer.valueOf("100"); 
Integer i2 = Integer.valueOf("100"); // valueOf는 참조형으로 나옴.

 

1.3 StringBuffer클래스와 StringBuilder클래스

1.3.1 StringBuffer클래스

  • String처럼 문자형 배열(char[])을 내부적으로 가지고 있다.
  • String과 달리 내용을 변경할 수 있다.
  1. StringBuffer의 생성자
public StringBuffer(int length) {
    value = new char[length];
        shared = false;
}
public StringBuffer() {
    this(16); // 크기 지정을 안하면 버퍼의 크기는 16이됨.
}
public StringBuffer(String str) {
    this(str.length() + 16); // 지정한 문자열보다 16이 더 크게 버퍼를 생성
        append(str); // str추가
  1. StringBuffer의 변경
    • delete() : 삭제
    • insert() : 삽입
    • append() : 끝에 문자열 추가, 지정된 내용을 추가 후 StringBuffer의 참조를 반환
StringBuffer sb = new Stringbuffer("abc");
//sb.append("123");
//sb.append("ZZ");
sb.append("123").append("ZZ");
  1. StringBuffer의 비교
    • StringBuffer는 equals()가 오버라이딩 되어있지 않다(주소비교).
    • String으로 변환 후에 equals()로 비교해야하함.

 

  1. StringBuffer클래스의 생성자와 메서드

 

1.3.2 StringBuilder란?

  • StringBuffer는 동기화 되어 있다. (멀티 쓰레드에 안전(thread-safe))
  • StringBuilder는 동기화가 안되어 있다.
  • 멀티 쓰레드 프로그램이 아닌 경우, 동기화는 불필요한 성능저하를 일으킴

 

1.4 Math 클래스

  • 수학관련 static메서드의 집합
  • round()로 원하는 소수점 아래 첫번째 자리에서 반올림

 

1.4.1 예외를 발생시키는 메서드

  • 정수형 간의 연산에서 발생하는 오버플로우를 감지하기 위한 메서드
int addExact(int x, int y);
int subtractExact(int x, int y);
int multiplyExact(int x, int y);
int increamentExact(int a);
int decrementExact(int a);
int negateExact(int a); // 매개변수의 부호를 바꿔줌
int toIntExact(long value);

 

1.4.2 StrictMath클래스

  • Math클래스는 최대한의 성능을 위해서 OS의 메서들르 호출해서 상용한다. 하지만 OS마다 결과값이 다를 수 있으므로 항상 같은 결과를 가지도록 성능면에서는 손해를 보지만 StricMath메서드를 사용한다.

 

1.5 래퍼(wrapper) 클래스

  • 8개의 기본형을 객체로 다뤄야할 때 사용하는 클래스.

 

1.5.1 Number클래스

  • 모든숫자 래퍼 클래스의 조상

 

1.5.2 문자열을 숫자로 변환하기

int i = new Integer("100").intValue();
int i2 = Integer.parseInt("100");
Integer i3 = Integer.valueOf("100");
//////////////////////////////////
int i4 = Integer.parseInt("100", 2); // 100(2) -> 4
int i5 = Integer.parseInt("100", 8); // 100(8) -> 64
int i6 = Integer.parseInt("100", 16); // 100(16) -> 256
int i7 = Integer.parseInt("FF", 16); // FF(16) -> 255

 

1.5.3 오토박싱 & 언박싱

  • 기본형을 래퍼 클래스로 바꾸는것을 오토박싱, 그 반대는 언박싱이다.
저작자표시 (새창열림)

'LANGUAGE > [JAVA]' 카테고리의 다른 글

Chapter11 컬렉션 프레임웍 Collections Framework  (0) 2021.08.28
Chapter10 날짜와 시간 & 형식화(date, time and formatting)  (0) 2021.08.27
Chapter08 예외 처리(exception handling)  (0) 2021.08.25
Chapter07 객체지향 프로그래밍II(Object-oriented Programming II)  (0) 2021.08.24
Chapter06 객체지향 프로그래밍 I(Object-oriented Programming I)  (0) 2021.08.20
  1. 1. java.lang패키지
  2. 1.1 Object클래스
  3. 1.2 String클래스
  4. 1.3 StringBuffer클래스와 StringBuilder클래스
  5. 1.4 Math 클래스
  6. 1.5 래퍼(wrapper) 클래스
'LANGUAGE/[JAVA]' 카테고리의 다른 글
  • Chapter11 컬렉션 프레임웍 Collections Framework
  • Chapter10 날짜와 시간 & 형식화(date, time and formatting)
  • Chapter08 예외 처리(exception handling)
  • Chapter07 객체지향 프로그래밍II(Object-oriented Programming II)
쿠엔크
쿠엔크
우아한테크코스 5기 BE 에단 Github : https://github.com/cookienc
쿠엔크
기러기는 기록기록
쿠엔크
전체
오늘
어제
  • 분류 전체보기 (132)
    • CS (46)
      • [OS] (12)
      • [NETWORK] (10)
      • [DATABASE] (11)
      • [BASIC CONCEPT] (1)
      • [DATA STRUCTURE] (7)
      • [ALGORITHM] (5)
    • LANGUAGE (17)
      • [JAVA] (17)
    • DESIGN_PATTERN (2)
    • FRAMEWORK (18)
      • [SPRING] (18)
    • ORM (11)
      • JPA (11)
    • AWS (7)
    • BOOK (10)
      • [자바 웹 개발 워크북] (3)
      • [이펙티브 자바] (7)
    • 개발 (19)
      • [오류] (7)
      • [고민] (1)
      • [우테코] (10)
      • [iTracker] (1)
    • Tip (1)
      • [Plugins] (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바 웹 개발 워크북
  • 알고리즘
  • 네트워크
  • JVM
  • 개념
  • CORS
  • HTTP
  • JPA
  • Spring
  • 디자인 패턴
  • Effective Java
  • 오류
  • 자료구조
  • aws
  • 운영체제
  • 가비아
  • 스프링
  • java
  • 데이터베이스
  • ArgumentResolver

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
쿠엔크
Chapter09 java.lang패키지와 유용한 클래스(java.lang package & util classes)

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.