본문 바로가기

Back-End/JAVA

오버로딩과 this()

public class Member {
	private String name;
    private int age;
    Private int grade;
    
    //생성자
    Member(String name, int age){
    	this.name = name;
        this.age = age;
        this.grade = 50;
    }
    
    //오버로딩
    Member(String name, int age, int grade){
    	this.name = name;
        this.age = age;
        this.grade = grade;
    }
    
    //main
    
    Member student1 = new Student("학생1", 20);
    Member student2 = new Student("학생2", 30, 80);

 

이렇게 있다고 해보자 student1은 Member 생성자 중 매개변수 2개를 받는 곳으로 값이 들어가고 student2는 Member 생성자 중 매개 변수가 3개인 곳으로 값이 전달 될 것이다. 하지만 Member 클래스를 보면 오버로딩된 생성자들에서 중복인게 보이지 않는가???

우리는 미래 개발자이기 때문에 중복은 허용할 수 없다. 그래서 나온 대안이 this()를 사용하는 것이다.

this = 자기 자신, () = 생성자 즉, 자기 자신의 생성자를 호출하는 것이다.

그럼 코드를 리팩토링 해보자!

 

public class Member {
	private String name;
    private int age;
    Private int grade;
    
    //생성자
    Member(String name, int age){
    	this(name, age, 50)
    }
    
    //오버로딩
    Member(String name, int age, int grade){
    	this.name = name;
        this.age = age;
        this.grade = grade;
    }
    
    //main
    
    Member student1 = new Student("학생1", 20);
    Member student2 = new Student("학생2", 30, 80);

이렇게 줄일 수 있다!! 속이 시원하다.. ㅋㅋ

그럼 어떻게 작동되는 것이냐? student1에서 넘어온 인자값 2개가 일단은 매개변수 2개를 받을 수 있는 생성자한테 값이 전달된다.

그럼 this(name,age,50) 안에 값이 넘어온 것을 다시 대입해준다. 그럼 this("학생1", 20, 50)은 자기 자신 생성자 중 매개변수를 3개 받는 곳으로 전달된다. 이런 원리이다.

 

솔직히 아직 나는 자바 응애이기 때문에 프로젝트에서 사용해보진 않았지만 이렇게 정리한 이유는 

우리 선조들이 짜둔 코드를 까보면 this()가 엄청 많기 때문에 언젠가는 선배님들의 코드를 까서 해석해 볼 날이 올텐데 그때를 대비한 것이다.

 

주의! this()는 무조건 코드 첫째 줄에 써야한다!! 명심하자!

'Back-End > JAVA' 카테고리의 다른 글

자바 메모리 구조와 static  (0) 2024.11.16
캡슐화(짧음 주의)  (1) 2024.11.16
기본형 변수와 참조형 변수  (0) 2024.11.16
Java의 객체 공유(의존성 주입)  (2) 2024.11.16
ENUM  (4) 2024.11.15