이전 포스팅에서 생성자는 하나 이상 작성할 수도 있다고 얘기했었다. 그렇다면 이번에는 여러 개를 사용하려면 어떻게 해야 하는지에 대해 알아보도록 하겠다. 우선 파파고에 overloading을 검색해본 결과 '과적'이라고 나온다. 어찌보면 여러 개가 쌓여 있는 모습이 그렇게 보일수도 있겠다. 그러면 잡소리는 치우고 바로 본론으로 들어가겠다. 아래의 예시를 살펴보겠다.

public class Person {
	String name;
    int age;
    int height;
    
    Person(){ // 1
    }
    
    Person(String name){ // 2
    	this.name=name;
    }
    
    Person(String name, int age){ // 3
    	this.name=name;
        this.age=age;
    }
    
    Person(String name, int age, int height){ // 4
    	this.name=name;
        this.age=age;
        this.height=height;
    }
}

 이 코드를 보면 지금까지 보던 코드와는 약간 다르다. 같은 이름의 생성자가 여러 개 있는 것을 확인할 수 있다. 이것이 생성자 오버로딩이다. 그럼 코드를 세세히 살펴보겠다. 우선 1번 생성자부터 확인을 해보겠다.

 

 1번 생성자는 생성자 안에 아무 내용도 없다. 이는 생성자를 선언하지 않고 실행했을 때 컴파일러가 자동으로 추가하는 기본 생성자와 같다. 이렇게 되면 객체 생성 시에는 아무런 값도 초기화되지 않는다.

 

 2번 생성자는 매개 변수로 name만 주어졌다. 이후 안에서는 객체 내의 name 필드를 초기화하고 있다. 그리고 다른 필드 age와 height;는 초기화하지 않고 있다.

 

 3번 생성자는 위와 같은 방식으로 name과 age만 초기화한다.

 

 4번 생성자는 클래스 내의 모든 필드를 초기화하고 있다

 

 이처럼 생성자 오버로딩은 자신이 원하는 값만 초기화하고자 할 때 사용할 수 있다. 그런데 위에서 보면 코드가 중복되는 줄이 너무 많고 좀 복잡해보인다. 이럴 때 사용하는 것이 this() 메소드이다. 이 메소드는 같은 클래스 내의 다른 생성자를 호출할 때 사용된다. 쉽게 말하면 지금 속해있는 생성자 안에서 같은 매개 변수를 갖고 있는 형식의 생성자를 호출한다는 말과 같다. 그러면 아래의 수정된 코드를 살펴보겠다.

※ 이때 주의해야 할 점은 this() 메소드는 반드시 생성자의 첫줄에서만 허용된다.

public class Person {
	String name;
    int age;
    int height;
    
    Person(){
    }
    
    Person(String name){
    	this.name=name;
    }
    
    Person(String name, int age){
    	this(name);
        this.age=age;
    }
    
    Person(String name, int age, int height){
    	this(name,age);
        this.height=height;
    }
}

 위의 코드를 보면 훨씬 간결하고 중복되는 내용도 줄어든 것을 확인할 수 있다. 그러면 이렇게 클래스를 생성하고 어떻게 객체를 생성하는지에 대해 알아보도록 하겠다.

Person me=new Person();
Person friend1=new Person("Park");
Person friend2=new Person("Kim", 20);
Person friend3=new Person("Choi", 22, 180);

 위처럼 나를 포함한 친구들을 생성해 보았다. 위처럼 생성을 하면 나는 아무런 정보도 초기화되지 않았고 내려갈수록 한개씩 초기화돼서 마지막 친구의 객체의 name은 'Choi', age는 22, height는 180으로 초기화된 것을 확인할 수 있다.

'프로그래밍 > JAVA' 카테고리의 다른 글

return문  (0) 2021.04.30
메소드 - Method  (0) 2021.04.30
this  (0) 2021.04.30
생성자  (0) 2021.04.30
클래스의 구성 요소  (0) 2021.04.29

+ Recent posts