풀스택 과정 day11_Java

22.3.21.(월)

스캐너

다형성( Overload )

객체 형변환( 암묵적 형변환 )


1. Scanner


< Scanner 메서드 사용법 >


< 간단한 Scanner 예제 >


< next( )와 nextLine( )의 차이 >


< Scanner를 이용한 간단한 프로그램 >


2. 다형성 - 오버로드

2-1. 메서드 오버로드(Overload)

- 원칙적으로 하나의 클래스 안에서는 동일한 이름의 메서드가 두 개 이상 존재할 수 없지만,
  이를 가능하게 하는 예외적인 처리 기법.

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. 생성자의 Overload

- 객체 생성 방법의 다양화

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

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


< 간단한 생성자의 Overloading >


< 생성자의 Overloading과 toString 메서드 ! >

2-4. this 키워드를 사용한 생성자 Overload

- this 키워드의 용법

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

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

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

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


< 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 >

좋은 웹페이지 즐겨찾기