오늘은 개념을 살짝 끄적여 보겠습니다..
자바의 클래스에는 객체가 가져야할 멤버가 선언되요
구성 멤버에는
필드(Field)
생성자(Constructor)
메소드(method)
우리 멤버들은 생략도 되고 여러개도 작성되요. 이 멤버들은 고유 데이터,부품,객체,상태정보를 저장합니다.
생성자란 ,
클래스의 초기화를 위해서 생기는 특별한 코드 블록으로서 생성자는 클래스가 new 표현으로 인스턴스화 되어 객체를 생성할 때 객체의 레퍼런스를 생성하기 전에 초기화를 위해 사용되는 코드 블록.
생성자의 특징으로는
클래스에는 반드시 생성자가 존재해야합니다 -- 없으면 디폴트로 적용된다 (눈에 안보인다고 없는게아닙니다^^)
단 한번 호출됩니다
인스턴스 변수 초기화가 목적이에요
클래스의 이름과 동일한 이름을 가진 메소드입니다.
return이 없어요
생성자는 오직 접근 제한 수식어인 public, private, protect 만 쓸수있음 나머지 final, native 등등은 못씁니다. 그리고 접근제어는 상속이 안되서 상속관계에서는 의미 X
this : 생성자가 여러 개일때, 다른 생성자를 호출 할 수 있는데 이때 사용하는 것이 this입니
다. 객체가 자기 자신을 참조할 때 사용함. this는 this()를 통하여 클래스 내의 다른 생성자를 호출 할 수 있습니다. 하지만 this()를 통한 호출은 오직 생성자에서만 가능합니다. 그리고 👉단 한번 맨 첫줄 this()는 파라미터가 없는 생성자 호출이고 int형 2개의 파라미터를 가진 생성자를 생성하고 싶으면 this(7,8) 이런 식 으로 적합한 파라미터 리스트로 호출하면됩니다.
super : this와 개념과 방식이 비슷합니다. 차이점은 super은 부모 클래스의 생성자를 호출하는 것 이죠.
public class Constructor {
Constructor() { // 클래스명과같은 생성자 이름
super(); // 상속호출, 첫줄에 한번만 호출
}
}
생성자의 호출 순서
생성자의 호출 순서는 클래스의 상속과 관련하여 중요한 의미를 가진다. 만약 클래스 B가 클래스 A를 상속하고 클래스 A는 Object 클래스를 상속한다면 new B() 코드로 실행되는 생성자의 호출 순서는 다음과 같다.
클래스 B의 생성자 호출
클래스 B 생성자 첫줄에서 super() 코드를 실행
클래스 A의 생성자 호출
클래스 A 생성자 첫줄에서 super() 코드를 실행
클래스 Ojbect의 생성자 호출
클래스 A 생성자의 두번째 줄 이후 부분을 실행
클래스 B 생성자의 두번째 줄 이후 부분을 실행
생성자 호출의 순서는 B->A->Object 이지만, 실제 생성자 내부 코드들은 Object->A->B의 순서로 실행된다. 그것은 생성자의 맨 첫 줄의 코드가 super() 이기 때문이다.
Object 클래스는 유일하게 생성자 첫 줄에 super() 코드가 포함되어 있지 않은 클래스이다. Object 클래스는 상속 트리에서 언제나 유일한 최상위 클래스이기 때문이다.