자바의 생성자 - 생성자 오버로딩, this()

Yeppi's 개발 일기·2022년 5월 20일
0

JAVA

목록 보기
14/27

생성자의 초기화 및 전체적인 개념 설명은
JAVA 시리즈 11번
바로 여기에 설명해두었으니, 참고해보자!


1. Constructor Overloading

클래스 하나, 생성자 여러개

  • 하나의 클래스에 이름이 같은 생성자를 여러 개 선언

  • ❗ 생성자의 매개변수 개수와 타입을 다르게 ❗

2) 생성자 정의 하기

  • 생성자를 구현해서 사용 가능함
  • 클래스에 생성자를 따로 구현하면?
    기본 생성자 (default constructor)는 제공되지 않음
    ex. public Student() {}
  • 생성자를 호출하는 코드(client main)에서
    여러 생성자 중 필요에 따라 호출해서 사용 가능(아래 코드 처럼)
		UserInfo userLee = new UserInfo();
		userLee.userId = "a12345";
		userLee.userPassWord = "zxcvbn12345";
		userLee.userName = "Lee";
		userLee.phoneNumber = "01034556699";
		userLee.userAddress = "Seoul, Korea";
		
		System.out.println(userLee.showUserInfo());
        
		
		UserInfo userKim = new UserInfo("b12345", "09876mnbvc", "Kim");
		System.out.println(userKim.showUserInfo());


3) 생성자 작성 시 유의사항

매개변수의 이름을 잘 작성하기

  • 기존 메서드
	public Student(String stdName, int stdScore, boolean stdIsPassed, 
	String stdMajor) {
		name = stdName;
		score = stdScore;
		isPassed = stdIsPassed;
		major = stdMajor;
	}
  • 잘못된 생성자 오버로딩 메서드 3가지
    매개변수의 이름이
    1. 너무 축약되거나
    2. 너무 길거나
    3. 기존 메서드의 매개변수와 완전히 똑같을 때 ⇒ this 사용
public Student(String n, int s, boolean e, String m) { // 너무축약
	name = n;	// 이름 
	score = s;	// 점수 
	isPassed = e;	// 시험 패스여부 
	major = m;	// 전공 
}
public Student(String studentName, int studentScore, boolean studentIsPassed, String studentMajor) { 
	// 너무 김
	name = studentName;
	score = studentScore;
	isPassed = studentExamPassd;
	major = studentMajor;
}
public Student(String name, int score, boolean isPassed, String major) {
	name = name; // 완전 똑같음 -> 이럴땐 this 쓰기
	score = score;
	isPassed = isPassed;
	major = major;
}


2. this. 사용하기

  • this.변수 : 자동으로 멤버변수를 가리킴
  • this 없는 변수 : 자동으로 매개변수를 가리킴
public Student(String name, int score, boolean isPassed, String major) { // 매개변수
		this.name = name;
		this.score = score;
		this.isPassed = isPassed;
		this.major = major;
}


2. this() 생성자

1) this 란?

객체 자신을 가리키는 것

this가 하는 일

  • 인스턴스 자신의 메모리를 가리킴
  • 생성자에서 또 다른 생성자를 호출 할때 사용
  • 자신의 주소(참조값)을 반환 함

생성된 인스턴스 메모리의 주소를 가짐

  • 클래스 내에서 참조변수가 가지는 주소 값과 동일 한 주소 값을 가지는 키워드
    👉 같은 클래스에 잇는 다른 생성자 호출

생성자에서 다른 생성자를 호출 하는 this

  • 클래스에 생성자가 여러 개 인경우
    →this를 이용하여 생성자에서 다른 생성자를 호출할 수 있음

  • 생성자에서 다른 생성자를 호출하는 경우
    →인스턴스의 생성이 완전하지 않은 상태이므로
    this() statement 이전에 다른 statement를 쓸 수 없음



2) this() 생성자

  • 일반적으로 쓰일 때
    • this.멤버변수 → 해당 클래스의 멤버변수
    • 매개변수 → 현재 메서드의 매개변수
    this.멤버변수 = 매개변수;

  • 첫번째 메서드와 두번째 메서드의 매개변수 이름이 동일할 때
    • this → 첫번째 메서드의 매개변수 가리킴
    • (매개변수, 매개변수) → 현재(두번째) 메서드의 매개변수를 가리킴
    this(매개변수, 매개변수)


💡 생성자 자동생성 Alt+Shift+S 💡


JAVA 시리즈 11번 중 생성자를 정리했던 것보다
조금 더 추가할 개념들을 정리해보았다..!

profile
imaginative and free developer. 백엔드 / UX / DATA / 기획에 관심있지만 고양이는 없는 예비 개발자👋

0개의 댓글