Language/Java

4.3 객체 지향 프로그래밍 (오버로딩, 생성자)

리져니 2021. 7. 8. 17:06

오버로딩

한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것

* 자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다.

 

오버로딩 조건

1. 메서드 이름이 같아야 한다.

2. 매개변수의 개수 또는 타입이 달라야 한다.

* 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다

 

가변인자와 오버로딩

기존에는 메서드의 매개변수 개수가 고정적이었으나, jdk1.5부터 동적으로 지정해 줄수 있게 되었다.

가변인자는 '타입... 변수명'과 같은 형식으로 선언된다.

또한 가변인자 외에 매개변수가 더 있다면, 가변인자를 매개변수 중에서 제일 마지막에 선언해야 한다.

static String concatenate(String delim, String... args{
	String result = "";
    
    for(String str : args){
    	result += str + delim;
    }
    
    return result;
}

 

 

 

생성자

인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'

인스턴스의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용됨.

- 생성자의 이름은 클래스의 이름과 같아야 한다.

- 생성자는 리턴 값이 없다.

- 생성자도 오버로딩이 가능하므로 하나의 클래스에 여러개의 생성자가 존재할 수 있다.

- 기본 생성자가 컴파일러에 의해서 추가되는 경우는 클래스에 정의된 생성자가 하나도 없을 때 뿐이다.

 

<수행 과정>

ex. Card c = new Card();

1. 연산자 new에 의해서 메모리에 Card 클래스의 인스턴스가 생성된다.

2. 생성자 Card()가 호출되어 수행된다.

3. 연산자 new의 결과로, 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장된다.

* 연산자 new가 인스턴스를 생성하는 것이지, 생성자가 인스턴스를 생성하는 것이 아니다.

 

매개변수가 있는 생성자

생성자도 메서드처럼 매개변수를 선언하여 호출 시 값을 넘겨받아서 인스턴스의 초기화 작업에 사용할 수 있다.

class Car{
	String color;
    String gearType;
    int door;
    
    // 생성자
    Car(){}
    Car(String c, String g, int d){ 
    	color = c;
        gearType = g;
        door = d;
    }  
 }

 

생성자에서 다른 생성자 호출하기 this

같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출이 가능하다

- 생성자의 이름으로 클래스 이름 대신 this를 사용한다

- 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다

class Car{
	String color;
    String gearType;
    int door;
    
    Car(){
    	this("white", "auto", 4);	// Car(String color, String gearType, int door) 호출
    }
    
    Car(String color){
    	this(color, "auto", 4);
    }
    
    Car(String color, String gearType, int door){
    	this.color = color;
        this.gearType = gearType;
        this.door = door;
    }
}

 

728x90