フルスタックプロシージャ11 Java


22.3.21.(月)


スキャナ
多形性(Overload)
オブジェクト形式のコピー(デフォルトのコピー)

1. Scanner





<簡単なスキャン例>



<スキャナを使用した簡単なプログラム>

2.多形性-過負荷


2-1. ロードメソッドのオーバーロード
- 원칙적으로 하나의 클래스 안에서는 동일한 이름의 메서드가 두 개 이상 존재할 수 없지만,
  이를 가능하게 하는 예외적인 처리 기법.
2-2. 同じ名前のメソッドの条件の定義
- 메서드 간의 파라미터가 서로 달라야 한다.

	-> 파라미터의 데이터 타입이 서로 달라야 한다.
	   (데이터형이 동일하고 변수의 이름이 다른 경우는 동일한 파라미터로 인식된다.)

		a( int a )
		a( String a )
		a( int b )	X

	-> 파라미터의 갯수가 다르다.

		a( int a )
		a( int a, int b )

	-> 서로 다른 데이터형을 갖는 파라미터들의 전달 순서가 다르다.

		a( int a, int b )	  
		a( int a, String b )
		a( String a, int b )

- 리턴형이 다른 경우는 오버로드 성립에 아무런 영향을 주지 않는다.

- 파라미터의 데이터형이 서로 다르기 때문에 오버로드 성립

	public void user( int a ) {}
	public void user( long a ) {}

- 파라미터의 갯수가 서로 다르기 때문에 오버로드 성립

	public void user( int a ) {}
	public void user( int a, int b ) {}

- 데이터형의 전달 순서가 서로 다르기 때문에 오버로드가 성립

	public void user( int a, long b ) {}
	public void user( long a, int b ) {}

- 오버로드는 하나의 메서드에 대해 호출할 수 있는 모든 경우의 수를 미리 준비해 놓음으로써
  메서드를 만드는 측은 번거로울 수 있지만, 메서드를 호출하는 측은 데이터 타입을 신경쓰지
  않고 편리하게 사용할 수 있게 하기 위함이다.

<メソッドのOverloadingメソッドとmainメソッドの実行>

2-3. 作成者のOutload
- 객체 생성 방법의 다양화

- 생성자 역시 메서드의 한 종류이므로 Overload가 가능하다.

- 생성자를 Overload할 경우, 해당 클래스에 대해 '객체를 생성하는 방법' 을 다양하게
  준비할 수 있게 된다.
  

<簡易ジェネレータのオーバーロード>

<ジェネレータのOverloadingとtoStringメソッド!>

2-4. このキーワードを使用したジェネレータOverload
- this 키워드의 용법

-> 메서드처럼 사용할 경우, 현재 클래스의 다른 생성자를 의미한다.

- this 키워드를 사용하여 생성자 Overload를 간결하게 처리하기

-> 파라미터가 서로 다른 생성자들이 하나의 완전한 생성자를 호출하도록 하여,
    데이터의 초기화를 한 곳에서 일괄적으로 처리하도록 구현할 수 있다.
class Hello {

	public Hello( String msg ) {
		System.out.println( msg );
	}
		
	public Hello( ) {
		// "public Hello( String msg )" 생성자를 호출
		this( "안녕하세요" );
	}					
}

<このキーワードを使用したジェネレータOverloadingとtoString出力クラスの内容>

3.オブジェクトフォーマットのコピー


3-1. オブジェクト形式のコピー
- java 기본 유형의 데이터들처럼 객체 참조변수의 경우에도 형변환(casting)이 이루어진다.

- 서로 다른 클래스 유형으로부터 나온 객체 참조변수들 간의 대입에는 일정한 규칙이 있다.
	Parent parent = new Child( );
- 위의 대입 연산에서 왼쪽 항( 부모, Parent )과 오른쪽 항( 자식, Child )의 객체 유형이
  서로 다른 경우, 두 유형이 서로 상속관계에 있고 왼쪽 객체가 오른쪽 객체의
  상위 클래스인 경우에만 암묵적인 형변환이 일어난다.

- 하위 클래스에서 상위 클래스 유형으로 할당하는 것은 가능하나, 그 반대의 경우에는
  명시적 형변환을 해야 한다.
3-2. オブジェクト間で暗黙的に変換
    - 암묵적 형변환이 가능한 경우

	A a1 = new B( );	// 가능
	A a2 = new X( );	// 가능
	----------------------------
	A a3 = new C( );	// 가능
	A a4 = new Y( );	// 가능
	----------------------------
	B b1 = new C( );	// 가능
	X x1 = new Y( );	// 가능
	----------------------------
	C c = new C( );
	B b2 = c;
	----------------------------
	Y y = new Y( );
	X x2 = y;

<暗黙的に変換された階層図(親コンテナを使用して子オブジェクトを作成!>
3-3. 暗黙的変換とメソッドオーバーライド
- 암묵적 형변환은 부모를 상속받는 자식 객체의 기능을 
  부모에게 받려 받는 기능만 사용하도록 제한한다.

- 그러므로 암묵적 형변환이 발생하게 되면 오버라이드 된 기능만 사용가능하고,
  추가적으로 구현한 기능은 사용할 수 없다.

- 주의할 점은 기능의 제한이지, 기능의 변경은 아니라는 것이다.

<オブジェクト間の暗黙的な変換(サブクラスが親のコンテナとして作成された場合)とメソッドoverride>