Chapter 4. java.lang Package
1. Object Class
- Object Class란
· 모든 Class의 최상위 부모 Class
· Member는 가지고 있지 않으며 Method 11개로만 이루어져 있으며 모든 Instance가 가져야할 기본적인 것들이다.
· Method
◦ public boolean equals(Object obj)
▹ 객체 자신과 객체 obj 일치 여부를 true, false로 알려줌
◦ public int hashCode()
▹ 객체 자신의 Hash Code를 반환
◦ public String toString()
▹ 객체 자신의 정보를 문자열로 반환
◦ protected Object clone()
▹ 객체 자신의 복사본을 반환
◦ protected void finalize()
▹ 객체가 소멸될 때 Garbage Collection에 의해 자동적으로 호출되는 Method
▹ 수행되어야 하는 Code가 있는 경우에만 Overriding함
◦ public Class getClass()
▹ 객체 자신의 Class 정보를 담고 있는 Class Instance를 반환
◦ public void notify()
▹ 객체 자신을 사용하려고 기다리는 Thread 하나만을 깨운다.
◦ public void notifyAll()
▹ 객체 자신을 사용하려고 기다리는 Thread 모두를 깨운다.
◦ public void wait() / public void wait(long timeout) / public void wait(long timeout, int nanos)
▹ 다른 Thread가 notify(), notifyAll()을 호출할 때까지 현재 Thread를 무한히 또는 지정된 시간(timeout, nanos)동안 기다리게 한다.
※ Garbage Collection
> System에서 더는 사용하지 않는 Memory를 자동으로 다시 사용 가능한 Memory로 되돌려주는 기능
※ Hash Code
> 객체에 대한 서명, 또는 checksum과 같은 것으로 보통 객체의 내용을 바탕으로 만들어진 난수처럼 보이는 객체 인식용 정수
- equals Method
· 객체의 참조 변수(Reference Variable)를 받아 비교해 결과를 boolean 값으로 알려주는 역할을 하는 Method
· equals Method의 실제 내용
1 2 3 | public boolean equals (Object obj) { return (this==obj) } | cs |
· equals 사용 방법
Vari_1.eqauls(Vari_2);
◦ 원본 변수(Vari_1)의 참조(.)를 이용해 equals Method를 호출하고 비교할 변수(Vari_2)를 equals Method 내에 넣어 비교하면 true 또는 false가 출력된다.
- hashCode Method
· Hashing 기법에 이용되는 Hash Function을 구현한 함수
· Hashing
◦ 다량의 Data를 저장하고 검색하는데 유용한 Data 관리 기법
◦ Hash Function
▹ 찾고자하는 값을 입력 시 그 값이 저장된 위치의 주소를 알려주는 Hash Code를 반환하는 함수
· Java hashCode Method의 특징
◦ 특징 1
▹ Hash Code가 같은 두 객체가 존재하는 것이 가능
▹ Java의 Object Class에 정의된 hashcCode는 객체의 주소 값을 이용해 Hash Code를 만들어 반환하기 때문에 같은 Hash Code를 갖는 객체는 존재하지 않음
◦ 특징 2
▹ 같은 객체라면 hashCode를 호출했을 때 결과 값인 Hash Code도 같아야하기 때문에 hashCode Method를 적절히 Overriding해야 한다.
▹ Hash Code가 같은 객체가 생기지 않도록 equals Method 또한 같이 Overriding해야 한다.
- toString Method
· 객체 자신의 정보를 문자열로 반환하는 Method
· toString Method의 실제 내용
1 2 3 | public String toString() { return getClass().getName() + “@” + Integer.toHexString(hashCode()); } | cs |
- clone Method
· 자신을 복제하여 새로운 Instance를 생성하는 역할을 하는 Method
· 작업 도중에 복제가 이루어지면 Snapshot과 같이 이전 값으로 돌아갈 수 있는 Instance가 생성되는 것으로 작업을 실패 했을 시 이전 값으로 돌아가는데 도움을 줄 수 있다.
· Object Class에서의 특징
◦ 단순히 멤버변수의 값만 복사하기 때문에 배열이나 Instance가 Member로 정의되어 있는 Class의 Instance는 완전한 복제가 이루어지지 않으며 값이 복제되는 동시에 주소 값도 복제되어 같아지므로 문제가 발생한다.
◦ 문제 해결 방법
▹ Instance를 먼저 생성하고 clone Method를 이용해 복제한다.
▹ clone Method를 새로운 Instance를 생성하고 값을 복제하는 내용으로 Overriding해야 한다.
▹ clone Method는 protected로 선언 및 정의되어 있기 때문에 Overriding하기 위해서는 public으로 수정해야 한다.
2. String Class
- String Class란
· 문자열을 위한 Class로 문자열을 저장하고 다루는데 필요한 Method를 제공한다.
· String Class 내에 문자열을 저장하고 다루기 위해 char형 배열이 정의되어 있다.
· 특징
◦ Instance 수정
▹ String Class의 Instance는 한 번만 저장 가능하며 수정이 불가능하다.
▹ 따라서 문자열 내용을 바꾸기 위해서는 Memory 내에 생성된 Instance의 주소만 바뀌기 때문에 Memory에 값이 쌓이게 되어 부담을 줄 수 있기 때문에 문자열을 바꾸는 것은 자제하는 것이 좋다.
▹ 문자열의 내용을 바꾸기 위해서는 String Class보다는 StringBuffer Class를 사용하는 것이 효과적이다.
◦ 문자열을 만드는 방법
▹ Literal
▸ Memory에 고정적으로 할당하는 방법
▸ Stack Memory에 고정적으로 할당하기 때문에 Program이 종료될 때까지 Memory 상에서 사라지지 않으며 Memory에 부하가 크다.
▸ 같은 값을 갖는 String Instance를 비교하면 주소 값이 같기 때문에 같다는 결과(true)가 출력된다.
▹ Constructor
▸ Memory에 동적으로 할당하는 방법
▸ Heap Memory에 동적으로 할당되며 Memory 상에서 해당 문자열 변수가 선언된 Method가 종료되면 Memory 상에서 사라지기 때문에 Memory에 부담이 적다.
▸ 같은 값을 갖는 String Instance를 비교하면 Instance가 생성될 때마다 Memory 값에 값이 생성되어 주소 값이 달라지게 되므로 비교 결과 값 또한 다르다는 결과(false)가 출력된다.
· intern Method
◦ String Instance의 문자열을 constant pool에 등록하는 일을 한다.
◦ 특징
▹ 등록 시 만약 constant pool에 해당 문자열이 존재할 경우 해당 문자열의 주소 값을 반환시킨다.
▹ 생성자를 이용해 값을 동적으로 지정했을 시 intern Method를 이용해 동일한 값을 지정한다면 해당 Instance는 해당 Class 내에 선언된 Literal 값의 주소를 가리키게 된다.
▹ intern Method로 수행된 String Instance는 equals Method와 등가비교연산자(==)를 가지고도 문자열을 비교할 수 있다.
※ constant pool
> Class File에 존재하는 상수(constant) 목록으로 Class 내에서 사용되는 Literal과 상수 모두가 저장되어 있다.
- Empty String
· 크기가 0인 String Instance를 말한다.
· char형 배열은 크기가 0인 배열로 생성이 가능하며 String은 char형 배열을 내부적으로 가지므로 크기가 0인 String Instance 또한 생성 가능하다.
· 특징
1 2 | String s = “”; char c = ' ’; | cs |
◦ String Instance는 크기가 0인 것으로 초기화할 수 있지만 char 변수는 크기가 0인 것으로 선언 불가능하며 보통 공백으로 초기화한다.
· String Class Constructor & Method
◦ Method Category 참조
- 기본형과 문자열 간의 변환 방법
· 기본형 → 문자열
1 2 3 4 5 6 | String String.valueOf(boolean b) String String.valueOf(char c) String String.valueOf(int i) String String.valueOf(long l) String String.valueOf(float f) String String.valueOf(double d) | cs |
· 문자열 → 기본형
1 2 3 4 5 6 7 | boolean Boolean.getBoolean(String s) byte Byte.parseByte(String s) short Short.parseShort(String s) int Integer.parseInt(String s) long Long.parseLong(String s) float Float.parseFloat(String s) double Double.parseDouble(String s) | cs |
3. StringBuffer Class
- StringBuffer Class란
· String Class와 같이 문자열을 위한 Class로 문자열을 저장하고 다루는데 필요한 Method를 제공한다.
· 특징
◦ String Class와의 공통점
▹ char 형 배열의 참조 변수를 Instance 변수로 선언한다.
◦ String Class와의 차이점
▹ 내부적으로 문자열 편집을 위한 Buffer를 가지고 있으며 StringBuffer Instance를 생성할 시 해당 Buffer의 크기를 지정할 수 있다.
▹ 해당 Buffer는 편집에 용이하도록 크기를 충분히 잡아줘야 한다.
- Constructor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public StringBuffer(int length) { value = new char[length]; shared = false; } public StringBuffer() { this(16); } public StringBuffer(String str) { this(str.length() + 16); append(str); } | cs |
· Instance를 생성할 시 적절한 크기의 char 형 배열이 생성되는데 해당 배열은 문자열을 저장하고 편집하기 위한 공간인 Buffer로써 사용된다.
· Instance는 생성자(StringBuffer(int length))를 이용해 생성하는데 length에 지정한 크기만큼 Buffer가 생성된다.
· length에 크기를 지정하지 않으면 초기 Buffer의 크기는 16으로 주어지게 된다.
- StringBuffer Instance 간의 비교
· StringBuffer Class는 String Class와 달리 equals Method가 Overriding하지 않으며 등가비교연산자(==)로 비교한 것과 같은 결과를 얻는다.
· 따라서 StringBuffer Instance를 제대로 비교하기 위해서는 toString Method를 호출해 String Instance를 얻은 후 equals Method를 이용해 비교해야 제대로된 결과를 얻을 수 있다.
- StringBuffer Method
◦ Method Category 참조
4. Math Class
- Meth Class란
· 수학계산에 유용한 Method로 구성된 Class
· 특징
◦ 생성자의 접근 제어자가 private로 구성되어 있다.
◦ Class 내에 Instance 변수가 존재하지 않는다.
· Method
◦ Method Category 참조
5. wrapper Class
- wrapper Class란
· 기본형 변수가 객체로 다루어져야하는 경우 기본형 값들을 객체로 변환해주는 Class
· 특징
◦ 매개변수로 객체를 요구할 시, 기본형 값을 객체로 저장해야할 시, 객체 간 비교가 필요할 시 등 사용한다.
◦ 8개의 기본형 변수를 변환할 수 있다.
· 생성자 특징
◦ 매개변수로 문자열이나 각 자료형의 값을 인자로 받으며 문자열 사용 시 각 자료형에 맞는 문자열을 사용해야한다.
- 기본형에 따른 wrapper Class
· boolean
◦ Wapper Class : Boolean
▹ Constructor
▸ Boolean(boolean value)
▸ Boolean(String s)
· char
◦ Wapper Class : Character
▹ Constructor
▸ Character(char value)
· byte
◦ Wapper Class : Byte
▹ Constructor
▸ Byte(byte value)
▸ Byte(String s)
· short
◦ Wapper Class : Short
▹ Constructor
▸ Short(short value)
▸ Short(String s)
· int
◦ Wapper Class : Integer
▹ Constructor
▸ Integer(int value)
▸ Integer(String s)
· long
◦ Wapper Class : Long
▹ Constructor
▸ Long(long value)
▸ Long(String s)
· float
◦ Wapper Class : Float
▹ Constructor
▸ Float(double value)
▸ Float(float value)
▸ Float(String s)
· double
◦ Wapper Class : Double
▹ Constructor
▸ Double(double value)
▸ Double(String s)
- Number Class
· wrapper Class의 부모 Class로 내부적으로 숫자를 멤버 변수로 갖는 추상 Class
· Number Class의 자식 Class
◦ BigInteger : long으로도 다룰 수 없는 큰 범위의 정수를 처리하기 위한 Class
◦ BigDecimal : double로도 다룰 수 없는 큰 범위의 부동 소수점 수를 처리하기 위한 Class
· Number Class의 실제 Source
1 2 3 4 5 6 7 8 9 10 11 12 | public abstract class Number implements java.io.Serializable { public abstract int intValue(); public abstract long longValue(); public abstract float floatValue(); public abstract double doubleValue(); public byte byteValue() { return (byte)intValue(); } public short shortValue() { return (short)intValue(); } } | cs |
'Java > Theory' 카테고리의 다른 글
Chapter 6. Collection Framework (0) | 2015.08.19 |
---|---|
Chapter 5. Inner Class (0) | 2015.08.19 |
Chapter 3. Exception Handling (0) | 2015.08.19 |
Chapter 2. 객체지향 프로그래밍 II (0) | 2015.08.19 |
Chapter 1. 객체 지향 프로그래밍 I (0) | 2015.08.19 |