[Java]Object class의 method 활용
equals()
- 두 인스턴스의 주소 값 비교 ⇒ true/false
- overriding(재정의)하여 논리적으로 동일함의 여부 구현
- 인스턴스가 다르더라도 논리적으로 동일하면 true를 반환하게끔 재정의 가능
hashCode()
- hash : 정보를 저장 및 검색하는 자료구조
- hashCode()는 인스턴스의 저장 주소 반환
- 인스턴스가 힙메모리에 저장되는 방식
- 키 값의 저장 위치를 반환해주는 해시 함수 사용
clone()
- 원본 객체를 복제하는 메서드
- 동일한 인스턴스를 갖게 됨
- 명시적으로 clone가능하다는 “cloneable”이라는 인터페이스를 implements 해야 함
String 클래스
- String 선언
- String str1 = new String("abc"); -> 힙에 메모리가 생성 String str2 = "abc"; -> 상수 poll(constant pool)에 있는 "abc"의 주소만 가르키는 것
- 힙 메모리는 생성될때마다 다른 주소 값을 가짐
- 상수 풀의 문자열은 모두 같은 주소 값을 가짐
- 한 번 생성된 String은 불변
- String 연결은 새로운 문자열의 생성 → 메모리 낭비
StringBuilder, StringBuffer
- 내부적으로 char[]을 가지고 있는데 가변적임
- 문자열 변경하거나 연결할 때 유용
- 인스턴스 생성 대신에 char[] 변경
- StringBuffer는 멀티 쓰레드 프로그래밍에서 동기화(synchronization)을 보장
- 단인 쓰레드 프로그램에서는 StringBuilder 사용을 권장
- .append 사용
text block(java13~)
- html, json 문자열 만드는데 유용함
- public static String getBlockOfHtml(){ return """ <body """; }
Class Class
- 컴파일 된 class파일을 로드하고 정보를 가져올 때 쓰면 됨
- Class.forName(”클래스 이름”)으로 동적 로드 함
- Ex) Class c = Class.forName(”java.lang.String”);
- new없이 Class의 newInstance()메서드로 인스턴스 생성 가능→ 클래스 정보 활용하여 생성하는 것
- 인스턴스가 있는 상태에서는 .getClass(); 메서드를 사용해서 가져올 수 있음
- 컴파일 시가 아닌 실행 중에 데이터 타입을 binding하는 것 → 동적 로딩
- 동적 로딩의 장점 : 동적으로 그때그때 원하는 클래스를 불러올 수 있음
- 동적 로딩의 단점 : 컴파일 시에 타입 디텍션이 안됨 → 오류발생시 심각한 장애가 발생할 수도 있음