본문 바로가기

Developer/Java-oop

#006. 생성자(Constructor) 와 생성자오버로딩(Constructor Overloding) 알아보기...

#006. 생성자(Constructor) 와 생성자오버로딩(Constructor Overloding) 알아보기...

 

1. 생성자는 객체를 생성할 때 한번은 필수로 실행되는 것을 말한다. 보통은 겍체의 맴버변수등..을 초기화하는 용도로 사용을 한다.

oop 패키지에 Constructor Class를 만들고 아래와 같이 작성해본다.

코드

package oop;

public class Constructor {

    public String name;

    public int point;

    public Constructor(){

        System.out.println("생성자..실행..");

    }

    public void view(){

        System.out.println("이름:"+name+",점수:"+point);

    }

}

설명

특징은 메서드명이 클래스명과 같으며, 반환 데이터형이 없는 것이 특징이다.

문장3,4: 객체생성시 데이터를 보관하기 위한 멤버변수다.

문장5~7: 문장2의 class명과 동일한 Constructor() 와 같다. 앞의 public 는 차후에 설명하도록 한다.

#003. 강좌에서도 생성자가 있었다. #003 강좌를 가서 다시 확인해봐도 생성자는 보이지 않는다. JVM이 컴파일 할 때 생성자가 없으면 자동으로 기본 생성자를 만들어준다.

기본생성자란 public Constructor(){     } 와 같이 아무 기능이 없는 생성자를 말한다.

 

2. 위에서 만든 Constructor class 를 테스트 해보기 위해 oop 패키지에 ConstructorDemo Class를 만들고 아래와 같이 작성해본다.

코드

package oop;

public class ConstructorDemo {

    public static void main(String[] args) {

        Constructor constructor = new Constructor();

        constructor.name="김동혁";

        constructor.point=25000;

        constructor.view();

        Constructor constructor2;

        constructor2 = new Constructor();

        constructor2.name="이연희";

        constructor2.point=19000;

        constructor2.view();

    }

}

결과

생성자..실행!

이름:김동혁,점수:25000

생성자..실행!

이름:이연희,점수:15000

설명

문장4: 객체를 생성하는 순간 생성자..실행! 이라고 출력이 된다.

문장8: 객체를 선언할 때는 생성자가 실행되지 않는다.

문장9: new 문장을 만날 때 객체가 비로소 생성이 되며, 이때 생성자를 호출하게 된다.

테스트를 위해 문장9~12까지를 지우고 실행해보기 바란다. 결과는 생성자..실행! 이라는 문구는 한번만 나오게 될 것이다.

나머지 문장은 이전강좌에서 이미 설명이 되었으므로 패스한다.

 

3. 생성자 오버로딩은 메서드 오버로딩과 의미가 같으며, 사용법도 같다. 오버로딩은 메서드명이같고, 파라메터의 갯수 또는 타입이 다른 것을 말한다.(생성자 오버로딩엔 생성자 특성상 반환형이 없다.)

코드

package oop;

public class Constructor {

    public String name;

    public int point;

    public Constructor(){

        System.out.println("생성자..실행..");

    }

    public Constructor(String name, int point){

        System.out.println("생성자..오버로딩..!!");

        this.name = name;

        this.point = point;

    }

    public void view(){

        System.out.println("이름:"+name+",점수:"+point);

    }

}

설명

문장5: 기본 생성자이다. (최소 한번 실행해야 할 때 사용한다.)

문장8: 파라메터가 있는 생성자이다. 보통은 문장10,11 같이 멤버변수에 파라메터로 넘어온 값을 넣어주는 역할을 한다.

아래 4번에서 테스트 하겠지만, 기본 생성자와 파라메터가 있는 생성자의 출력내용이 다르게 나오는 것을 확인 할 수 있을 것이다.

 

4. 생성자에 파라메터를 전달해보자. 위에서 테스트 했던 코드를 아래와 같이 변경해봤다.

코드

package oop;

public class ConstructorDemo {

    public static void main(String[] args) {

        Constructor constructor = new Constructor();

        constructor.name="김동혁";

        constructor.point=25000;

        constructor.view();

        Constructor constructor2 = new Constructor("이연희",19000);

        constructor2.view();

    }

}

결과

생성자..실행!

이름:김동혁,점수:25000

생성자..오버로딩..!!

이름:이연희,점수:15000

설명

생성자가 언제 생성되는지는 이미 알고 있을 것이다. new객체를 만날 때 생성이 된다.

문장8: 메서드 호출하듯이 (문자열, 정수형) 을 입력해서 멤버변수에 값을 보관 한다.

그렇다고 해서 constructor2에 name 이나 point 의 값을 변경 할 수 없는 것은 아니다. 문장 5,6번처럼 다시 변경이 가능하다.

결과를 보면 기본 생성자와, 파라메터 있는 생성자가 다르게 나오는 것을 확인 할 수 있다.

 

5. 위에서 기본생성자가 없어도 JVM이 자동으로 생성 해준다고 했었다. 아래와 같은 경우는 예외가 된다.

코드

package oop;

public class Constructor {

    public String name;

    public int point;

    public Constructor(String name, int point){

        System.out.println("생성자..오버로딩..!!");

        this.name = name;

        this.point = point;

    }

    public void view(){

        System.out.println("이름:"+name+",점수:"+point);

    }

}

설명

기본 생성자가 없고, 파라메터가 있는 생성자만 있다.

 

6. 5번에서 기본 생성자를 없애봤다. 테스트 화면에는 어떤 변화가 있는지 확인 해보자.

코드

package oop;

public class ConstructorDemo {

    public static void main(String[] args) {

        Constructor constructor = new Constructor();

        constructor.name="김동혁";

        constructor.point=25000;

        constructor.view();

        Constructor constructor2 = new Constructor("이연희",19000);

        constructor2.view();

    }

}

결과

문장4에서 오류 발생...

설명

문장4: 빨간색 밑줄이 그어진 것을 확인 할 수 있다. 기본 생성자에서 오류가 나고 있다.

이유는 앞에서 파라메터 생성자만 있고, 기본 생성자가 없어서 이다. JVM에서 기본 생성자가 없으면 자동으로 생성 핸준다고 했는데.. 왜 오류가 나는 것일까...? 그건 생성자가 하나라도 있으면 기본 생성자를 JVM이 안 만들기 때문이다. 그래도 걱정할 것이 없는 것은 코딩중엔 이렇게 오류가 발생되니, 걱정할 필요는 없을 것 같다. 넣어주면 된다.

 

다음시간엔 this 에 대해서 알아보자.

 

잡담. 오늘도 열심히 강좌를 쓰고 있습니다.. 여기까지 오신분! 참 재미없는 강좌 봐주셔서 감사합니다. 태클 환영입니다..