minghxx.blog
  • 자바의 정석 104~108강 ch9 java.lang 패키지와 유용한 클래스(1)
    2023년 08월 12일 07시 17분 21초에 업로드 된 글입니다.
    작성자: 민발자
    728x90

    ch 9-1~3 Object 클래스 equals()

    1. Object 클래스

    모든 클래스의 최고 조상, 메서드 11개, notify(), notifyAll(), wait() 쓰레드 관련 메서드

    Object 클래스 메서드 설명
    protected Object clone() 객체 자신의 복사본 반환
    public boolean equals(Object obj) 객체 자신과 객체 obj가 같은 객체인지 확인
    protected void finalize() 객체 소멸시 가비지 컬렉터에 의해 자동 호출
    public Class getClass() 객체 자신의 클래스 정보(설계도 객체)를 담고있는 Class 인스턴스 반환
    class Class{} : 클래스의 정보를 담기위한 클래스, 설계도 객체, 생성& 정보 얻을 수 있음 → reflection API
    public int hashCode() 객체 자신의 해시 코드 반환
    public String toString() 객제 자신 정보 문자열로 반환
    public void notify() 객체 자신 사용하려고 기다리는 쓰레드 하나 깨움
    public void notifyAll() 객체 자신 사용하려고 기다리는 모든 쓰레드 깨움
    public void wait()
    public void wait(long timeout)
    public void wait(long timeout, int nanos)
    다른 쓰레드가 notify(), notifyAll() 호출할 때까지 현재 쓰레드 무한 대기
    지정된 시간(timeout, nanos)동안 대기

    protected 메서드는 오버라이딩통해 public으로 사용

     

    2. equals(Object obj)

    객체 자신(this)과 주어진 객체 obj를 비교함 같으면 ture 다르면 false

    public static void main(String[] args){
    	Value v1 = new Value(10);
    	Value v2 = new Value(10);
    	System.out.println(v1.equals(v2));
    }
    // false 객체 주소가 달라 false 반환
    
    class Value{
    	int value;
        
    	Value(int value){
    		// this==obj
    		this.value = value;
    	}
    	// 값 비교를 원하면 equals()메서드 오버라이딩통해 비교
    	public boolean equals(Object obj){
    		// 참조변수 형변환 전에는 반드시 instanceof로 확인
    		if(!(obj instanceof Value)) return false;
    		Value v = (Value)obj;
    		return this.value == v.value;
    	}
    }

    ch 9-4~6 hashCode(), toString()

    1. hashCode()

    객체의 해시코드를 반환하는 메서드, 주소를 int로 변환해서 반환

    equals() 오버라이딩하면 hashCode()도 오버라이딩 필요 → equals()의 결과가 true면 두 객체의 해시코드는 같아야 함

    identityHashCode() : hashCode()와 동일

     

    2. toString()

    객체를 문자열로 변환하기 위한 메서드

    해시코드를 반환하기 때문에 오버라이딩하는 것이 좋음

    +) 가변인자 : 매개변수 개수가 지정되어 있지 않음


    ch 9-7~10 Strign 클래스 문자열 비교, 빈 문자열

    1. String 클래스

    문자열을 다루기 위한 클래스

    데이터(char[]) + 문자열 관련 메서드로 구성

    내용을 변경할 수 없는 불변 클래스(immutable)

    덧셈 연산자를 이용한 문자열 결합은 성능이 떨어져 문자열 결합이나 변경이 낮은 경우 변경이 가능한 StringBuffer 사용

     

    2. 문자열 비교

    문자열 리터럴을 사용하는 경우 참조변수가 공유 가능

    인스턴스를 사용하는 경우 항상 새로운 객체 생성돼 참조변수 공유 불가

     

    3. 문자열 리터럴

    프로그램 실행시 자동으로 생성 constant pool(상수 저장소)에 저장

    같은 내용의 문자열 리터럴은 하나만 생성

     

    4. 빈 문자열

    내용이 없는 문자열, 크기가 0인 char 배열을 저장하는 문자열

    +)참고  int[10] → 4byte * 10(길이 length) = 40byte(크기 size)

    문자와 문자열의 초기화에 사용

    String s = ""; // 빈 문자열로 초기화
    char c = ' '; // 공백으로 초기화

    ch 9-11 String 생성자

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

    메서드 설명
    String(String s) s를 갖는 String 인스턴스 생성
    String(char[] v) 문자 배열 v 문자열로 변환
    문자열 문자 배열로 변환 toCharArray()
    String(StringBuffer buf) StringBuffer  문자열 변환
    char charAt(int index) index에 해당하는 문자 하나 알려줌
    int compareTo(String str) 문자열str과 사전순서로 비교함, 같으면 0, 이전이면 음수, 이후면 양수 반환
    "aaa".compareTo("bbb") → -1 알파벳순
    String concat(String str) 문자열 결합
    boolean contains(ChaeSequence s) s가 포함되어 있는지 확인
    boolean endsWith(String suffix) suffix로 끝나는지 확인
    boolean equals(Object obj) obj 문자열과 같은지 비교
    boolean equalsIgnoreCase(String str) 대소문자 구분 없이 비교
    int indexOf(int ch) ch가 문자열에 존재하는지 확인하여 위치 index 반환, 못찾으면 -1
    int indexOf(int ch, int pos) ch가 문자열에 존재하는지 pos부터 확인하여 위치 index를 반환, 못찾으면 -1
    int indexOf(String str) str이 존재하는지 확인하여 위치 index 반환 없어면 -1
    int lastIndexOf(int ch) ch를 문자열의 오른쪽 끝부터 찾아서 위치 index 반환 없으면 -1
    int lastIndexOf(String str) str을 오른쪽 끝부터 찾아서 위치 index 반환 없으면 -1
    int length() 문자열의 길이
    String[] split(String regex) 문자열을 지정된 분리자 regex(정규식)로 나눠 문자열 배열에 담아 반환
    s.split(",");  arr[0] = "dog"; arr[1] = "cat"; arr[2] = "bear";
    String[] split(String regex, int limit) 문자열을 지정된 분리자 regex(정규식)로 나누고 지정된 수 limit로 잘라 배열에 담아 반환
    s.split(",", 2);  arr[0] = "dog"; arr[1] = "cat,bear";
    boolean startsWith(String prefix) prefix로 시작하는지 확인 
    String substring(int begin)
    String substring(int begin, int end)
    시작 위치 begin부터 끝 위치 end번위에 포함된 문자열 반환
    시작 위치는 포함되지만 끝위치는 포함하지 않음 
    String toLowerCase() 소문자 변환
    String toUpperCase() 대문자 변환
    String trim() 왼쪽 끝과 오른쪽 끝에 있는 공백 제거, 중간에 있는 공백은 제거되지 않음
    static String valueOf(boolean b)
    static String valueOf(char c)
    static String valueOf(int i)
    static String valueOf(long l)
    static String valueOf(float f)
    static String valueOf(double d)
    static String valueOf(object o)
    매개변수를 문자열로 변환하여 반환 
    참조변수인 경우 toString() 호출 결과를 반환

    ch 9-12~14 StringJoiner, 문자열과 기본형 변환

    1. join()과 StringJoiner

    join() : 여러 문자열 사이에 구분자를 넣어 결합

    String animals = "dog,cat,bear";
    
    String[] arr = animals.aplit(",");
    String str = String.join("-", arr);
    
    // dog-cat-bear

     

    2. 문자열과 기본형 간의 변환

    // 숫자 → 문자
    int i = 100;
    String s1 = i + "";
    String s2 = String.valueOf(i); // 속도 더 높음
    
    // 문자 → 숫자
    int i1 = Integer.parseInt("100");
    int i2 = Integer.valueOf("100");

    +) 래퍼클래스+오토언박싱 112강

    728x90
    댓글