달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2017. 7. 2. 21:33

java 자바 생성자 this C. Java2017. 7. 2. 21:33

생성자(Constructor)

- 객체가 생성될때 자동으로 호출(new 명령어를 만났을때) 되며 객체를 초기화한다.
- 클래스명과 동일한 메소드 
- 생성자는 리턴형이 없습니다 .
- 생성자의 역할은 인스턴트변수(클래스 내부변수) 초기화를 담당 한다.
- 생성자는 중복정의 될수 있다 . (생성자 오버로드 )
- 생성자를 정의하지 않았을 때에는 컴파일러가 제공하는 생성자가 호출되어진다.(디폴트 생성자 )
 
 
디폴트 생성자 
- 자바의 모든 클래스는 최소한 한개의 생성자는 갖고 있다. 만일 사용자가 생성자를 하나도 만들지 
   않았을경우에도  컴파일러에 의해서 디폴트 생성자가 자동으로 호출된다.
- 전달인자가 없고, 메소드 몸체부분이 비어있는 형태이다. ex) public MyDate() { }
- 사용자가 생성자를 하나라도 만들게 되면 컴파일러는 디폴트 생성자를 제공하지 않는다.
   ps. 클래스 설계시 디폴트 생성자와 같은 형태의 생성자를 만들어주는것을 습관하 하는것이 좋다.
 
 
생성자 오버로딩
-  메소드 오버로딩처럼 인수형식이 다른 생성자를 더 정의할수 있다.
 

생성자   기본형식 
     접급지정자   클래스이름(인수1...)
    {
       문장1;
        ....
      }
                                    
 ex)-------------------------------------------------------------------
        class MyDate
        {
          private  int  year;
          private  int  month;
 
          public MyDate()         => 생성자, 클래스명과 동일
          {
            year    = 2006;
            month = 4;
           }
 
          public MyDate( int new_year, int  new_month)     => 생성자 오버로딩
          {
             year    = new_year;
             month = new_month;
           }
 
                                       
           public  void print()
          {
             System.out.println(year + "/" + month);
           }
      }
   --------------------------------------------------------------------------
 
            public class MyDateMain 
           {
              public  static void  main(String[] args)
              {
                  MyDate d=new MyDate();                   => 생성자 호출
                  d.print();
 
                  MyDate d1=new MyDate(2007,12);       => 생성자 호출
                  d1.print();
                }
             }
 
 
 
 
this
- 자신을 참조하는 참조변수
- class 메소드내에서만 사용가능
 
 ex) 위의 예제에서
 
       public MyDate( int new_year, int  new_month)     => 생성자 오버로딩
       {
          year    = new_year;
          month = new_month;
        }
 
        전달인자 부분이 객체 속성과 이름이 동일할 경우 
        public MyDate( int  year, int   month)     => 생성자 오버로딩
        {
           this.year    = year;
           this.month = month;
         }
 
     this를 사용하여 구분해야한다. this.year은 class MyDate의 속성인 private year부분을 가르킨다.
 
 

 
this() 생성자 
- 같은 클래스내의 다른 생성자를 호출할때 사용
 
 ex) 위의 예제와 비교해서 생성자를 보다 간략하게 정의할수 있다.
     -------------------------------------------------------------------
 
       class MyDate
       {
          private  int  year;
          private  int  month;
 
          public MyDate(){
          year   = 2008;
          month = 6;
        }
 
   publicMyDate( int new_year)    
   {
       this();      -> { 다음에 위치해야한다. / 위의 year,month를 불러온다.
       year = new_year;                                                                 
    }
 
   publicMyDate( int new_year, int new_month)    
   {
      this(new_year);     ->위의 생성자(int new_year)를 불러온다.
      month = new_month;
    }

    public  void print()
    {
        System.out.println(year + "/" + month);
     }
 
   }
 ------------------------------------------------------------------
 
      public class MyDateMain
     {
        public  static void  main(String[] args)
        {
           MyDate d=new MyDate();              => 생성자 호출
           d.print();                                   => 2008/6 출력
           MyDate d1=new MyDate(2009);       => 생성자 호출
           d1.print();                                  => 2009/6 출력
 
           MyDate d2=new MyDate(2010,9)      => 생성자 호출
           d2.print();                                  => 2010/9 출력
          }
     }


'C. Java' 카테고리의 다른 글

java 자바 객체생성  (0) 2017.07.02
java 자바 JDBC  (0) 2017.07.02
java 자바 바인딩 개념  (0) 2017.07.02
java 자바 배열  (0) 2017.07.02
java 자바 클래스속성 접근지정자  (0) 2017.07.02
:
Posted by sfeg