-
[JAVA] Object 클래스와 Class클래스Language/Java 2021. 6. 7. 20:05
java.lang 패키지- 프로그래밍시 import 하지 않아도 자동으로 import된다.
=> import.java.lang.* - 많이 사용하는 기본 클래스들이 속한 패키지이다.
=> String, Integer, System....
toString( ) 메서드
- 객체의 정보를 String으로 바꾸어서 사용할 때 쓰인다.
- String이나 Integer클래스는 이미 재정의 되어 있다.
equals( ) 메서드- 두 인스턴스의 주소 값을 비교하여 True/False를 반환한다.
- 재정의 하여 두 인스턴스가 논리적으로 동일함의 여부를 구현할 수 있다.
- 인스턴스가 다르더라도 논리적으로 동일한 경우 True를 반환하도록 재정의 할 수 있다.
hashCode( ) 메서드
- hashCode( )는 인스턴스의 저장 주소를 반환한다.
- 힙 메모리에 인스턴스가 저장되는 방식이 hash방식이다.
=> hash: 정보를 저장, 검색하는 자료구조 - 자료의 특정 키 값에 대한 저장 위치를 반환해주는 해시 함수를 사용한다.
clone( ) 메서드
- 객체의 원본을 복제하는데 사용하는 메서드
- 생성 과정의 복잡한 과정을 반복하지 않고 복제할 수 있다.
- clone( )메서드를 사용하면 객체의 정보가 동일한 또 다른 인스턴스가 생성되는 것이므로, 객체지향프로그램에서의 정보은닉, 객체 보호의 관점에서 위배될 수 있다.
- 해당 클래스의 clone( )메서드의 사용을 허용한다는 의미로 cloneable인터페이스를 명시해준다.
String 클래스
- 힙 메모리에 인스턴스로 생성되는 경우와 상수 풀에 있는 주소를 참조하는 두가지 방법이 있다.
- 힙 메모리는 생성될때마다 다른 주소 값을 가지지만, 상수 풀의 문자열은 모두 같은 주소 값을 갖는다.
- 한번 생성된 String은 불변
- String을 연결하면 기존의 String에 연결되는 것이 아닌 새로운 문자열이 생성된다.
=> 메모리 낭비가 발생할 수 있다.
StringBuilder, StringBuffer
- 내부적으로 가변적인 char[]를 멤버 변수로 갖는다.
- 문자열을 여러번 연결하거나 변경할 때 사용한다.
- 새로운 인스턴스를 생성하지 않고 char[]를 변경한다.
- StringBuffer는 멀티 쓰레드 프로그래밍에서 동기화를 보장한다.
- 단일 쓰레드 프로그램에서는 StringBuilder를 사용하는게 좋다.
- toString( )메서드로 String반환
Class 클래스
- 자바의 모든 클래스와 인터페이스는 컴파일 후 class파일이 생성된다.
- Class클래스는 컴파일 된 class파일을 로드하여 객체를 동적 로드하고, 정보를 가져오는 메서드가 제공된다.
- Class.forName("클래스 이름")메서드로 클래스를 동적으로 로드한다.
=> Class c = Class.forName("java.lang.String") - 클래스 이름으로 직접 Class 가져오기
=> Class c = String.class - 생성된 인스턴스에서 Class클래스 가져오기
=> String s = new String( )
=> Class c = s.getClass( )
동적 로딩
- 컴파일 시 데이터 타입이 binding되는 것이 아닌 실행 중 데이터타입을 binding하는 방법
- 프로그래밍 시 문자열 변수로 처리했다 런타임시에 원하는 클래스를 로딩하여 binding할 수 있다는 장점을 갖고 있다.
- 컴파일 시 타입이 정해지지 않으므로 동적 로딩시 오류가 발생하면 프로그램에 심각한 장애가 발생 가능하다.
'Language > Java' 카테고리의 다른 글
[JAVA/자료구조] 배열(Array) (0) 2021.06.08 [JAVA/자료구조] 자료구조(Data Structure) (0) 2021.06.08 [JAVA] 인터페이스(interface) (0) 2021.06.07 [JAVA/디자인패턴] 템플릿 메서드(Template Method) (0) 2021.06.06 [JAVA] 추상 클래스(abstract class) (0) 2021.06.06 - 프로그래밍시 import 하지 않아도 자동으로 import된다.