메소드 오버로딩

[Java] 메소드 오버로딩을 배우고 생성자와 참조변수 알아보기
Dec 20, 2023
메소드 오버로딩
메소드 오버로딩(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
RSSPowered by inblog