반응형
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Bbaktaeho

[Programming] Method Overloading & Overriding (객체지향, 메서드 중복, 메서드 재정의) 본문

프로그래밍 (Programming)/프로그래밍 상식 (Common Sense)

[Programming] Method Overloading & Overriding (객체지향, 메서드 중복, 메서드 재정의)

Bbaktaeho 2020. 9. 4. 01:58
반응형

Method


메서드란 객체의 행동을 기술하는 함수입니다. 객체의 상태를 조회하거나 수정하는 작업, 또는 특정 로직을 포함하는 함수입니다.

Signature


모든 메소드는 Signature를 가지고 있습니다.

모든 메소드는 Signature가 다르면 다른 메소드로 구분됩니다.

Signature

  • Method 이름
  • Parameter 개수
  • Parameter 타입
String getTest() {
	return "test";
}

위의 코드에서 메서드의 이름은 getTest, parmeter 개수는 0개입니다.

메서드 중복 (Overloading)


메서드의 이름이 같고 나머지 Signature가 다를 때 메소드 중복(Overloading) 됩니다.

String getTest() {
	return "test";
}

String getTest(int number) {
	String test = "test";
	for (int i=1; i<number; i++) test += "test";
	return test;
}

String getTest(double number) {
	return "test"+number;
}
Signature
메소드 이름 매개변수 개수 매개변수 타입
getTest 0 x
getTest 1 int
getTest 1 double

앞서 말한 Signature가 서로 다르기 때문에 위의 메서드들은 다른 메서드들이다.

메서드의 이름이 같다면 메소드 중복(Overloading)이라고 합니다.

 

보통 메서드 중복으로 구현한다면 같은 로직을 수행할 수 있도록 구현하는 것이 올바른 방법입니다.

 

이 개념은 상속에서도 적용됩니다.

다른 클래스로부터 메서드를 상속받을 때, 자식 클래스의 메서드와 이름만 같고 Signature가 다르면 Overloading 됩니다.

메서드 재정의 (Overriding)


다른 클래스로부터 메서드를 상속받을 때, 자식 클래스의 메서드와 완전히 같은 Signature의 메서드가 있는 경우에 메소드가 재정의(Overriding) 됩니다.

class Test1 {
    String getTest1() {
        return "test1";
    }
   String getTest2() {
        return "test2";
   }
}

class Test2 extends Test1 {
    String getTest1() {
        return "test2";
    }
    
    String getTest2(String str) {
        return "test2" + str;
    }
}

테이블이 깨져서 이미지로 대체

Test2 클래스에서 Test1을 상속받았습니다.

 

부모 클래스와 자식 클래스의 메서드 중에서 getTest1 메서드는 Signature가 같습니다. 따라서 Test2 에서 Test1의 getTest1 메서드를 재정의(Overriding) 했다고 볼 수 있습니다.

 

getTest2는 메서드 이름만 같고 Signature가 다르므로 메소드 중복(Overloading)입니다.

Overriding 같은 경우, 추상 클래스의 추상 메서드를 상속받았을 때 Overriding이 필요합니다.

반응형