JAVA/JAVA
Java | 메소드 Overloading & 생성자 Overload
pathas
2020. 1. 22. 17:32
Overloading 오버로딩
메소드의 이름은 동일하게 지정하고 매개변수의 유형과 개수를 변경하여
여러 개의 메소드를 하나의 메소드처럼 정의하는 기법→ 비슷한 유형의 메소드들이 여러 개 필요할 때
서로 다른 메소드들을 마치 하나의 메소드처럼 사용할 수 있음
- 메소드 이름 동일하게 설정
- 메소드 매개변수 유형, 개수 다르게 설정
- 필요에 따라 메소드 return형을 다르게 설정
※ return형만 다르게 작성하면 에러 발생
사용례_메소드 오버로딩
public class PrintTest {
// Method Overloading, 매개변수 O, 반환값 X
void print(char c) { // char형 매개변수
System.out.println("입력받은 문자: "+c);
}
void print(int i) { // int형 매개변수
System.out.println("입력받은 정수: "+i);
}
void print(boolean b) { // boolean형 매개변수
System.out.println("입력받은 논리값: "+b);
}
public static void main(String[] args) {
PrintTest pt = new PrintTest();
pt.print('A'); // 입력받은 문자: A
pt.print(23); // 입력받은 정수: 23
pt.print(23>33); // 입력받은 논리값: false
}
※ 메소드 이름은 print로 동일하지만 매개변수 유형에 따라서 서로 다른 메소드가 호출됨
Constructor Overload 생성자 오버로드
다양한 방법으로 멤버변수의 값을 초기화할 수 있도록 함
생성자도 하나의 메소드이기 때문에 메소드 오버로딩과 형식은 동일함
사용례_생성자 오버로드
class Person {
// 멤버 변수
private String name; // 이름
private int age; // 나이
// 기본 생성자, 생략 가능
Person(){}
// 생성자 오버로드, 가능한 조합 개수=2의 멤버변수 개수 제곱(기본생성자 포함)
Person(int a){
age = a;
}
Person(String n){
name = n;
}
// 여러 가지 조합이 가능하지만 보통 아래의 형식을 많이 사용함
Person(String n, int a){
name = n;
age = a;
}
// 정보 출력 메소드
void display() {
System.out.println("이름: " + name + ", 나이: " + age);
}
public class PersonHandling {
public static void main(String[] args) {
Person p = new Person();
// Person 클래스의 객체 p를 생성하면서 기본생성자 Person 호출
p.display(); // 이름: null, 나이: 0
Person p2 = new Person(23);
p2.display(); // 이름: null, 나이: 23
Person p3 = new Person("홍길동");
p3.display(); // 이름: 홍길동, 나이: 0
Person p4 = new Person("강감찬", 23);
p4.display(); // 이름: 강감찬, 나이: 23
}
}
※ 생성자의 이름은 모두 Person으로 동일하지만
매개변수에 따라 서로 다른 생성자가 호출되고, 멤버 변수에 저장되는 값이 달라짐
※ 멤버 변수의 값을 따로 설정하지 않으면 문자 자료형은 null,
정수, 실수 자료형은 0,
논리형은 false로 기본값이 초기화됨
사용례_메소드 오버로딩 + 생성자 오버로드
Method간 호출
- main() → 일반 메소드[객체 생성, 객체명.메소드명(~)]
- 서로 다른 클래스 : 일반 메소드 → 일반 메소드[객체생성, 객체명.메소드명(~)]
- 동일한 클래스 : 생성자, 일반 메소드 → 일반 메소드[메소드명(~)]
※ 동일한 클래스 내의 메소드는 메소드 이름만으로 호출 가능
public class PrintTest {
/* Constructor Overload + Method Overloading
생성자 내부에서 클래스 내의 다른 메소드 호출 */
PrintTest(){};
PrintTest(char x){
print(x);
};
PrintTest(int y){
print(y);
};
PrintTest(boolean z){
print(z);
};
// Method Overloading, 매개변수 O, 반환값 X
void print(char c) {
System.out.println("입력받은 문자: " + c);
}
void print(int i) {
System.out.println("입력받은 정수: " + i);
}
void print(boolean b) {
System.out.println("입력받은 논리값: " + b);
}
public static void main(String[] args) {
PrintTest pt1 = new PrintTest('v'); // 입력받은 문자: v
PrintTest pt2 = new PrintTest(23); // 입력받은 정수: 23
PrintTest pt3 = new PrintTest(23 > 11); // 입력받은 논리값: true
}
}
여러 개의 메소드나 생성자를 마치 하나처럼 사용할 수 있게 하는 기법인
오버로딩과 생성자 오버로드에 대해 알아보았습니다.
오버로딩 / 오버로드를 사용하면
비슷한 유형의 메소드들을 하나의 이름으로 묶어서 편리하게 사용할 수 있고,
생성자 역시 매개변수에 따라 자동으로 매개변수에 맞는 생성자가 호출되도록 할 수 있습니다.