-
Java | 메소드 Overloading & 생성자 OverloadJAVA/JAVA 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 } }
여러 개의 메소드나 생성자를 마치 하나처럼 사용할 수 있게 하는 기법인
오버로딩과 생성자 오버로드에 대해 알아보았습니다.오버로딩 / 오버로드를 사용하면
비슷한 유형의 메소드들을 하나의 이름으로 묶어서 편리하게 사용할 수 있고,
생성자 역시 매개변수에 따라 자동으로 매개변수에 맞는 생성자가 호출되도록 할 수 있습니다.
'JAVA > JAVA' 카테고리의 다른 글
Java | Java 메모리 구조 (0) 2020.01.28 Java | This (0) 2020.01.22 Java | Constructor 생성자 (0) 2020.01.22 Java | Encapsulation 캡슐화 & 접근 제어자 & set(), get() (0) 2020.01.21 Java | str.equals() & str.contentEquals() 비교 (0) 2020.01.21