● 메소드 오버로딩이란 같은 이름의 메소드를 중복으로 만들 때를 의미합니다.
자바에서 한 클래스에 같은 이름의 메소드를 두 개 이상 받을 수 없지만,
매개변수의 개수 혹은 타입을 다르게 하면 같은 이름을 사용할 수 있습니다.
메소드 오버로딩은
1. 메소드의 이름이 같을 것
2. 메소드의 매개변수 개수 또는 타입이 다를 것
두 가지 조건이 만족되어야 합니다.
메소드의 매개 변수가 여러 가지일 때 매개변수 정보가 다른 메소드가 있을 때에는 컴파일이 판단을 해서 오버로딩을 합니다.
만약 int 정수 하나가 들어가는 메소드a와 int 정수, double 실수가 하나씩 들어가는 메소드b가 있을 때
3, 3.15 의 값을 매개변수로 넣는다면, 메소드 b를 출력합니다.
정수와 문자열이 있을 경우에 어떤 메소드를 오버로딩할지에 대한 것을 컴파일이 판단하는 것입니다.
아래의 예제를 확인해볼게요.
일반 메소드의 오버로딩의 예입니다.
package day14;
class Coffee{
void drinking() {
System.out.println("커피를 마신다.");
}
void drinking(int n) {
System.out.println("커피를 " + n+"잔 마신다.");
}
}
public class Overloading {
public static void main(String[] args) {
Coffee c = new Coffee();
c.drinking();
// 전달된 인수를 보고 컴파일이 판단을 해서 실행함.
// int 가 들어가지 않으므로 문자열만 존재하는 메소드를 실행함.
// 메소드 오버로딩
}
}
메소드 오버로딩은 형 변환이 가능한 것 중에서 가까운 것을 호출합니다.
생성자 또한 오버로딩이 가능합니다.
생성자의 오버로딩을 통해서 생성되는 인스턴스의 유형을 구분할 수 있습니다.
상기 예제를 수정해서 생성자 오버로딩도 작성해볼게요.
package day14;
class Coffee{
Coffee(){
System.out.println("아이스 아메리카노 한 잔!");
}
Coffee(String menu){
System.out.println(menu + " 한 잔!");
}
void drinking() {
System.out.println("커피를 마신다.");
}
void drinking(int n) {
System.out.println("커피를 "+ n + "모금 마신다.");
}
}
public class Overloading {
public static void main(String[] args) {
Coffee c = new Coffee("카페라떼");
c.drinking(3);
// 전달된 인수를 보고 컴파일이 판단을 해서 실행함.
// 메소드 오버로딩
}
}
키워드 this : 파이썬의 self 와 유사한 역할 입니다.
인스턴스 자신을 뜻하는 용어이자 클래스 명을 대신하는 역할입니다.
예를 들어서 확인해볼게요.
package day14;
class Tiger{
String name;
Tiger(){
this("호돌이"); // 인자를 전달한느 생성자를 재활용. 생성자를 대신할 때엔 클래스 명을 대신한다.
// (= Tiger)
}
Tiger(String n){
name = n; // this.name = n; // 이 객체가 가지고 있는 name. 파이썬의 self 의 역할
}
}
public class Tiger {
public static void main(String[] args) {
Tiger T = new Tiger();
}
}
● this 참조변수
매개변수의 이름과 인스턴스 변수의 이름이 같을 경우 인스턴스 변수의 이름이 같을 경우
인스턴스 변수 앞에 this 키워드를 붙여 구분합니다.
this() 메소드는 생성자 코드블럭 내부에서만 사용할 수 있고, 자기 자신을 호출할 때 사용합니다.
파이썬의 self와 같은 역할입니다.
class SimpleBox {
int data; // SimpleBox 클래스에 정수 data를 받는다.
SimpleBox(int data) { //SimpleBox 클래스에 정수를 입력하면
this.data = data; // 그 정수의 참조 변수는 자기 자신이다.
}
void setData(int data) {
this.data = data;
}
int getData() {
return this.data;
}
}
class ThisInst {
public static void main(String[] args) {
SimpleBox box = new SimpleBox(99); // SimpleBox에 99의 정수를 넣은 box 인스턴스를 생성
System.out.println(box.getData()); //정수의 참조변수는 그 자신이므로 99 출력
box.setData(77);
System.out.println(box.getData());
}
}
'자바 > 자바 입문 공부일지' 카테고리의 다른 글
자바 기초 공부 일지 17. String 클래스의 메소드, .concat(), equals, compareTo, compareToIgnoreCase, valueOf 함수 (수정중) (0) | 2022.10.27 |
---|---|
자바 기초 공부 일지 16. String 인스턴스 (0) | 2022.10.27 |
자바 기초 공부 일지 14. System.out.println, public static void main(), static 초기화 블록 (0) | 2022.10.27 |
자바 기초 공부 일지 13. 클래스 변수와 인스턴스 변수, 지역 변수, 클래스 메소드와 인스턴스 메소드 (0) | 2022.10.27 |
자바 기초 공부 일지 12. 생성자와 String 클래스 (수정중) (0) | 2022.10.27 |