1. 메서드 오버로딩 (Overloading)


1) 메서드의 이름은 동일하나, 매개변수(parameter)의 개수나 종류를 달리하여 메서드를 생성하는 것을 의미한다. 

- 매개변수에 따른 메서드명을 절약하기 위한 방법


2) println()이 메서드 오버로딩의 대표적인 예가 된다. 




3) 메서드의 리턴타입과는 아무런 관련이 없다. 



cf) 메서드 오버라이딩(Overriding)과 비교! 


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
32
33
34
35
36
package methodex;
 
class Score {
 
    int sum(int score1, int score2) {
        return score1 + score2;
    }
 
    // 매개변수가 다르므로 인정
    double sum(int score1, double score2) {
        return score1 + score2;
    }
 
    int sum(int score1, int score2, int score3) {
        return score1 + score2 + score3;
    }
 
    // 매개변수가 다르므로 인정
    int sum(int score1, int score2, String score3) {
        return score1 + score2 + Integer.parseInt(score3);
    }
 
    int sum(int score1, int score2, int score3, int score4) {
        return score1 + score2 + score3 + score4;
    }
 
}
 
public class MethodTest10 {
    public static void main(String[] args) {
 
        // 오버로딩의 대표적인 예
        System.out.println();
 
    }
}
cs




2. 생성자 (Constructor)


1) 생성자는 '인스턴스 변수'의 초기화에 사용되는 일종의 메서드이다. 

2) 모든 클래스에는 반드시 한 개 이상의 생성자가 존재해야 한다.

3) 기본 생성자 

- 클래스명() {}

- 기본 생성자는 매개변수 (parameter)가 없는 생성자를 의미하며 구현하지 않아도 자동으로 생성된다. 


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package constructorex;
 
class Car {
 
    String name;
    String color;
    int doorNum;
 
   // 기본 생성자
    Car() {
        System.out.println("기본 생성자: Car()");
    }
 
    // 생성자 오버로딩
    Car(String name, String color, int doorNum) {
        // this: 지역 변수명과 인스턴스 변수명이 같을 때, 인스턴스 변수명임을 알려주는 키워드
        System.out.println("생성자 오버로딩: Car(name, color, doorNum)");
        this.name = name;
        this.color = color;
        this.doorNum = doorNum;
    }
 
    void showInfo() {
        System.out.println("이름: " + name);
        System.out.println("색상: " + color);
        System.out.println("문의 개수: " + doorNum);
    }
}
 
public class ConTest01 {
    public static void main(String[] args) {
 
        // 기본 생성자 호출
        Car c1 = new Car();
 
        // 기본 생성자 + 초기화
        c1.name = "avante";
        c1.color = "black";
        c1.doorNum = 4;
        c1.showInfo();
 
        System.out.println();
        // 생성자 오버로딩으로 호출
        Car c2 = new Car("bmw""yellow"2);
        c2.showInfo();
 
    }
}
cs

# 실행 화면 




4) 생성자는 인스턴스를 생성할 때마다 'new' 를 통해 호출된다. 

5) 메서드 vs 생성자 

(1) 메서드

(static) 리턴타입 메서드명() {

return 값;

}


(2) 생성자 

클래스명() {


}


(3) 차이점

- 생성자는 

클래스 이름을 따른다.

static, 리턴타입을 붙이지 않는다. 

new를 통해서 인스턴스를 생성할 때만 호출이 가능하다. 


(4) 공통점 

- 오버로딩이 가능하다.

- 매개변수(parameter)를 가질 수 있다. 


6) 기본 생성자는 본래 자동으로 생성해주나, 매개변수가 있는 생성자를 한 개라도 만들게 되면 그 역할을 수행하지 않는다. 

- 때문에 가급적 클래스 설계 시 기본 생성자를 무조건 만들고 시작하는 것을 권장한다.



            



3. 참조변수 this


1) 자기 자신을 가리키는 참조변수이다.

syso(this) == syso(객체명) : 주소값


2) 인스턴스 변수와 지연 변수의 이름이 같을 때, 구별할 용도로 사용된다.


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
package constructorex;
 
class Person {
 
    String name;
    int age;
 
    public Person() {}
 
    Person(String name, int age) {
        this.name = name;
        this.age = age;
        
        System.out.println("this의 주소: " + this);
    }
}
 
public class ConTest02 {
    public static void main(String[] args) {
 
        Person hgd = new Person();
        
        Person hgd2 = new Person("홍길동2"14);
        System.out.println("Person객체의 주소: " + hgd2);
    }
}
cs

# 실행 결과





4. this()


1) 메서드 내에서 다른 메서드의 호출이 가능하듯이, 생성자 내에서도 다른 생성자의 호출이 가능하다.

2) this() 메서드는 생성자 내에서 반드시 첫 줄에 와야 한다. 


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package constructorex;
 
class CarTest {
 
    String name;
    String color;
    int doorNum;
 
    CarTest() {
        // name = "avante";
        // color = "black";
        // doorNum = 4;
        this("avante""black"4);
    }
 
    CarTest(String color) {
        // name = "avante";
        // this.color = color;
        // doorNum = 4;
        this("avante", color, 4);
    }
 
    CarTest(String name, String color, int doorNum) {
        this.name = name;
        this.color = color;
        this.doorNum = doorNum;
    }
 
    void showInfo() {
        System.out.println("이름: " + name);
        System.out.println("색상: " + color);
        System.out.println("문의 개수: " + doorNum);
    }
}
 
public class ConTest03 {
    public static void main(String[] args) {
 
        CarTest c1 = new CarTest();
        c1.showInfo();
 
        System.out.println();
        CarTest c2 = new CarTest("red");
        c2.showInfo();
    }
}
cs


'JAVA > JAVA1' 카테고리의 다른 글

JAVA1_day17 | 추가공부  (0) 2018.01.02
JAVA1_day17 | 클래스 Class 연습문제 (2)  (0) 2018.01.02
JAVA1_day15 | 클래스 Class 연습문제 (1)  (0) 2017.12.28
JAVA1_day15 | 클래스 Class (3)  (0) 2017.12.28
JAVA1_day14 | 추가공부  (0) 2017.12.27