자바(JAVA) 메소드 오버로딩 (Overloading)
메소드 오버로딩은 대부분의 객체지향 언어가 지원하는 문법적인 요소이다.
이로 인해서 자바에서는 동일한 이름의 메소드를 둘 이상 정의할 수 있다.
■ 매개변수의 형이 다르거나 개수가 다르거나
class AAA{ void aFunc(int n){ . . . } void aFunc(int n1, int n2){ . . . } void aFunc(int n1, double n2){ . . . } }
동일한 메소드명으로 3개가 정의되어 있을 때
다음과 같은 상황에서 각각의 메소드를 호출하게되는 것
AAA instan = new AAA(); //인스턴스 생성 instan.aFunc(10); //a.Func(int n) 호출 instan.aFunc(10,20); //a.Func(int n1, int n2) 호출 instan.aFunc(10, 3.14); //a.Func(int n, double n2) 호출
다음과 같은 상황이 있을 수 있다.
AAA instan = new AAA(); instan.aFunc(10, 'a');
이 경우 char형 문자 'a'는 자동 형변환이 된다.
그렇다면 해당 instan.aFunc(10,'a'); 는 어떤 메소드를 호출하게 될까?
이러한 상황에서 정답은 a.Func(int n1, int n2) 이다.
그 이유는 가장 가까운 위치에 놓여있는 자료형으로 변환이 이루어지기 때문이다.
■ 반환형이 다를 경우 메소드 오버로딩이 성립되지 않는다.
다음과 같은 상황에서는 반환형이 다르기 때문에 메소드 오버로딩이 불가능하다.
class BBB{ int bFunc(int n){ . . . } boolean bFunc(int n){ . . . } }
■ 생성자도 오버로딩의 대상이 된다.
생성자의 오버로딩으로 인해서 하나의 클래스를 기반으로 다양한 형태의 인스턴스생성이가능합니다.
ex>
class Person{ private int perID; private int milID; public Person(int pID,mID){ perID=pID; milID=mID; } public Person(int pID){ perID=pID; milID=0; } public void showInfo(){ System.out.println("민번 : "+perID); if(milID!=0) System.out.println("군번 : "+milID+'\n'); else System.out.println("군과 관계 없음 \n"); }} class Overloading{ public static void main(String[] args){ Person man = new Person(950123, 880102); Person woman = new Person(941125); man.showInfo(); woman.showInfo();
}
}
생성자 오버로딩으로 인해서 위와 같이 다양한 형태의 인스턴스 생성이 가능해진다.
■ 키워드 this를 이용한 다른 생성자의 호출
class Person{ private int perID; private int milID; private int birthYear; private int birthMonth; private int birthDay; public Person(int perID, int milID, int bYear, int bMonth, int bDay){ this.perID=perID; // 매개변수가 perID이므로 인스턴스 변수 perID에 접근하기 위해서는 this를 이용해야만 한다. this.milID=milID; // 위와 동일 birthYear=bYear; birthMonth=bMonth; birthDay=bDay; } public Person(int pID, int bYear, int bMonth, int bDay){ this(pID, 0, bYear, bMonth, bDay); } . . . 이하 생략 . . .
this는 인스턴스 자신을 의미하는 키워드로써, 이를 통해서 접근하는 것은 인스턴스 변수와 인스턴스 메소드이다. 만약 this를 사용할 수 없었다면
public Person(int pID, int bYear, int bMonth, int bDay){
this(pID, 0, bYear, bMonth, bDay);
}
이 부분은 다음과 같이 입력해주어야 했을 것이다.
public Person(int perID, int bYear, int bMonth, int bDay){
this.perID=perID;
this.milID= 0;
birthYear=bYear;
birthMonth=bMonth;
birthDay=bDay;
}
참고 서적: 난 정말 JAVA를 공부한 적이 없다구요!
'Dev > JAVA' 카테고리의 다른 글
[퍼옴/메모] 이클립스 자동완성 (0) | 2018.06.19 |
---|---|
데이터베이스 자료형과 맵핑되는 JAVA의 자료형 (0) | 2018.01.30 |
JAVA private 를 사용하자. 정보은닉과 캡슐화. (1) | 2018.01.20 |
JAVA super() 개념 정리하기 (0) | 2018.01.20 |
JAVA 생성자(Constructor) 개념 정리하기! (0) | 2018.01.20 |
함수, 변수, 속성, 메서드(메소드) 쉽게 구분하는 예시 (0) | 2017.10.26 |
자바스크립트 주석 처리방법 2가지 (2) | 2017.10.26 |
JAVA는 객체지향 프로그래밍 언어 (0) | 2017.06.08 |