h-i-s-t-o-r-y

[Java] 생성자(Constructor) / this의 의미 본문

Java

[Java] 생성자(Constructor) / this의 의미

H' 2021. 7. 17. 22:53

> p.291 생성자(Constructor) **암기

객체 생성 + 초기화 = 생성자 (constructor) == 생성자함수
1. 생성자명은 클래스명과 같아야 한다.
2. 생성자의 기능 : 객체의 생성 + 필드 초기화
3. 선언 형식
    [접근지정자] [기타제어자] 생성자명 ([매개변수..]) { }
    접근지정자는 4가지 모두 사용
3-1. 리턴자료형 붙이지 않는다. 리턴자료형 없는 함수의 일종
4. 생성자 호출 시기
    [객체 생성할 때 (new 클래스명()) ] 자동으로 호출된다.
5. 오버로딩이 가능하다.
6. 매개변수(인자)가 없는 생성자를 디폴트 생성자라고 한다.
7. 상속되지 않는다.
    생성자 만들때도 자동완성으로 alt + shift + s


package days16;

public class Ex09 {

	public static void main(String[] args) {
		
		// > MyPoint Default Constructor..
		new MyPoint();
		
		// > MyPoint 2 Constructor..
		// > x=1, y=2
		MyPoint p1 = new MyPoint(1,2);
		p1.dispPoint();
		
		// The constructor MyPoint(int) is undefined
		// > MyPoint 1 Constructor..
		// > x=100, y=100
		MyPoint p2 = new MyPoint(100);
		p2.dispPoint();
		
		
		
		/*
		MyPoint p1 = new MyPoint();
		p1.x = 1;
		p1.y = 2;

		MyPoint p2 = new MyPoint();
		p2.x = 3;
		p2.y = 4;

		MyPoint p3 = new MyPoint();
		p3.x = 5;
		p3.y = 6;
		
		p1.dispPoint();
		p2.dispPoint();
		p3.dispPoint();
		 */
		
	}

}
package days16;

import java.util.ArrayList;

public class Ex12 {
	
	public static void main(String[] args) {
		// [this 키워드]
		/*
		 * 1. 정의 ? 객체의 주소값을 갖는 참조변수
		 * 		(클래스 자기 자신의 주소값을 갖는 참조변수)
		 * 2. 참조변수 ?
		 * 		int [] m;	//배열명도 참조변수
		 * 		Car myCar;	//객체명도 참조변수
		 * 		둘다 참조변수지만 m말고 myCar랑 같다는 것..
		 * 3. this가 사용되는 3가지 용도
		 * 	ㄱ. 클래스(객체)의 멤버(필드,메서드)를 가리킬 때의 this (명확하게 하기 위해)
		 * 		this.필드
		 * 		this.메서드()
		 * 	ㄴ. 생성자에서 또 다른 생성자를 호출할 때의 this
		 * 	ㄷ. 홀로 사용될 때의 this : 인자(argument), 리턴값
		 * 
		 */
		
		
		
		Person p1 = new Person("kenik", 20, "경기", "010-1234-5678");
		// > name:null, age:20
		// Person p1 = new Person("kenik", 20);
		p1.dispPerson();
		Bus bus = new Bus(p1);
		
		// 혹시 가변인자를 생성자에 사용할 수 있나 ?
		// 아니요 생성자는 필드를 초기화하는 목적. 가변인자 사용할 필요?일?이없음
		// Object...args
		
		
	}//main
	
}//class

class Bus{
	
	Person [] p = new Person[10];
	Bus(){
		
	}
	Bus(Person person){
		p[0] = person;
	}
}

class Person{
	
	//fields
	String name;
	int age;
	
	String addr;
	String tel;
	
	/*
	 * Person(Object...args){
	 * 
	 * }
	 */
	
	//constructor
	Person(){
		System.out.println("> Default Constructor");
	}
	
	Person(String name, int age){
		this();		// 위에 생성자 Person() 호출
		// The assignment to variable name has no effect
		// name = name;
		// this. -> 클래스의 멤버변수를 나타냄. 명시해야 제대로 할당됨
		this.name = name;
		this.age = age;
		System.out.println("> 20 Constructor...");
	}
	
	public Person(String name, int age, String addr, String tel) {
		this(name, age);	//위에 생성자 Person(n,a) 호출
		this.name = name;
		this.age = age;
		this.addr = addr;
		this.tel = tel;
		System.out.println("> 50 Constructor...");
	}
	
	//method
	void  dispPerson() {
		System.out.printf("> name:%s, age:%d\n", this.name, this.age);
	}
	
}
Comments