#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 에 대해서 알아보자.
잡담. 오늘도 열심히 강좌를 쓰고 있습니다.. 여기까지 오신분! 참 재미없는 강좌 봐주셔서 감사합니다. 태클 환영입니다..
'Developer > Java-oop' 카테고리의 다른 글
#008. String 객체 알아보기... (0) | 2011.03.22 |
---|---|
#007. this 알아보기... (0) | 2011.03.21 |
#005. 메소드 중복정의 (method overloding) 알아보기... (0) | 2011.03.19 |
#004. Member변수(instance변수) 와 static변수(class변수) 알아보기... (0) | 2011.03.19 |
#003. Class 와 Instance... (0) | 2011.03.18 |