오버로딩
한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것
* 자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다.
오버로딩 조건
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;
}
}
'Language > Java' 카테고리의 다른 글
4.5 객체 지향 프로그래밍 (제어자) (0) | 2021.07.09 |
---|---|
4.4 객체 지향 프로그래밍 (상속, 오버라이딩) (0) | 2021.07.09 |
4.2 객체 지향 프로그래밍 (변수와 메서드) (0) | 2021.07.07 |
4.1 객체 지향 프로그래밍 (클래스와 객체) (0) | 2021.07.06 |
문자열 함수 종류 (0) | 2021.07.05 |