NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    Java 17-3. 클래스의 생성자 오버로딩. (Overloading constructor using the "this…

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 정말 오랜만에 글을 적네요-_-; 봄이 오니 집에서 글만 적고 있기는 아까워서 밖으로 놀러 가려니 또 공기는 안좋네요. 요즘 자꾸 한량처럼 놀고 먹고 싶어지는게 점점 나이를 먹어가나 봅니다^^;

    sa0P09T.jpg

     

     

    오늘은 클래스에 대해 알아볼건데요. 뭐 크게 어려운 내용은 없으니 가볍게 읽어보시면 좋을거 같아요. 이전 글에서 알아본 메소드 오버로딩처럼 생성자도 오버로딩이 가능합니다. 다만, 생성자는 특별한 형태의 메소드라서 오버로딩하는 방법이 다를뿐이죠. 내부 메커니즘은 동일합니다. 아래 예제를 보면서 확인해 보도록 하겠습니다.

    ClassConstructorOverloading.java

    public class ClassConstructorOverloading {
     String first, second, third;
     
     public ClassConstructorOverloading() {
      this.first = "First";
      System.out.println("MyClass()");
     }
     
     public ClassConstructorOverloading(String second) {
      this();
      this.second = "Second";
      System.out.printf("MyClass(%s)%n", first);
     }
     
     public ClassConstructorOverloading(String second, String third) {
      this(second);
      this.third = "Third";
      System.out.printf("MyClass(%s, %s)%n", second, third);
     }
     
     public void PrintFields() {
      System.out.printf("First: %s, Second: %s, Third: %s", first, second, third);
     }
    }

     

     

    위의 코드에서 라인 10, 17에서 사용된 this를 봐야 합니다. C#의 경우 생성자에서 다른 생성자를 호출할 수 없도록 되어 있습니다. 이는 컴파일러의 차이에서 오는 문제입니다. 아무튼, Java는 생성자 안에서 this를 통해 다른 생성자를 호출할 수 있으며 비즈니스 로직에 따라 시점도 변경이 가능합니다. 11라인의 this를 14라인 다음으로 옴겨도 문제가 되지 않죠.

    wkrqqhf.jpg

     

     

    이 프로그램을 테스트하기 위해 클래스를 하나 더 추가하고, 아래와 같이 코드를 추가하세요.

    MyProgram.java

    public class MyProgram {
     public static void main(String[] args) {
      ClassConstructorOverloading a = new ClassConstructorOverloading();
      a.PrintFields();
      System.out.println();
      ClassConstructorOverloading b = new ClassConstructorOverloading("First");
      b.PrintFields();
      System.out.println();
      ClassConstructorOverloading c = new ClassConstructorOverloading("Second", "Third");
      c.PrintFields();
     }
    }

     

     

    생성자를 오버로딩하기 위해서 메소드와 같이 파라메터가 다른 생성자를 추가하고 this를 이용해서 원하는 생성자를 호출해주면 됩니다. 아래 결과를 보면 제어의 순서를 확인할 수 있습니다. 아직 자바의 상속에 대해 알아보지 않았기 때문에 별도로 언급하지는 않았지만, 부모 클래스의 생성자도 호출할 수 있습니다. 이럴때는 super 키워드를 사용하게 됩니다. (C#은 base 키워드를 사용하여 부모 클래스를 호출합니다.)

     

    다음에는 좀 무거운 주제중에 하나인 확장 메소드에 대해서 알아보겠습니다.

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.