생성자
- 객체를 생성하자마자 초기값을 할당하는 등의 즉시 필요한 기능을 더 편리하게 수행할 수 있도록 제공하는 기능
public class MemberConstruct {
String name;
int age;
int grade;
MemberConstruct(String name, int age, int grade) {
System.out.println("생성자 호출 name = " + name + ", age = " + age + ", grade = " + grade);
this.name = name;
this.age = age;
this.grade = grade;
}
}
- 생성자는 메소드와 비슷한 형태를 가지고 있다.
- 생성자 명은 클래스 명과 동일해야하며 첫 글자도 대문자로 시작한다.
- 생성자에는 리턴 타입이 없으며 비워둬야 한다.
- 나머지는 메소드와 동일하다.
- 메소드 오버로딩과 같이 여러 생성자를 정의할 수 있다.
new 생성자이름(생성자에 맞는 인수 목록)
new 클래스이름(생성자에 맞는 인수 목록)
- 생성자는 반드시 호출되어야 한다!
- 생성자 호출은 객체를 생성하고 나서 즉시호출된다.
- 호출 방법: new 명령어 다음에 생성자(= 클래스) 이름과 매개 변수에 맞춰서 인수를 전달하면 된다.
- 객체 생성 시 new 키워드와 ()를 포함하는 이유
- 객체를 생성함과 동시에 생성자를 호출한다는 의미
- 생성자의 장점
- 중복 호출 제거 - 객체를 생성함과 동시에 생성 직후에 필요한 작업을 한 번에 처리할 수 있다.
- 제약 - 직접 정의한 생성자를 반드시 호출해야하기에 필요한 작업이 누락되지 않을 수 있다.
- 생성자를 사용함으로 필수 값 입력을 보장할 수 있다.
- 기본 생성자
- 매개 변수가 없는 생성자를 의미한다.
- 클래스에 정의된 생성자가 하나도 없으면 컴파일러는 기본 생성자를 자동으로 만들어준다.
- 생성자가 한 개라도 존재하면 기본 생성자를 만들지 않는다.
- 기본 생성자를 별도로 정의해줄 수 있다.
- 생성자 오버로딩
- 메소드 오버로딩과 같이 매개 변수만 다르게 지정해서 여러 생성자를 정의해서 사용할 수 있다.
- 정의한 생성자가 많더라도 그 중 하나만 호출해서 사용하면 된다.
- this()
- this() 사용 시 생성자 내부에서 자신의 생성자를 호출할 수 있다.
- this()는 생성자 코드의 첫 줄에만 작성할 수 있다.
public class MemberConstruct {
String name;
int age;
int grade;
MemberConstruct(String name, int age) {
this(name, age, 50);
}
MemberConstruct(String name, int age, int grade) {
this.name = name;
this.age = age;
this.grade = grade;
}
}
- 예시에서 첫 번째 생성자에서 this()를 사용해 두 번째 생성자를 호출했다.
- this()를 잘 활용하면 생성자 중복을 제거할 수 있다.
- 멤버 변수와 메소드의 매개 변수명이 같은 경우 어떻게 할까?
- 멤버 변수보다 매개 변수 코드 블록이 더 안쪽에 있기 때문에 매개 변수가 우선순위를 가진다.
- ex) 멤버 변수 name과 매개 변수 name이 있다면
메소드 안에서 name을 사용 시 매개 변수에 접근하게 된다. - 이 경우 멤버 변수에 접근하기 위해서 this 키워드를 사용한다.
- ex) 멤버 변수 name과 매개 변수 name이 있다면
- 멤버 변수보다 매개 변수 코드 블록이 더 안쪽에 있기 때문에 매개 변수가 우선순위를 가진다.
class Member {
String name; //멤버 변수
void initMember(String name){
//this는 멤버 변수, 뒤 name은 매개 변수
this.name = name;
}
}
- this 키워드
- 멤버 변수를 명시적으로 표현하기 위한 키워드
- 메소드의 매개 변수와 멤버 변수명이 같을 경우 멤버 변수를 명확하게 구분하기 위해서 사용한다.
- 멤버 변수에 접근 시 this.으로 접근하며 this는 객체 자신의 참조 값을 가리킨다.
- this는 생략할 수 있다. (멤버 변수와 매개 변수의 이름이 같지 않을 때)
- 변수를 찾을 때 가까운 지역 변수(매개 변수도 지역변수다.)를 먼저 찾는다.
지역변수가 없다면 멤버 변수를 찾으며 멤버 변수도 없다면 오류가 발생한다.
- 변수를 찾을 때 가까운 지역 변수(매개 변수도 지역변수다.)를 먼저 찾는다.
출처 : [인프런 김영한 실전 자바 - 기본편]
김영한의 실전 자바 - 기본편 강의 | 김영한 - 인프런
김영한 | 실무에 필요한 자바 객체 지향의 핵심 개념을 예제 코드를 통해 쉽게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문
www.inflearn.com
'Java > [인프런 김영한 실전 자바 - 기본편]' 카테고리의 다른 글
[인프런 김영한 실전 자바 - 기본편] 접근 제어자 (0) | 2024.07.16 |
---|---|
[인프런 김영한 실전 자바 - 기본편] 패키지 (0) | 2024.07.15 |
[인프런 김영한 실전 자바 - 기본편] 객체 지향 프로그래밍 (0) | 2024.07.15 |
[인프런 김영한 실전 자바 - 기본편] 기본형과 참조형 (0) | 2024.07.15 |
[인프런 김영한 실전 자바 - 기본편] 클래스와 데이터 (0) | 2024.07.15 |