열혈 Java 프로그래밍

[윤성우의 열혈 Java 프로그래밍] Chapter 11 메소드 오버로딩, this, String 클래스

잉여진행중 2020. 8. 4. 19:28

개인적으로 헷갈리는 것 중요한 것 위주로 정리해두고 연습문제를 풀어본 글입니다.

 

- 메소드 오버로딩

메소드의 이름이 같으면?

이름이 같아도 매개변수 선언이 다르면 오버로딩, 구분할 수 있다.

class MyHone {
    void mySimpleRoom(int n) { }
    void mySimpleRoom(int n1, int n2) { }
    void mySimpleRoom(double m1, double m2) { }
}

//이름이 같아도 매개변수로 메소드 구분됨, 메소드 오버로딩

매개변수 선언이 다른 경우는 매개변수의 수가 다르거나, 형이 달라야 한다. (반환형말고 자료형)

 

- 생성자 오버로딩

메소드와 같이 매개변수의 선언이 다른 경우 오버로딩이 가능하다.

class Person {
    private int regiNum;
    private int passNum;
    
    Person(int rnum, int pnum) { //생성자1
        regiNum = renum;
        passNum = pnum;
    }
    Person(int rnum) { //생성자2
        regiNum = rnum;
        passNum = 0;
    }
    void showPersonalInfo() {
        System.out.println("주민번호 : " + regiNum);
        
        if(passNum != 0) 
            System.out.println("여권번호 : " + passNum + '\n');
        else
            System.out.println("여권번호가 등록되어 있지 않습니다.");
    }
}

class ConOverloading {
    public static void main(String[] args) {
        Person kim = new Person(112233, 445566); //생성자1 인스턴스생성
        Person lee = new Person(123456); //생성자2 인스턴스생성
        
        kim.showPersonalInfo();
        lee.showPersonalInfo();
    }
}
        

- this

오버로딩 된 다른 생성자를 의미함

 

class SimpleBox {

    private int data; //인스턴스변수

    SimpleBox(int data) { //매개변수 선언

        this.data = data

    }

}

* this를 사용해서 인스턴스에 접근할 수 있다.

 

- String 클래스

class StringInst {
    public static void showString(String str) {
        System.out.println(str);
        System.out.println(str.length());
    }
    
    public static void main(String[] args) {
        String str1 = new String("Simple String"); //인스턴스 생성1
        String str2 = "The Best String"; //인스턴스 생성2
        
        System.out.println(str1);
        System.out.println(str1.length()); //length 반환값 전달
        System.out.println(); //단순 개행
        
        System.out.println(str2);
        System.out.println(str2.length());
        System.out.println();
        
        showString("Funny String");
        /*인스턴스 생성, 메소드 호출
        System.out.println(str);
        System.out.println(str.length());
        */
    }
}
class ImmutableString {
    public static void main(String[] args) {
        //1번 경우
        String str1 = "Simple String";
        String str2 = "Simple String";
        
        //2번 경우
        String str3 = new String("Simple String");
        String str4 = new String("Simple String");
        
        //1번 경우
        if(str1 == str2)
            System.out.println("str1과 str2는 동일 인스턴스 참조");
        else
            System.out.println("str1과 str2는 다른 인스턴스 참조");
            
        //2번 경우
        if(str3 == str4)
            System.out.println("str3과 str4는 동일 인스턴스 참조");
        else
            System.out.println("str3과 str4는 다른 인스턴스 참조");
    }
}

/*
출력결과

str1과 str2는 동일 인스턴스 참조
str3과 str4는 다른 인스턴스 참조
*/

1번 경우, 2번 경우를 통해서 string 인스턴스는 변경할 수 없는 인스턴스임을 알 수 있다.

1번 경우는 문자열 내용이 같아 하나의 인스턴스를 생성해서 공유한 것 이고,

2번 경우는 new를 사용해서 인스턴스를 생성한 것이므로 두 개의 인스턴스가 생성된 것이다.

 

* String 인스턴스로 switch문을 구성할 수 있다.

  switch(str) {

      case "one" : 

 

  }