글 작성자: 취업중인 피터팬
728x90
JDK : 1.8.0_261 버전
JRE : 1.8.0_261 버전
JAVA VERSION : 8 업데이트 261
Eclipse IDE VERSION : 2020-06버전

 

목표

클래스의 생성자에 대해 이해한다.


 

 

코드

PersonConstructor.java

package ex08Class;

/*
 생성자(Constructor)
 -클래스를 객체화(인스턴스)할 때 자동으로 호출되는 메소드
 -자동으로 호출되며, 개발자가 임의로 호출할 수 없다.
 -반환값이 없다. 즉 특정 연산후 값을 반환할 수 없다.
 		따라서 void를 쓰지 않는다.
 -그외는 메소드가 가지 모든 특성을 가지고 있다(매개변수전달, 오버로딩 등)
 
 
 생성자 내에서 this 사용법
 용도1 : 동일 클래스 내에서 다른 생성자를 호출할 때 사용한다.
 	단, 생성자 내에서만 호출 가능하다.
 	사용법 :
 		this(인자1, 인자2,....)
 용도2 : 생성자내에서 맴버변수와 매개변수의 이름이 동일할때
 		구분하기 위해서 사용된다.
 		this.변수 => 맴버변수
 		변수 => 생성자의 매개변수
 		단, 이름이 서로 다르다면 this는 생략해도 된다. 주로
 		명시적인 코드작성을 위해 사용된다.
 */

public class PersonConstructor {
	
	//맴버변수
	String name;
	int age;
	String addr;

	//생성자 매소드
	
	/*
	 디폴트 생성자
	 			: 해당 클래스에 생성자를 정의하지 않은 경우에
	 			아래와 같은 매개변수, 실행부가 없는 생성자가
	 			자동으로 삽입된다. 단, 생성자를 하나라도 정의하면
	 			디폴트 생성자는 삽입되지 않는다.(주의)
	 */
	//public PersonConstructor(){}
	
	
	//생성자 1 : 기본 생성자
	public PersonConstructor() {
		name = "이름 없음";
		age = 0;
		addr = "미상";
		System.out.println("나는 기본생성자 입니다.");
	}
	
	//생성자2 : 인자 생성자
	public PersonConstructor(String name) {
		//맴버변수와 매개변수를 구분하기 위해 this를 사용한다.
		this.name = name;//좌측항은 맴버변수, 우측항은 매개변수
		age = 1;
		addr = "출처불명";
		System.out.println("나는 인자생성자[1] 입니다.");
	}
	
	public PersonConstructor(String name, int age) {
		/*
		 this()는 생성자내에서 다른 생성자를 호출할때 사용된다.
		 단, 생성자내에서만 사용가능하고, 일반 맴버메소드에서는
		 사용이 불가능하다.
		 */
		this(name, age, "미상");
		System.out.println("나는 인자생성자[2] 입니다.");
	}
	
	public PersonConstructor(String _name, int age, String addr) {
		//매개변수와 맴버변수명이 다르면 this를 쓰지 않아도 된다.
		name = _name;
		//변수명이 동일한 경우에는 this를 사용하는것을 권장한다.
		this.age = age;
		this.addr = addr;
		System.out.println("나는 인자 생성자[3] 입니다.");
	}
	
	//맴버메소드 : 맴버변수를 초기화할 목적으로 정의한 메소드
	void initialize(String name, int age, String addr) {
		//해당코드는 생성자 내에서만 사용할 수 있다.
		//this(name, age, "미상");
		
		//맴버변수를 구분하기 위한 this는 맴버메서드에서도 사용가능하다.
		this.name = name;
		this.age = age;
		this.addr = addr;
	}
	
	void showPersonInfo() {
		System.out.printf("%s 님의 정보 \n", this.name);
		System.out.printf("나이 : %d\n", age);
		System.out.printf("주소 : %s\n", addr);
	}
	
}

 

E05PersonConstructorMain.java

package ex08Class;

public class E05PersonConstructorMain {

	public static void main(String[] args) {
		
		//기본생성자를 통한 객체생성 및 초기화 메소드를 통한 맴버변수 초기화
		PersonConstructor person1 = new PersonConstructor();
		
		System.out.println("[맴버변수 초기화용 메소드 호출전]");
		person1.showPersonInfo();
		System.out.println("[맴버변수 초기화용 메소드 호출후]");
		person1.initialize("홍길동", 20, "논현동");
		person1.showPersonInfo();
		
		/*
		 생성자를 통해 객체 생성과 초기화를 동시에 처리함.
		 */
		
		System.out.println("[이름만 전달한 값으로 초기화 하기]");
		PersonConstructor person2 = new PersonConstructor("박길동");
		person2.showPersonInfo();
		
		System.out.println("[이름과 나이만 값으로 초기화하기]");
		PersonConstructor person3 = new PersonConstructor("최길동", 40);
		person3.showPersonInfo();
		
		System.out.println("[모든 매개변수를 전달한 값으로 초기화하기]");
		PersonConstructor person4 = new PersonConstructor("박길동", 50, "가산동");
		person3.showPersonInfo();
	}

}

 

앞에서 끝도 없이 강조한 생성자 입니다. 앞에서 이해했던 내용을 토대로 이 코드를 살펴봅시다.

 

 

결과 값