본문 바로가기
JAVA/기초

[JAVA 기초] 11 기본 클래스

by 푸_푸 2022. 8. 16.
728x90

*java.lang 패키지
String, Integer와 같은 많이 사용하는 클래스들이 포함된 패키지
컴파일할 때 자동으로 Import문이 추가됨

*Object
모든 자바 클래스의 최상위 클래스. 모든 클래스는 Object 클래스를 상속 받음

*toString 메서드
String toString() : 객체를 문자열로 반환
클래스이름@해시코드값

*equals() 메서드
boolean equals(Object obj) : 두 인스턴스가 동일한지 여부를 반환
인스턴스 주소를 비교함

*hashCode() 메서드
int hashCode() : 객체의 해시 코드 값을 반환

*clone() 메서드
Object clone() : 객체를 복제하여 동일한 멤버 변수 값을 가진 새로운 인스턴스를 생성
객체 원본을 유지해 놓고 복사본을 사용한다거나, 프로토타입의 복사본을 사용해 동일한 인스턴스를 만들어 복잡한 생성 기능을 간단히 하려는 경우에 사용

*다른 Object 메서드들
Class getClass() : 객체의 Class를 반환
void finalize() : 인스턴스가 힙 메모리에서 제거될 때 가비지 컬렉터에 의해 호출되는 메서드. 네트워크 연결 해제, 열려있는 파일 스트림 해제 등을 구현
void notify() : wait() 메서드에 의해 기다리고 있는 스레드(run runnable 상태)를 실행 가능한 상태(runnable)로 가져옴

*String 선언법
1) String str1 = new String("abc");    //생성자의 매개변수로 문자열 생성
2) String str2 = "test";    //문자열 상수를 가리키는 방식
1의 경우 "abc" 문자열을 위한 메모리가 할당되고 새로운 객체가 생성된다
2와 같이 생상자를 이용하지 않고 바로 문자열 상수를 가리키는 경우 기존에 만들어져 있던 "test"라는 문자열 상수의 메모리 주소를 가리키게 됨
프로그램에서 상수 값을 저장하는 공간을 상수 풀(constant pool)이라고 함

*String클래스의 final char[]변수
String클래스의 구현 내용을 보면 final로 선언되어 있다
따라서 한 번 생성된 문자열은 변경되지 않는다

*String 문자열 연결
두 개의 문자열을 연결하면 하나의 문자열이 변경되는 것이 아니라 두 문자열이 연결된 새로운 문자열이 생성된다

*String Buffer와 String Builder클래스 
내부에 변경 가능한(final이 아닌) char[] 변수를 가짐
추가 메모리를 사용하지 않고 기존의 배열 확장
String Buffer : 여러 스레드가 동시에 문자열을 변경하려 할 때 문자열이 안전하게 변경되도록 보장
String Builder : 보장되지 않음. 멀티 스레드 프로그램이 아니라면 String Builder 클래스가 실행 속도가 빠름

*Wrapper 클래스
기본 자료형 처럼 사용할 수 있는 클래스
Boolean, Byte, Character, Short, Integer, Long, Float, Double

*Integer 클래스의 메서드
- intValue()

Integer i = new Integer(100);
int m = i.intValue();          //int 값 가져오기. m값을 출력하면 100이 출력됨


- valueOf()

Integer i = Interger.valueOf("100");    //정수나 문자열을 바로 Integer 클래스로 반환받음


- parseInt()

int n = Integer.parseInt("100");    //문자열이 숫자를 나타낼 때 int 값을 바로 가져와서 반환


*오토박싱과 언박싱
- 오토박싱 : 기본형을 객체형으로 바꾸는 것
- 언박싱 : 객체형을 기본형으로 꺼내는 것

Integer n1 = new Integer(100);
int n2 = 200;
int sum = n1 + n2;     //Integer형 n1을 n1.intValue90로 변환(언박싱)
Integer n3 = n2;    //int형 n2를 Integer.valueOf(n2)로 변환(오토박싱)


*Class 클래스
자바의 모든 클래스와 인터페이스는 컴파일되고 나면 class 파일로 생성된다
이 class파일에는 클래스나 인터페이스에 대한 변수, 메서드, 생성자 등의 정보가 들어있다
Class 클래스는 컴파일된 Class 파일에 저장된 클래스나 인터페이스 정보를 가져오는 데 사용한다

*Class 클래스를 선언하고 정보를 가져오는 방법
1) Object 클래스의 getClass() 메서드 사용하기

String s = new String();
Class c = s.getClass();    //getClass() 메서드의 반환형은 Class


2) 클래스 파일 이름을 Class 변수에 직접 대입하기

Class c = String.Class;


3) Class.forName("클래스 이름") 메서드 사용하기

Class c = Class.forName("java.lang.String");


*Class 클래스를 활용해 클래스 정보 알아보기
사용하고자 하는 클래스의 자료형을 모르는 경우 Class 클래스를 통해서 생성자, 메서드, 멤버 변수 정보를 찾을 수 있다
리플렉션(reflection) : Class 클래스를 활용하여 정보를 가져오고, 이 정보를 활용하여 인스턴스를 생성하거나 메서드를 호출하는 방식
- getConstructors() : 모든 생성자 가져오기
- getFields() : 모든 멤버 변수 가져오기
- getMethods() : 모든 메서드 가져오기

*newInstance()
Class 클래스를 사용하여 얻는 정보를 바탕으로 인스턴스 생성

*Class.forName()
동적 로딩 : 프로그램 실행 이후 클래스의 로딩이 필요한 경우 Class.forName() 메서드를 동적 로딩으로 제공한다

728x90

댓글