JAVA

생성자(constructor)

김대숲 2018. 11. 5. 22:58

생성자


생성자는 자바가 생소 했던 내가 이해하기 정말 어려웠던 것 같다.


클래스가 만들어지고 그 클래스를 가지고 객체를 만든다. 이 개념을 이해하는데 왜 인지 모르겠지만 많은 시간이 필요 했던 것 같다.


그리고 생성자. 항상 new만 붙이면 객체를 언제든 만들 수 있다고 생각했었다.


하지만 지금 내 단계에서는 생성자는 단 한번만 호출이 되어야 하는 것이었다. 왜냐하면 생성자는 한번 불른다면 초기화가 되기 때문이다.




위에 사진은 내가 만드는 좌표계산기의 포인트 클래스이다.


메소드면서 return 값이 없는 메소드라니 처음 봤을 때는 정말 신기했었다.


일단 위의 사진은 잘 못 보면 틀렸다 생각 할 수 있겠지만.

보통 생성자는 ex) public Point() {

  //TODO

}

이런식으로 하겠지만 나는 팩토리 메소드를 만드는 연습중이여서 생성자를 private 접근자를 사용하였다.


위 사진과 보면 알겠지만 생성자는 클래스 이름과 동일하다.

그리고 반환 값이 없다. 메소드 같은 경우 void 혹은 int, String 더 나아가 객체가 들어갈 수도 있지만 여기에는 반환값을 적지 않아도 된다.


생성자는 인스턴스를 생성해주는 역활을 하는 특수한 메소드다. 그렇기에 반환값이 없다. 반환 값이 있다면 엉뚱한 객체가 생성되기 때문이다. 그렇기 때문에 반환값이 필요하다면 메소드를 만들어서 사용해야 할 것이다.


만약 생성자를 만들지 않는다면 java에서 알아서 default 생성자를 만들어 준다. 

무슨 말인 즉 생성자를 만들지 않아도 알아서 생성자가 만들어 진다는 말이다.


위에서 생성자는 한번 불리면 초기화 된다고 했다.

생성자를 잘 몰랐을 때 초기화가 안되는 줄 알고 얼마나 고생했는지 모른다.


사실 처음 들었을 때 이해가 잘 되지 않았었다. 초기화가 된다니 이 무슨 소리인가... 

예를 들어보자 Point클래스 x와 y가 여러개 있다고 가정하자 

ex) (10,10)-(20,20) 이라고 Input을 받는다면 "-"을 기준으로 포인트 x와 y를 두개 만들 수 있다는 것이다.

(10,10)을 먼저 꺼낸 다음 초기화 하여 (20,20)을 꺼내는 마술 같은 일이 발생할 수 있는 것이다.


요약)

1. 생성자의 이름은 클래스의 이름과 같다.

2. 값을 반환하지 않는다.

3. 생성자는 호출 하지 않는다면 default생성자가 만들어진다.

4. 생성자는 new로 객체를 호출할 때 초기화가 된다.