2020-11-19
다수의 Overloading을 하다 보면 반복적인 this 코드를 사용하게 되는데, 이러한 불필요한 반복을 줄이는 방법을 알아보자. (예제는 전에 오버 로딩 글에서 사용하던 걸 사용하도록 하겠다.)
오버 로딩 글 링크 : seeminglyjs.tistory.com/167
public class Overloading {
String name;
String sex;
int age;
public Overloading() {
}
public Overloading(String name) {
this.name = name;
}
//이름 매개변수를 받는 생성자
public Overloading(String name, String sex) {
this.name = name;
this.sex = sex;
}
//이름, 성별 매개변수를 받는 생성자
public Overloading(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
//이름, 성별, 나이 매개변수를 받는 생성자
}
해당 예제를 보면 name을 초기화하는 this가 3번 sex를 초기화하는 this가 2번 사용된 것을 알 수 있다.
사실 처리방법은 상당히 간단하다. 먼저 코드를 본 후 아래에 설명을 하도록 하겠다.
public class Overloading {
String name;
String sex;
int age;
public Overloading() {
}
public Overloading(String name) {
this(name, "default", 0);
}
public Overloading(String name, String sex) {
this(name, sex, 0);
}
public Overloading(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
//이름, 성별, 나이 매개변수를 받는 생성자
}
위의 코드를 보면 전 코드보다 훨씬 깔끔해진 것을 볼 수 있다. 처음부터 초기화 this 값에 모든 매개변수 값을 주는 것이다. 첫 번째 Overloading 은 기존에 이름만 초기화시키는 반면 변경된 코드에서는 sex / age default 값을 줌으로써 해당 값도 초기화시킬 수 있게 되었다. (사실은 default 값 말고 "남" / 20 과 같은 직접적인 데이터를 입력해도 무관하다.)
위와 같은 this 문이 오류없이 뜨는 이유는 제일 마지막에 있는 Overloading 생성자의 초기화 구문을 호출해서 사용하기 때문이다. 해당 클래스를 이제 메인클래스에서 호출해서 사용해 보도록 하자.
import java.util.Arrays;
import java.util.Scanner;
public class TemplateA {
public static void main(String[] args){
Overloading ov = new Overloading("홍길동");
//새로운 객체 생성
System.out.println(ov.name);
System.out.println(ov.sex);
ov.sex = "남";
System.out.println(ov.sex);
//default 값을 주어진 값으로 변경
}
}
위이 생성자는 초기에 name 값만 입력하여, 전 클래스 첫 번째 Overloading 생성자로 만들어졌다.
구체적으로 실행을 시켜 console 창에 어떠한 결과 나오는지 살펴보도록 하자.
객체 생성시 넣어주었던 "홍길동"과 sex의 초기값으로 설정해둔 "default"가 첫 줄과 다음 줄에 출력된 것을 확인할 수 있다. 이후 ov.sex = "남"으로 변경해준 값도 오류 없이 정상적으로 출력되었다.