생성자 this()

Mia Lee·2021년 12월 2일
0

JAVA

목록 보기
60/98
package ex_this;

public class Ex2 {

	public static void main(String[] args) {

		/*
		 * 생성자 this()
		 * - 생성자 내에서 자신의 인스턴스 내의 다른 생성자를 명시적으로 호출
		 * - 생성자 초기화 코드가 중복될 때 중복 제거를 위해 하나의 생성자에서만
		 *    초기화 코드를 작성하고 나머지 다른 생성자는 해당 생성자 호출을 통해
		 *    데이터만 전달하여 초기화 코드의 중복을 제거하는 용도로 사용
		 * - 주의사항!
		 *   생성자 this()는 반드시 생성자 내의 첫문장에서 호출되어야 한다!
		 *   
		 * < 기본 사용 문법 >
		 * this([생성자에 전달할 데이터...]);
		 * 
		 */
		
		Person2 p = new Person2();
		System.out.println("이름 : " + p.name);
		System.out.println("나이 : " + p.age);
		
		System.out.println("======================");
		
		Person2 p2 = new Person2("이순신");
		System.out.println("이름 : " + p2.name);
		System.out.println("나이 : " + p2.age);
		
	}

}

class Person2 {
	
	String name;
	int age;
	
	// 기본 생성자 정의 - 이름 : "홍길동", 나이 : 0 초기화
	public Person2() {
//		name = "홍길동";
//		age = 0;
//		Person2("홍길동", 0);
		// 다른 생성자 Person2(String, int)를 호출하여 대신 초기화 요청
		// => 생성자는 new 이외에 직접 호출이 불가능하며 생성자 this() 필수!
		this("홍길동");
		System.out.println("Person2() 생성자 호출됨!");
//		this("홍길동", 0); // 컴파일 에러 발생!
		// => 생성자 this()는 반드시 생성자 내의 첫문자에서 호출!
		
	}
	
	// 이름 전달받는 생성자 정의 - 나이 : 0 초기화
	public Person2(String name) {
//		this.name = name;
//		age = 0;
		this(name, 0); // 로컬변수 name에 저장된 데이터는 그대로 전달
		System.out.println("Person2(String) 생성자 호출됨!");
		
	}
	
	// 이름, 나이 전달받는 생성자 정의
	public Person2(String name, int age) {
		this.name = name;
		this.age = age;
		System.out.println("Person2(String, int) 생성자 호출됨!");
		
	}
	
	
}








연습


package ex_this;

public class Test2 {

	public static void main(String[] args) {

		Car c = new Car();
		c.print();
		
//		c.company = "현대자동차";
//		c.model = "소나타";
//		c.print();
		
		System.out.println("============================");
		
		Car c2 = new Car("기아자동차");
		c2.print();
		
		System.out.println("============================");
		
		Car c3 = new Car("기아자동차", "스포티지");
		c3.print();
		
	}

}

/*
 * Car 클래스 정의
 * - 멤버변수
 *   1) 회사(company, 문자열)
 *   2) 모델(model, 문자열)
 *   3) 색상(color, 문자열)
 *   4) 최대속도(maxSpeed, 정수)
 * - 기본생성자 정의 및 다음 데이터로 초기화
 *   회사 : "현대자동차"
 *   모델 : "소나타"
 *   색상 : "검정"
 *   최대속도 : 200
 * - 회사(company)를 전달받는 생성자 정의 및 다음 데이터로 초기화
 *   회사 : 전달받은 회사
 *   모델 : "소나타"
 *   색상 : "검정"
 *   최대속도 : 200
 * - 회사(company), 모델(model)을 전달받는 생성자 정의 및 다음 데이터로 초기화
 *   회사 : 전달받은 회사
 *   모델 : 전달받은 모델
 *   색상 : "검정"
 *   최대속도 : 200
 * - 회사(company), 모델(model), 색상(color)을 전달받는 생성자 정의 및 다음 데이터로 초기화
 *   회사 : 전달받은 회사
 *   모델 : 전달받은 모델
 *   색상 : 전달받은 색상
 *   최대속도 : 200
 * - 회사(company), 모델(model), 색상(color), 최대속도(maxSpeed)을 
 *   전달받는 생성자 정의 및 다음 데이터로 초기화
 *   회사 : 전달받은 회사
 *   모델 : 전달받은 모델
 *   색상 : 전달받은 색상
 *   최대속도 : 전달받은 최대속도
 * 
 * - 멤버변수 정보 출력하는 print 메서드 정의
 */
class Car2 {
	
	String company;
	String model;
	String color;
	int maxSpeed;
	
	public Car2() {
		// 로컬변수가 없으므로 모든 변수에 this 생략 가능
//		company = "현대자동차";
//		model = "소나타";
//		color = "검정";
//		maxSpeed = 200;
		this("현대자동차", "소나타", "검정", 200);
	}
	
	public Car2(String company) {
		// company 로컬변수는 이름이 중복되므로
		// 멤버변수 company에 레퍼런스 this 생략 불가!
//		this.company = company;
//		this.model = "소나타"; // this 생략 가능
//		color = "검정";
//		maxSpeed = 200;
		this(company, "소나타", "검정", 200);
	}
	public Car2(String company, String model) {
//		this.company = company;
//		this.model = model;
//		color = "검정";
//		maxSpeed = 200;
		this(company, model, "검정", 200);
	}
	public Car2(String company, String model, String color) {
//		this.company = company;
//		this.model = model;
//		this.color = color;
//		maxSpeed = 200;
		this(company, model, color, 200);
	}
	public Car2(String company, String model, String color, int maxSpeed) {
		this.company = company;
		this.model = model;
		this.color = color;
		this.maxSpeed = maxSpeed;
	}
	
	public void print() {
		System.out.println("회사 : " + company);
		System.out.println("모델 : " + model);
		System.out.println("색상 : " + color);
		System.out.println("최대속도 : " + maxSpeed + " km/h");
		
	}
	
}























0개의 댓글