App Programming/JAVA2008. 5. 16. 00:55

★ java.lang패키지


1. object class
 - 자바의 모든 클래스는 슈퍼클래스를 가지며, 새로운 클래스 생성 시 특정 슈퍼클래스를 상속받도록 명시하지 않으면

   object class를 상속받는다.
 - java.lang패키지를 import하지 않아도 object class는 complier에 의해 자동 로드된다.
 - java.lang의 각 class들도 object class 상속받는다.


 * method
  - equals() : 현재 객체와 인자의 객체 참조형이 메모리에서 같은 객체를 참조하는지 검사한다.

              → 주소값의 검사이지 값의 검사가 아니다. (public boolean equals(Object obj)
  - hashcode() :  heap에 있는 객체의 메모리의 주소값을 얻어온다. (public int hashcode())
  - clone() : 객체 자신을 복제하여 똑같은 객체를 새롭게 하나 더 생성한다.
             (protected Object colne() throws CloneNotSupportedException)


 * equals() 와 hashCode()의 관계
  - Haep에 객체가 두 개 들어있고, 두 reference가 각 객체를 참조하고 있을 때,

    HashCode()와 equals() method를 모두 오버라이드 하면 두 객체가 동치인 것으로 간주 할 수 있다.
  - haseCode()를 오버라이드 하지 않으면 기본적으로 객체마다 서로다른 유일한 hashcode값을 반환한다.
  - equals()는 메소드 내부에서 ==연산자를 써서 두 reference가 한 객체를 참조하는지 확인한다.
  - 두 객체의 hashcode 값이 같다고 해서 반드시 같은 것은 아니다.
   → a.hashCode() == b.hashCode()가 성립해도 a.equals(b)가 반드시 true는 아니다.
  - 두 객체가 같으면 반드시 같은 hashcode를 가져야한다.
   → a.equals(b)가 true 라면 a.hashCode() == b.hashCode()도 성립한다.
  - 두 객체가 같으면 equals()메소드 호출 시 true를 반환해야 한다.

   → a.equals(b)와 b.equals(a) 모두 true
  - equals()를 오버라이드 하면 반드시 hashCode()도 오버라이드 해야한다.
  - equals() 와 hashCode() 메소드를 오버라이드 하지 않으면 절대로 두 객체가 같은 것으로 간주될 수 없다.

 


 

2. String / StringBuffer class

 

  - 문자열을 다루기 위해 제공되는 클래스
 

 * 불변성

  - String class :  불변성을 가지기 때문에 문자열이 생성되어 초기화된 이후에는 항상 읽기 전용상태를 유지한다.
                      메소드를 이용하여 문자열 변경 시 원본은 그대로 있고 새로운 객체가 생성된다.
  - StringBuffer class : 불변성이 없기때문에 변경 가능하다.

 

 * 객체의 선언 및 생성
  - String Class : 2가지 방법
   . 기본 데이터형처럼 선언하고 대입하는 문자열 상수 방식 : s1과 s2는 같은 주소를 가진다.
      String s1 = "java";    String s2 = "java";
   . new 연산자를 사용하는 일반적인 객체 생성 방법 : s3과 s4는 다른주소를 가진다.
      String s3 = new String("java");   String s4 = new String("java");
  - StringBuffer Class : 1가지 방법
   -> new 연산자를 사용하는 일반적인 객체 생성 방법으로 생성한다.

 * 생성된 객체의 비교
  - 비교 연산자 == 와 메소드 equals() : 객체의 주소를 비교하여,  같으면 true, 다르면 false를 리턴한다.
    → String Class는 equals() 를 override하여 객체의 내용 즉, 값을 비교할 수 있다.
  -  + 연산자의 사용 : 문자열을 연결할 수 있다.
   . String Class : s1과 s2의 문자열을 연결하여 새로운 문자열 객체가 생성된다.(주소를 s3이 가리킨다)
       String s1 = "java";  String s2 = new String("scjp");  String s3 = s1 + s2;
   . StringBuffer Class : + 사용 시 에러가 발생된다.
  - 메소드들
   . String Classconcat() - s1 객체의 내용에 문자열을 추가하여 s2라는 새로운 객체를 만들어 추가한다.

                     │                  String s1 = "java";  String s2 = s1.concat("scjp");
                     │                 → sb1 == sb2와 sb1.equals(sb2) 모두 false이다.
                     │                    s1은 java s2는 javascjp이므로 주소뿐 아니라 내용도 다르다.

                     ├ subString() - 전체문자열중 일부 문자열만 뽑아내어 새로운 문자열 객체를 생성한다.

                     └ toLowerCase() : 대문자를 소문자로 변환한다.

                         toUpperCase() : 소문자를 대문자로 변환한다.
   . StringBuffer Classappend() - sb1 객체의 내용만 달라진 것이므로, 가리키는 주소는 같다.

                             │              StringBuffer sb1 = new StringBuffer("java");

                             │              StringBuffer sb2 = sb1.append("scjp");

                             │                 → sb1 == sb2 와 sb1.equals(sb2) 모두 true이다.

                             └ toString() - 같은 문자열을 갖는 String객체를 생성한다

   . replace() 메소드 : 특정 문자열을 변경하는 기능을 한다.
     ┌ String Class - s1 객체의 달라진 내용으로 s2라는 새로운 객체를 만든다.

     │                   String s1 = new String("java");  

     │                   String s2 = s1.replace('a', "a");
     │                    → s1 == s2와 s1.equals(s2) 모두 false이다.

     └ StringBuffer Class - sb1 객체의 내용만 달라진 것이므로, 가리키는 주소 같다.

                                    StringBuffer sb1 = new StringBuffer("java"); 

                                    StringBuffer sb2 = sb1.replace(0, 4, "AAAA");
                                     → sb1 == sb2 와 sb1.equals(sb2) 모두 true
 


 

3. Math class


 - 생성자가 private이므로 new를 통한 객체 생성이 불가능하다.
 - methods는 static이므로: 별도의 객체 인스턴스가 필요 없다.

 * 상수

  - Math.PI(원주율)

  - Math.E(자연로그 밑)


 * 메소드

  - ceil() : 올림
  - floor() : 버림
  - round() : 반올림
  - abs() : 절대값
  - rounds() : 반올림   
  - max() : 최대값
  - min : 최소값


  - 삼각함수

   . toRadians() : 각도를 라디안으로 변환한다.
   . toDegrees() : 라디안을 각도로 변환한다.
   . sin() : sin함수
   . cos() : cos함수
   . tan() : tan함수


  - 과학 계산용 프로그래밍 시 자주 필요로 하는 함수

   . exp() : 입력받은 인수에 대한 상수e의 지수승 계산한다.
   . log() : 입력 받은 인수의 자연 로그 값을 계산한다.
   . pow() : 첫 번째 인수를 두 번째 인수 승하여 반환한다.
   . sqrt()  : 제곱근을 구한다.


   - random() : 0.0~1.0 사이의 랜덤 한 실수를 생성한다. (0.000000... ~ 0.9999999...)


 

4. Wrapper class

 

 - 프리미티브 타입의 데이터를 객체로 만들 때 프리미티브 타입을 표현하는 클래스들이다.
  → 프리미티브 타입의 값을 담는 객체 생성

 

 * Wrapper 클래스의 사용방법

  - Byte, Short, Integer, Long, Character, Float, Double, Boolean class가 있따.

  - 기본적인 사용방법

   . 하나의 객체에는 하나의 값을 담을 수 있다.
   . 랩퍼클래스에 포함된 값을 수정하는 방법 : 값구하기→값수정→수정된값을 이용하여 새 랩퍼클래스를 생성

 

 * Wrapper 클래스의 정적메소드와 상수

  - toBinartString() : Integer와 Long 클래스에 있으며

                             파라미터로 넘겨준 값의 내부비트패턴을 문자열로 리턴한다.

  - xxxValue : 객체안에 들어있는 값을 프리미티브 값으로 가져온다.
  - parsexxx : 파라미터로 받은 문자열을 해석하여 프리미티브 값으로 리턴한다.  
  - valueOf : 생성자를 대신하는 정적 메소드로 파라미터를 넘겨주면 그 값을 가진 래퍼객체를 리턴한다.

[출처] 19. java.lang 패키지|작성자 다비



Posted by BAGE