[JAVA] 자바 생성자
생성자(Construct)라는 것은 멤버 필드을의 초기값을 할당해주는 역할을 합니다. 그리고 클래스의 객체를 생성할때는 무조건 Construct를 호출해야만 객체를 생성할 수 있습니다. 또 클래스 내부에 Construct 가 하나도 없으면 자동으로 default 가 있는 것으로 인식합니다.
예제를 봐가면서 자세히 알아보도록 하겠습니다.
먼저 클래스의 객체를 만드는 과정입니다.
다음과 같은 예제를 살펴보도록 하겠습니다 . 아래 그림에서 Construct 부분을
작성하지 않아도 저거와 똑같은 default가 있는것과 같습니다.
Ex04클래스의 객체 aaa를 만드는 방법은 다음과 같습니다.
■ Ex04 aaa = new Ex04();
여기서 앞쪽의 Ex04는 클래스의 이름이고, 뒤쪽의 Ex04는 위 그림에 있는 Construct입니다.
조금 설명을 덧붙이자면..
두번째의 특징의 경우 결과형 리턴값이란 어디에선가 메서드를 호출할때는 그 메서드를 실행한 후에 실행에 대한 결과값을 돌려줘야 하는데요. 그렇게 돌려주지 않아도 된다는 의미입니다. 일반 메서드에서는 결과값을 돌려받지 않기 위해서는 void만 적으면 되지만 여기에선 void마저도 적을 필요가 없습니다.
세번째의 경우 클래스 객체를 만들때 규칙이므로 반드시 따라야 합니다. Construct는 하나의 클래스에 여러개가 있을 수 있습니다.
여섯번째의 하나의 클래스 내부에 여러개가 있는 경우를 예를 들어보겠습니다. 우선 여러개가 있기 위해서는 매개 변수의 개수가 다르거나 매개변수의 자료형이 틀려야 한다는 조건이 있습니다.
다음으로 일곱번째에 있는 this(매개변수) 에 대해서 알아보도록 하겠습니다.
이것은 하나의 Construct가 또다른 Construct를 호출할 수 있는 방법을 제공하는 것인데요.
예제를 살펴보도록 하겠습니다.
위와 같은 예제에서 매개 변수를 하나만 받아 들여 d의 값을
바꾸는 Construct를 추가한다면 이렇게 될것입니다.
위의 형태를 살펴보면 너무 중복되는 부분이 많습니다.
이렇게 중복되는 부분을 줄이려면 바로 위의 Ex04()를 호출해서
d의 값만 바꿔버리면 될것입니다. 이럴때 다음과 같이 this()를 사용합니다.
이렇게 되면 Ex04(int x) 가 호출이 될때 가장먼저 this()가 실행이 되겠죠. 그러면 Ex04()가 먼저 한번 실행을 해서 각 자료의 값들을 할당을 합니다. 그리고 나서 마지막에 d자리에 x의 값을 넣게 되는 것입니다. 이때 주의할점은 this()는 가장 첫줄에 적혀야 한다는 것입니다. 그렇지 않으면 에러가 발생하게 됩니다.
그렇다면 여기서 d의 값과 c의 값을 변경하려면 어떻게해야 할까요?
다음과 같이 this()를 사용하면 됩니다.
이런 경우는 Ex04(int x, int y)를 호출하면 this(x)라는 것이 x의 값을 가지고 Ex04(int x)가 먼저 실행하게 되고 this()가 제일 위에 있는 Ex04()를 실행하게 만드는 원리 입니다.