본문 바로가기

Java

[Java] java.lang 패키지 & 유용한 클래스들

1. Object

   
protected Object clone() 객체 자신의 복사본을 반환한다
public boolean equals(Object obj) 객체 자신과 객체 obj가 같은 객체인지 알려준다
protected void finalize() 객체가 소멸될 때 가비지 컬렉터에 의해 자동으로 호출된다. 
public Class getClass() 객체 자신의 클래스 정보를 담고 있는 Class인스턴스를 반환한다
public int hashCode() 객체 자신의 해시코드를 반환한다
public String toString() 객체 자신의 정보를 문자열로 반환한다
public void notify() 객체 자신을 사용하려고 기다리는 쓰레드를 하나만 깨운다
public void notifyAll() 객체 자신을 사용하려고 기다리는 모든 쓰레드를 깨운다
public void wait()
pubilc void wait(long timeout)
public void wait(long timeout, int nanos)
다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 스레드를 무한히 또는 지정된 시간동안 기다리게 한다

Object 클래스에 정의된 clone은 단순히 인스턴스 변수의 값만을 복사한다

따라서 참조변수의 경우 Cloneable 인터페이스를 구현해야한다

class Point implements Cloneable {
	int x, y;
    
    Point(int x, int y) {
    	this.x = x;
        this.y = y;
    }
    
    public String toString() {
    	return "x="+x+", y="+y;
    }
    
    public Object clone() {
    	Object obj = null;
        try {
        	obj = super.clone();
        } catch(CloneNotSupportedException e) {}
        
        return obj;
    }
}

JDK 1.5부터 공변 반환타입을 허용한다.

(오버라이딩한 메서드의 반환타입을 자손클래스의 타입으로 변경할 수 있다.)

class Point implements Cloneable {
	int x, y;
    
    Point(int x, int y) {
    	this.x = x;
        this.y = y;
    }
    
    public String toString() {
    	return "x="+x+", y="+y;
    }
    
    public Point clone() {
    	Object obj = null;
        try {
        	obj = super.clone();
        } catch(CloneNotSupportedException e) {}
        
        return (Point)obj;
    }
}

clone은 객체에 저장된 값을 그대로 복사하기만 하고, 참조하고 있는 객체까지 복제하진 ``않는다

Class 객체를 얻는 방법

1. Class cObj = new Card().getClass();

2. Class cObj = Card.class;

3. Class cObj = Class.forName("Card");

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

메서드 설명
String(StringBuffer buf) StringBuffer인스턴스가 갖고 있는 문자열과 같은 내용의 String 인스턴스를 생성한다
int compareTo(String str) 문자열과 사전순서로 비교한다. 같으면 0을, 사전순으로 이전이면 음수를, 이후면 양수를 반환한다
boolean endsWith(String suffix) 지정된 문자열로 끝나는지 검사한다
String intern() 문자열을 상수풀에 등록한다. 이미 상수풀에 같은 내용의 문자열이 있을 경우 그 문자열의 주소값을 반환한다
boolean startsWith(String prefix) 지정된 문자열로 시작하는지 검사한다

문자 인코딩 변환

byte[] utf8_str = "가".getBytes("UTF-8");
String str = new String(utf8_str, "UTF-8");

StringBuffer클래스와 StringBuilder클래스

String 클래스는 immutable하므로 지정된 문자열을 변경할 수 없지만, StringBuffer 클래스는 변경이 가능하다

아래와 같은 코드로 문자열을 변경할 수 있다.

StringBuffer sb = new StringBuffer("abc");
sb.append("123");
sb.append("123").append("ab");

StringBuffer 클래스는 String 클래스와 달리 equals 메서드를 오버라이딩 하지 않아서 인스턴스의 주솟값을 비교한 것과 같다

 

StringBuffer vs StringBuilder

Stringuffer는 thread safe한 반면, StringBuilder는 그렇지 않다

멀티쓰레드로 작성된 프로그램이 아니라면 StringBuilder를 사용하는게 성능이 좋다

정규식

Pattern과 Matcher가 있다

import java.util.regex.*;

class Example {
	public static void main(String[] args) {
    	String data = "this is helloaaa";
        
        Pattern p = Pattern.compile("^this(.*)aaa$");
        Matcher m = p.matcher(data);
        if(m.matches()) System.out.println("data matched");
    }
}

'Java' 카테고리의 다른 글

[Java] 예외처리  (0) 2020.11.15
[Java] 객체지향 프로그래밍  (0) 2020.11.15
[Java] 배열  (0) 2020.11.11
[Java] 변수  (0) 2020.11.11
[Java] 자바란  (0) 2020.11.11