메소드 오버로딩(method overloading)은 이름이 같은 메소드를 여러 개 정의하는 것이다.
package ex04;
public class MyMath {
int add(int x,int y){
return x+y;
}
int add(int x, int y, int z){
return x+y+z;
}
int add(int x, int y, int z, int w){
return x+y+z+w;
}
public static void main(String[] args) {
MyMath obj = new MyMath();
System.out.println(obj.add(10,20)+" ");
System.out.println(obj.add(10,20,30)+" ");
System.out.println(obj.add(10,20,30,40)+" ");
}
}
이렇게 사용 가능
생성자
객체를 초기화 할 때, 객체가 생성된 후에 객체 멤버에 값을 대입하여도 되지만 이러한 방법은 많은 단점을 가지고 있다. 그 중 한 가지는 개발자가 깜빡 잊어버릴 수 있다는 점이다. 이 때 생성자를 이용하면 된다.
생성자는 객체가 생성될 때 객체를 초기화하는 특수한 메소드이다.
생성자의 이름은 클래스 이름과 같고, 반환값을 가지지 않는다.
package ex04;
class Pizza{
int size;
String type;
public Pizza(){
size = 12;
type = "슈퍼슈프림";
}
public Pizza(int s, String t){
size = s;
type = t;
}
}
public class PizzaTest {
public static void main(String[] args) {
Pizza obj1 = new Pizza();
System.out.println("("+obj1.type+ ", "+obj1.size+")");
Pizza obj2 = new Pizza(24, "포테이토");
System.out.println("("+obj2.type+ ", "+obj2.size+")");
}
}
Pizza 클래스 안에 생성자를 두 가지 만들었음(오버로딩)
package ex04;
class Television01 {
private int channel; // 접근할 수 없게 private
private int volume;
private boolean onOff;
Television01(int c, int v, boolean o){ // 생성자
channel = c;
volume = v;
onOff = o;
}
void print(){ //출력 메소드
System.out.println("채널은 "+channel+"이고 볼륨은 "+volume+"입니다.");
}
}
public class TelevisionTest {
public static void main(String[] args) {
Television01 myTv = new Television01(7,10,true);
myTv.print();
Television01 yourTv = new Television01(11,20,true);
yourTv.print();
}
}
생성자를 만들어 객체를 생성할때 값을 바로 넣음
개발자가 생성자를 정의하지 않은 경우에는 기본 생성자가 생김
this 참조 변수
this는 현재 객체 자신을 가리키는 참조 변수이다.
public class Person {
private String name;
public Person(String name) {
this.name = name; // 'this.name'은 클래스 변수를, 'name'은 매개변수를 가리킵니다.
}
}
여기서 this.name의 this는 클래스의 Person을 가리키고, name은 private String name을 가리킨다.
public class Person {
private String name;
public Person(String name02) {
this.name = name02; // 'this.name'은 클래스 변수를, 'name'은 매개변수를 가리킵니다.
}
}
이렇게 필드(name)와 매개변수(name02)의 이름이 다르다면 사용할 필요 없다.
즉, 이름간의 충돌이 없다면 사용하지 않아도 된다.
this( )
this에 ( )을 붙이면 전혀 다른 의미가 된다. 다른 생성자를 의미한다.
package ex04;
public class Circle01 {
int radius;
public Circle01(int radius){ // 생성자
this.radius = radius; // 참조 변수 this로 Circle01을 의미함
}
public Circle01(){
this(0); // 생성자를 의미 하므로 Circle01(0)을 의미함.
}
}
오버로딩에는 한계가 존재함.
Share article