2018-3-1 TIL 메소드 오버라이딩

메소드 오버라이딩

  • 한 클래스에서 동일한 이름의 메소드를 정의하는것은 안된다. 그러나 매개변수의 선언이 다르면 가능하다. 이것을 메소드 오버라이딩이라고 한다.

메소드 오버라이딩의 조건

  • 메소드를 호출할때, 메소드의 이름, 메소드의 매개변수의 정보 2가지를 가지고 메소드를 찾게된다.
class MyHome {
	void mySimpleRoom(int n) {...};
    void mySimpleRoom(int n1, int n2) {...};
    void mySimpleRoom(double n1, double n2) {...};
}
  • 매개변수의 선언이 다르기때문에, 메소드의 이름이 같더라도 구분이 가능하다. 매개변수의 수 또는 타입이 달라야 한다. 하지만 반환형이 다른 경우 메소드 오버로딩이 성립이 안된다.

생성자의 오버로딩

package yoon;

class Person {
    private int regiNum; // 주민번호
    private int passNum; // passport num

    Person(int rnum, int pnum) {
        regiNum = rnum;
        passNum = pnum;
    }

    Person(int rnum) {
        regiNum = rnum;
        passNum = 0;
    }

    void showPersonalInfo() {
        System.out.println("주민등록 번호 : " + regiNum);

        if(passNum != 0) {
            System.out.println("여권 번호 : " + passNum);
        } else {
            System.out.println("여권을 가지고 있지 않습니다.");
        }
    }
}

public class ConOverloading {
    public static void main(String [] args){
        Person jung = new Person(335577, 112233);

        Person hong = new Person(775544);

        jung.showPersonalInfo();
        hong.showPersonalInfo();
    }
}
// result
주민등록 번호 : 335577
여권 번호 : 112233
주민등록 번호 : 775544
여권을 가지고 있지 않습니다.
  • 생성자의 오버로딩은 다양한 상황을 고려한 인스턴스 생성을 가능하게 한다.

키워드 this를 이용한 인스턴스 변수의 접근

package yoon;


class SimpleBox {
    private int data;

    SimpleBox(int data){
        this.data = data;
    }

    void setData(int data){
        this.data = data;
    }

    int getData() {
        return this.data;
    }
}

public class ThisInst {
    public static void main(String [] args){
        SimpleBox box = new SimpleBox(99);
        System.out.println(box.getData());

        box.setData(77);
        System.out.println(box.getData());
    }
}
//result
99
77
  • this.data에서 this가 의미하는 것은 ‘이 문장이 속한 인스턴스’이다.

String클래스

문자열 생성을 위한 두 가지 방법의 차이는?

  1. String str1 = new String(“My String”);
  2. String str2 = “Your String”;
package yoon;

public class ImmutableString {
    public static void main(String [] args){
        String str1 = "Simple String";
        String str2 = "Simple String";

        String str3 = new String("Simple String");
        String str4 = new String("Simple String");

        if(str1 == str2)
            System.out.println("str1과 str2는 동일 인스턴스 참조");
        else
            System.out.println("str1과 str2는 다른 인스턴스 참조");

        if(str3 == str4)
            System.out.println("str3과 str4는 동일 인스턴스 참조");
        else
            System.out.println("str3과 str4는 다른 인스턴스 참조");
    }
}
//result
str1과 str2는 동일 인스턴스 참조
str3과 str4는 다른 인스턴스 참조
  • 위와같은 차이를 보이는 이유는 String 인스턴스가 Immutable인스턴스이기 때문이다. Immutable은 변경할 수 없는 의미를 지닌다.
String str1 = "AtoZ";
String str2 = "AtoZ";
  • 위의 str1과 str2는 문자열 내용이 같기때문에, 하나의 인스턴스를 생성을 해서 공유를 한다.
Written on March 1, 2018