2021. 04. 13(火)TIL



Java


API(Application Programming Interface)

  • プログラミング言語、ライブラリ、フレームワークにはそれぞれ機能があります
  • インタフェース
  • 、APIが提供する機能を制御(使用)可能

    ※ final

  • final変数名-値の変更を禁止
  • finalメソッド-サブクラスの再定義を禁止する
  • finalクラス-クラスを継承できず、サブクラス
  • を作成できません.

    Objectクラス

  • 配列を含むすべてのオブジェクトの最上位の親.
  • 親クラスがextendsで明示的に指定されていない場合は、無条件にextendsオブジェクトとみなされます.
  • オブジェクトのすべてのメソッドは、すべてのクラスを継承します.
  • すべてのオブジェクトがオブジェクトのメソッドを使用できます.
  • オブジェクトには、オブジェクトに関連する必須機能が含まれています.
  • Objectクラスの主な方法

  • boolean equals(Object obj)
    は、現在のオブジェクトと渡されたオブジェクトが同じかどうかを返します.
  • オブジェクトのアドレス値(参照値)を比較します.
  • は、
  • を再定義することができる.
  • int hashCode()
  • の現在のオブジェクトのハッシュ・コード値を返します.
  • は、
  • を再定義することができる.
  • String toString()
  • は、現在のオブジェクトに関する簡単な情報を提供する.
  • クラス名、16進ハッシュコード
  • は、
  • を再定義することができる.
  • Class getClass()
  • 現在のオブジェクトのドキュメント情報を提供します.
  • Object clone()
  • の現在のオブジェクトのコピーを生成して提供します.
  • package object;
    
    public class ObjectApp1 {
    
    	public static void main(String[] args) {
    		Person p1 = new Person(10, "홍길동", "[email protected]");
    		Person p2 = new Person(10, "홍길동", "[email protected]");
    		Person p3 = p1;
    		Person p4 = p2;
    		
    		// boolean equals(Object obj) 메소드
    		// 객체 자신과  obj객체가 동일한 객체인지 여부를 반환한다
    		boolean result1 = p1.equals(p2);
    		boolean result2 = p2.equals(p1);
    		
    		System.out.println("p1이 참조하는 객체와 p2가 참조하는 객체가 같은 객체인가?" + result1);
    		System.out.println("p2이 참조하는 객체와 p1가 참조하는 객체가 같은 객체인가?" + result2);
    	}
    }
    
    package object;
    
    public class ObjectApp2 {
    
    	public static void main(String[] args) {
    		Person p1 = new Person(10, "홍길동", "[email protected]");
    		Person p2 = new Person(20, "김유신", "[email protected]");
    		
    		// String toString()
    		// 객체에 대한 간단한 정보를 문자열로 변환한다.
    		// 객체의 멤버변수에 저장된 정보를 반환하도록 재정의해서 사용한다.
    		System.out.println(p1); // 참조변수값을 출력하면 참조변수.toString()의 반환값이 출력된다.
    		System.out.println(p2);
    		System.out.println(p1.toString());
    		System.out.println(p2.toString());
    	}
    }
    

    StringBuilderとStringBuffer


  • 一時記憶(バッファ)があるため、append(異なるタイプのデータ)を使用して、新しいオブジェクトを作成することなく、一時記憶にデータを格納できます.

  • 一時リポジトリに格納されたデータは、toString()メソッドを実行して文字列として提供できます.

  • StringBuilderとStringBufferの使い方は全く同じです.
  • StringBufferは、マルチスレッド環境で安全に使用できますが、速度が遅いです.
  • StringBuilderはマルチスレッド環境では安全ではありませんが、高速です.

  • 使用例
      String text = "국어" + 70 + "수학" + 80 + "영어" + 100;
    		// ["국어"]		     	
    		// ["국어70"]				
    		// ["국어70수학"]				
    		// ["국어70수학80"]			
    		// ["국어70수학80영어"]  
    		// ["국어70수학80영어100"]
    		// text에 최종적으로 대입되는 값은 "국어70수학80영어100" 다.
    		// String객체의 불변특성 때문에 불필요한 객체 5개가 추가로 생성된다.
    
      StringBuilder sb = new StringBuilder();
      sb.append("국어");	// 버퍼에 저장
      sb.append(70);		// 버퍼에 저장
      sb.append("수학");	// 버퍼에 저장
      sb.append(80);		// 버퍼에 저장
      sb.append("영어");	// 버퍼에 저장
      sb.append(100);		// 버퍼에 저장
      String finalText = sb.toString(); // 버퍼에 저장된 데이터가 전부 연결된 문자열이 반환된다.

  • StringBuilderを使用すると、「+」演算で接続するよりも不要なオブジェクトの作成が抑制され、メモリ効率と実行性能が向上します.
  • WrapperクラスとAutoBoxing/Unboxing


    Wrapperクラス

  • 基本資料型タイプに対応するレベル.
  • のデフォルトデータ型値を持つオブジェクトを作成できます.
  • java.langパッケージで定義します.
  • デフォルトのデータ値ではなくオブジェクトとして保存する必要がある場合、
  • .
  • メソッドのパラメータを呼び出す必要がある場合、
  • null値が保存可能な場合は
  • です.
  • デフォルトデータ型値に対して各種機能を実行する必要がある場合、
  • .
  • でサポートされているWrapperクラス
    |基本リソース|Wrapperクラス|
    | --- | --- |
    | byte | Byte |
    | short | Short |
    | int | Integer |
    | long | Long |
    | float | Float |
    | double | Double |
    | char | Character |
    | boolean | Boolean |
  • 自動アセンブリ/取り外し


  • JAVA 1.5版で導入された機能

  • 基本データ型とWrapperオブジェクト型の変換を自動的にサポートします.

  • じどうくみたて
      Integer instance = new Integer(10);  // 박싱
      
      Integer instance = 10;  // 오토박싱 
      // Integer instance = new Integer(10); // 실제로 실행되는 코드

  • 開封する
      Integer instance = new Integer(10);  // 박싱
      int value = instance.intValue();      // 언박싱
    
      int value = instance; // 오토 언박싱
      // int value = instance.intValue(); // 실제로 실행되는 코드

  • 実際の使用例
      public class Sample {
        public void test1(int value) {
          수행문
        }
        
        public void test2(Integer instance) {
          수행문
        }
      }
      public static void main(String args) {
        Sample sample = new Sample();
    
        sample.test1(1);
        sample.test2(1); // 실제 실행되는 코드 sample.test2(new Integer(1));
      }