본문 바로가기

Java/Theory

Chapter 4. java.lang Package

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