생성자 (Constructor)
- 객체가 생성되는 순간에 자동으로 호출되는 메소드
- 객체가 생성될 때 초기화를 위해 사용
- 생성자가 없다면
- 객체를 초기화는 메소드를 만들고
- 초기화를 위해 이 메소드를 반드시 호출해줘야 함
생성자 특징
- 클래스 이름과 동일
- 반환값 / 반환형 없음
- new 연산자를 통해 객체를 생성할 때만 단 한 번 자동으로 호출
- 아무 때나 호출해서 사용할 수 없음
- 오버로딩 가능 - 여러 개의 생성자(매개변수 다르게)
- 매개변수 개수와 데이터 타입 다르게 생성자 여러개 사용 가능
- 생성자 오버로딩
- 하나의 클래스에 생성자를 여러 개 기술하면
- 객체 생성 시 매개변수의 개수, 데이터 타입, 순서가 일치하는 생성자를 알아서 호출
생성자의 용도
- 멤버 필드 초기화
- 객체가 처음 생성되는 순간에 처리할 작업 수행
public Test(float rate, String name) {
this.rate = rate;
this.name = name;
}
생성자 유형
디폴트 생성자 (default constructor)
- 매개변수 없고 실행 내용도 없이 자동 생성되는 생성자
public Test() { }
- 생성자가 없는 클래스는 없으며
- 클래스에 생성자가 하나라도 정의되어 있지 않으면 컴파일러가 기본 생성자를 자동으로 생성
- 생성자가 하나라도 존재하면 기본 생성자는 자동으로 삽입되지 않음
매개변수가 있는 생성자
- 객체 생성 시 값을 자동으로 전달하는 생성자
- 주의! - 객체 생성 시 반드시 값을 전달해야 함
- 정의된 매개변수 개수, 데이터 타입, 순서대로 타입에 맞게 전달
public Test(float rate, String name) {
this.rate = rate;
this.name = name;
}
public static void main(String[] args){
Test t = new Test(0.5, “홍길동”);
}
참고 : 매개변수 있는 생성자 자동 삽입
- 메뉴 Source / Generate Constructor using Fields…
- 초기화에 사용할 필드 선택 가능
this 레퍼런스
- 클래스 내에서 객체 자신을 가리키는 레퍼런스
- 컴파일러에 의해 자동 생성 (사용자가 별도로 선언하지 않음)
용도
- 전달 받은 매개변수 값으로 멤버 필드의 값 설정 시
- 매개변수 이름과 멤버 필드명을 구별하기 위해서 사용 (this.멤버필드)
- 객체 자신의 레퍼런스 반환하는 경우
this()
메소드
- 한 생성자 안에서 다른 생성자를 호출할 때 사용
- 생성자 안에서만 사용 가능
- 호출되는 생성자는 this() 메소드 안에 기술된 인수의 개수, 자료형에 의해 결정
- 주의!!! -
this()
메소드는 생성자 내에서 첫 번째 줄에 기술해야 함
Getter와 Setter : 메소드
Setter
- 멤버 필드의 값을 설정할 때 사용하는 메소드
setXxx() : set필드명()
public void setName(String name) {
this.name = name; // name의 필드 값 설정
}
Getter
- 멤버 필드의 값을 가져와서 사용할 때 사용하는 메소드
getXxx() : get필드명()
public String getName(){
return name; // name 필드의 값 반환
}
- 클래스 멤버 데이터 보호 방법
- 클래스의 멤버 필드를 private으로 선언해 클래스 외부에서는 직접 접근 불가
- 멤버 메소드를 통해서만 접근하도록 함
toString()
메소드
- 객체가 텍스트 값으로 표시되거나 문자열이 예상되는 방식으로 참조될 때 자동으로 호출되는 메소드
- 객체가 가지고 있는 정보나 값들을 문자열 형태로 반환
- 객체 출력 시 toString() 자동 호출
System.out.println(객체);
어노테이션 (Annotation)
- 프로그램에게 추가적인 정보를 제공해주는 메타데이터(metadata)
- 어노테이션 용도
- 컴파일러에게 코드 작성 문법 에러 체크하도록 정보 제공
- 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동 생성하게 정보 제공
- 실행 시 특정 기능을 실행하도록 정보 제공
컴파일러에게 코드 작성 문법 에러 체크하도록 정보 제공 예
@Override
어노테이션
- 메소드가 오버라이드(재정의)된 것임을 컴파일러에게 알려주어
- 컴파일러가 오버라이드를 검사하게 함
- 정확히 오버라이드 되지 않았으면 컴파일러가 에러 발생
오버라이딩
- 부모 클래스를 자식 클래스에서 상속 받을 때
- 부모 클래스의 메소드를 자식 클래스에 적합하게 재정의하는 것 (수정해서 사용하는 것)