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



이번 포스팅은 자바의 생성자(constructor)에 관해 알아보자.


생성자는 자바뿐만 아니라 객체지향언어의 중요한 구조이기 때문에, 자바에 국한짓지 말고, 크게 이해하면 좋다.


생상자의 구조를 자바언어를 통해 설명하고자 한다.


먼저, 하나의 변수를 사용한다고 가정 해보자.


 int a; 



위의 선언한 int형 변수 a는 의미가 있는가? 


답은 No이다. 이유는 초기화를 하지 않았기 때문이다.


int a=10;


위와 같이 초기화 해야 비로소 변수 a는 상수 10을 가리키는 변수가 된 것이다. 


이렇게 의미있는 데이터를 넣는것 을 자바에서는 초기화라고 명명한다.


그렇다면, 하나의 클래스(class)를 사용 한다고 가정 해보자. 


위의 예시 처럼 의미있는 클래스를 만들기 위해 서는 초기화 작업을 거쳐야 할 것이다.


그렇다면 무엇을 초기화 해야할까? 라는 질문에 봉착한다.


클래스는 크게 나누자면 멤버변수 와 메서드 이다.


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"입니다.");
    }
}

     위의 예시는 3번,4번이 멤버변수 , 6~9번,11~13번 까지가 메서드 이다. 


이러한 클래스를 초기화 하려고 한다. 예시 클래스에서 초기화 하는 메서는 Test 메서드이다.


매개변수로 num 과 str 을 받아 클래스의 멤버변수에 값을 넣는 메서드이다. 앞에 this 를 붙여주면 클래스 안의 멤버변수 str을


안붙여주면 매개변수로 받는 str을 의미한다.( 변수의 이름이 같을 경우 구분짓기 위해 this를 쓴다.)


이 메서드는 특이하게 Test 클래스의 이름과 똑같은 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의 생성자 (2)  (2) 2015.11.17

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

Buy me a coffeeBuy me a coffee

+ Recent posts