JAVA/정리한 것

[ JAVA ] 객체지향언어의 특징 - 다형성

따갓 2022. 5. 14. 23:56

다형성

  • 런타임 타입 다형성 - 오버라이딩
  • 컴파일 타입 다형성 - 오버로딩

오버라이딩에 대한 설명은 이전 포스팅에서 다뤘다.

https://ddsiq.tistory.com/57

 

[ JAVA ] 객체지향언어의 특징 - 상속성

 객체지향언어의 3대 특징 1. 상속성 2. 캡슐화 3. 다형성 상속성 - 클래스를 상속받아 클래스를 만든다. class A { int data = 0; void print(){ System.out.println( "print" + this.data ); } } class B exte..

ddsiq.tistory.com

오버로딩

 

class Temp{
	int add( int i , int j ){ return 100; }
	int add( int i ){ return 200; }
	// void add( int i ){}  << 오류발생

	void print( double i ){ System.out.println( "^-^" );}	
	void print( float i ) {System.out.println("^^*");}
	void print( int i ) {System.out.println("^^!");}
}

public class Main{
	public static void main(String[] args){
		Temp t = new Temp();		
		int r = t.add( 10 , 20 ); 
		System.out.println( r );	// 결과 : 100
		
		int k = t.add( 10 );
		System.out.println( k );	// 결과 : 200
		
		t.print( 100 );	// 결과 : ^^!
		t.print( 100.00 ); // 결과 : ^-^
	}	
}
  • 이름은 같지만 매개변수의 형식(개수, 자료형 등)이 다른 함수하나의 클래스 안에 공존할 수 있다.
    함수명이 같은 것이 여러개 있을때는 함수의 매개변수 형식이 일치하는 선언을 찾아서 호출.
  • 리턴타입이 다르다고 해서 이름이 같다고 봐주지 않는다.
  • 함수를 찾을 때 매개변수의 자료형과 딱맞아 떨어지는게 있으면 그 함수를 호출, 딱 맞아 떨어지는게 없으면 자동형변환되어 호출할 수 있는걸 찾는다. 이 때  자동형변환되어 호출할 수 있는 함수가 여러개 일 경우 , 서열이 가장 가까운 것을 찾아서 호출한다.  (byte< short < "int" < long <"float" <double) 
  • 이렇게 하나의 클래스 안에서 매개변수의 형태가 다른 같은 이름의 함수가 공존하는 것을 Method Overloading(메서드 오버로딩) 이라고 한다. 
  • 오버로딩을 쓰는 이유 :  거의 비슷한데 조금 다른 기능의 함수들을 매번 이름을 다르게 주는 것보다 차라리 하나의 이름으로 묶어주고 매개변수 형식만 다르게 하는게 가져다 쓰는 입장에서 훨씬 편하다.같은 기능의 자료형만 다른 메서드들을 서로 다른 이름으로 기억하지 않아도 된다.