mommoo.tistiory.com/3 ( Java의 생성자 (1) )



저번 포스팅의 2탄이다. 1탄은 위의 경로로 가서 보면 된다.


저번 포스팅의 예제를 사용해 생성자의 사용법에 대해 설명하겠다. 


public class Test{
        
	public int num;
	public String str;

	public Test(int num,String str){
		this.num = num;
		this.str = str;
	}

	public void print(){
		System.out.println("num은"+num+"입니다. , str은"+str+"입니다.");
	}

	public static void main(String str[]){
		Test test = new Test(10,"홍길동");
		new Test(9,"활빈당");
	}
}

main 함수에서 new 키워드를 통해 Test클래스를 사용했다. 생성자 함수가 2개의 매개변수를 요구 하므로


Test클래스를 생성할 때, 두가지 정보를 넣었다.(이름,나이)


main 함수안에 첫번째 줄은 test 라는 참조변수에 생성한 Test클래스의 정보를 담았고


두번째 줄은 Test클래스를 생성만 할 뿐 변수에 담지는 않았다.


결과적으로 말하자면, 둘다 new 키워드를 통해 클래스를 호출 했고 둘다 생성자( public void Test(int num,String str) )가


실행이 된다. 거꾸로 말하자면, new 키워드를 통해 클래스를 호출만 하면 생성자는 무조건 실행이 된다는 것이다.


따라서, 생성자는 프로그래머가 생각하기에, 자신이 만든 프로그램(클래스)이 메모리에 적재 될 시,


반드시 해야할 일 을 코드로 작성하는 공간이라 생각하면 되겠다.


클래스 안에는 반드시 생성자가 정의 되어야 한다. 하지만 아래와 같은 코드를 보자.



public class Test{

	public int num;
	public String str;

	public static void main(String str[]){
		Test test = new Test();
	}

위의 클래스는 생성자가 보이지 않는다.


분명히 클래스는 생성자가 존재해야 한다고 말했지만, 컴파일 오류가 발생하지 않고, 실행도 잘된다.


이유가 무엇일까? 


정답은 사용자가 생성자를 따로 적지 않았을 시, 자바 컴파일러가 우리가 만든 Test 클래스에


Test(){}; 라는 생성자를 (디폴트 생성자) 저절로 넣어준다. 


즉 결국엔 생성자가 있는것 처럼 된것이다.


그렇다면, 우리가 매개변수가 있는 생성자를 따로 적어 주었을시, 자바 컴파일러가 Test(){}라는 디폴트 생성자를 넣어줄까?


답은 아니오다. 우리가 따로 생성자를 적어주었을시, 우리가 적은 생성자를 메인 생성자로 판단하고 디폴트 생성자를 넣어주지 않는다.


아래의 코드는 오류가 발생한다.

public class Test{ public int num; public String str; public Test(int num){ this.num = num; } public static void main(String str[]){ Test test = new Test();//매개변수가 하나 필요하다... }

그렇다면, 위의 코드의 오류를 고치는 방법은 무엇이겠는가? 제일 간단한 방법은


Test클래스를 호출할때 매개변수를 하나 입력하는 것이다.


다른 방법도 있다. 혹, 오버로딩을 아는 사람이라면, 쉽게 이해 할 수 있을 것이다.


생성자를 하나더 만드는 것이다.


public class Test{ public int num; public String str; public Test(){}; public Test(int num){ this.num = num; } public static void main(String str[]){ Test test = new Test(); }


이렇게 생성자를 하나 더 만들어 주면 된다.


main에서 Test클래스를 생성할 때, 매개변수가 없는 클래스를 생성 하였으므로 매개변수가 없는 생성자를 찾아가 클래스를  생성한다.



여기까지가 준비한 내용이다. 


다른 개념을 추가적으로 덧 붙여 생성자를 설명하면 말 할 내용은 더 길어진다.(예를들어, 상속) 


때문에, 생성자의 모든 부분을 다루진 않았지만 어느정도 생성자에 관해 알게되었을 것이라고 예상한다.





'Java' 카테고리의 다른 글

JAVA Static이란?  (2) 2016.03.29
자바 enum 열거형  (0) 2016.01.27
JAVA - 익명클래스(Anonymous class)란?  (3) 2016.01.20
JAVA의 삼항연산자  (4) 2015.12.11
JAVA의 생성자 (1)  (0) 2015.11.12

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts