본문 바로가기

자바강좌

자바의 생성자

반응형

1. 생성자


생성자는 객체가 생성될 때 자동적으로 단 한번 호출되어 필드의 초기화하거나 객체 생성시 반드시 호출되어야 하는 메소드를 호출하는 역할을 한다. 생성자의 구조는 메소드와 비슷하지만 메소드명이 반드시 클래스와 동일해야 하고 리턴타입이 없다. 


(1) 생성자의 특징


1) return Type이 전혀 정의되지 않는다.

2) 생성자의 이름이 클래스 명과 같아야 한다.

3) 생성자 내부에서  특정 작업을 수행할 수 있고 데이터를 인자에 전달하여 전달받은 데이터를 활용할 수도 있다. 


(2) 생성자의 구성 


[접근제한] [생성자명](자료형 인자1, 자료형 인자2,…){

 

       수행문1;

       수행문2;

       …;

}


public class Hello{


   //기본 생성자는 생략 가능. 생략할 경우 컴파일러가 자동으로 생성

   public Hello(){} 


   public static void main(String[] args){

        Hello h = new Hello();

   }


(3) 생성자 오버로딩

기본 생성자 하나만을 명시할 수 있는 것이 아니라 다양한 인자를 전달 받아 가공할 수 있는 생성자를 여러개 만들어 사용할 수 있다. 메서드 오버로딩처럼 인자의 타입, 갯수, 배치 순서의 다를 경우 다른 생성자로 인식.

public class Hello{


   int age;

   String name;

   

   public Hello(){} 


   public Hello(int a){

       age = a;

   }

   

   public Hello(String n){

       name = n

   }   

   

   public static void main(String[] args){

        Hello h = new Hello();

Hello h2 = new Hello(35);

Hello h3 = new Hello("홍길동");

   }


2. this와 this()


(1) this


객체 내부에서 객체 자신을 칭하고 싶을 때나 아니면 지역변수와 멤버변수를 구별해야 할 때도 있을 것이다. 이럴 때 사용하는 객체 자신을 가리킬 수 있는 유일한 reference! 이것이 바로 this이다.


public class Hello{

    private int a;


    public int getA(){

         return a; 

    }

    

    public void setA(int a){

         this.a = a;

   }


(2) this() 


이것은 현재 객체의 생성자를 의미하는 것이다. 주의 해야 할 점은 생성자의 첫 행에 정의해야 한다는 것이며 그렇지 않으면 Compile시 오류가 발생한다. 다시 말하면 이 this()를 이용하여 한 클래스내의 특정 생성자에서 Overloading되어 있는 다른 생성자를 호출할 수 있는 것이다. 그렇게 함으로 해서 생성자에서 코딩 내용이 중복되는 부분을 막을 수 있다. 


public class Hello{

    private int a;


//아래 생성자가 호출되면 this()를 통해 int 타입의 한 개의 데이터가 인자로 

            //전달되는 생성자를 생성자 내부에서 다시 호출한다.

            public Hello(){

                this(10);

}

public Hello(int a){

    this.a = a;

}


3. static 초기화


static 예약어는 멤버메서드나 멤버변수에 정의 할 수 있으며 지역 변수나 클래스에게는 정의 할 수 없다. 멤버메서드나 멤버변수에 static이라는 예약어를 정의하면 static메서드 (클래스메서드)와 static변수(클래스변수)라고 불리게 된다. 이유는 멤버변수나 멤버메서드들은 해당 객체가 생성될 때 객체가 생성된 메모리 공간에 같이 존재 하게 되지만 static으로 선언된 메서드(멤버함수)나 변수들은 static영역(메소드영역)이라는 곳에 유일하게 만들어 지면서 모든 객체(Object)들이 사용 할 수 있도록 공유개념을 가지기 때문이다. 


static 초기화

클래스가 실행될 때 가장 먼저 호출되는 영역을 만들고자 한다면 호출 블럭에 static를 명시한다. 클래스 실행시 단 한번만 실행되어 클래스 실행시 초기화할 내용을 배치하는데 유용하다.



public class Hello{

    //main 메서드보다 먼저 실행됨

    static{

   System.out.println("static 초기화 블럭 실행");

}

public static void main(String[] args){

   System.out.println("main 메서드 실행");

}

}


반응형

'자바강좌' 카테고리의 다른 글

자바의 상속  (0) 2019.01.15
자바 메서드 오버로딩  (0) 2019.01.14
자바의 클래스와 객체  (0) 2019.01.11
자바의 배열  (0) 2019.01.11
자바의 제어문  (0) 2019.01.09