Object 클래스 - 모든 클래스의 최상위 클래스toString() 메서드equals() 메서드, hashCode()메서드 equals()hashCode()String 클래스StringBuilder, StringBufferText Blok(java 13부터)String literalsString utilitiesClass 클래스 사용하기언제사용?동적 로딩
Object 클래스 - 모든 클래스의 최상위 클래스
- java.lang.Object 클래스
- class Student 하면 컴파일러가 자동으로 class Student extends object 를 해줌
toString() 메서드
- 객체의 정보를 String으로 바꾸어서 사용할 때 쓰임
- System.out.println(instance) 했을 때, instance.toString()의 값이 print됨
equals() 메서드, hashCode()메서드
하나 override하면 다른것도 override해주어야함
equals()
- 두 인스턴스의 주소 값을 비교하여 true/false를 반환
- 재정의 하여 두 인스턴스가 논리적으로 동일함의 여부를 구현함
hashCode()
- 자바에서 힙메모리에 인스턴스가 저장되는 방식이 hash 방식임
index = hash(key)
-저장위치 = 해시함수(객체 정보)
- hashCode(0는 인스턴스의 저장 주소를 반환함
- equals 에서 쓰는 어떤 기준값으로 hashCode()가 바뀌었을 시, System.identityHashCode함수로 실제 instance의 주소 값 얻을 수 있음
String 클래스
- 힙 메모리에 인스턴스로 생성되는 경우와 상수 풀에 있는 주소를 참조하는 두가지 방법
- 힙 메모리는 생성될 때마다 다른 주소 값을 가지지만, 상수 풀의 문자열은 모두 같은 주소 값을 가짐
- 한번 생성된 String 은 immutable함(String 클래스는 소스에 final char[] 로 선언되어있음. 불변) ⇒ String을 연결하면 기존의 String에 연결되지 않고 새로운 문자열이 생성됨(메모리 낭비 발생)
StringBuilder, StringBuffer
- 내부적으로 가변적인 char[]를 멤버 변수로 가짐(final이 아님)
- 문자열을 여러번 연결하거나 변경할 때 사용하면 유용함
- 차이점
- StringBuffer 는 멀티 쓰레드 프로그래밍에서 동기화를 보장
- 단일 쓰레드 프로그램에서는 StringBuilder를 권장함
Text Blok(java 13부터)
- 문자열을 “”” “”” 사이에 이어서 만들 수 있음
- html, json 문자열 만들때 유용함
String literals
- reference type으로써 메모리 공간 최적화를 위해서 String pool 이라는 메모리 공간에서 돌려서 씀
- 모든 String literal은 string pool 이라는 할당된 메모리 공간에 저장됨
- 만약 두개의 literal이 동일하다면 String 객체도 동일한 값을 이용함
String utilities
- String utiltiy library → org.apache.commons.lang3
StringUtils
class
Class 클래스 사용하기
- 자바의 모든 클래스와 인터페이스는 컴파일 후 class 파일이 생성됨
- Class 클래스는 컴파일 된 class 파일을 로드하여 객체를 동적 로드하고, 정보를 가져오는 메서드가 제공됨
언제사용?
- 로컬 메모리에 객체 없는 경우, 원격 프로그래밍, 객체의 타입을 알 수 없는 경우에 사용
- 일반적으로 자료형을 알고 있는 경우엔 사용하지 않음
동적 로딩
- 컴파일 시에 데이터 타입이 binding되는 것이 아닌, 실행(runtime)중에 데이터 타입을 binding 하는 방법
- 프로그래밍 시에는 문자열 변수로 처리했다가 런타임시에 원하는 클래스를 로딩하여 binding 할수 있다는 장점