IT/Java

자바 클래스(Class), 생성자, this, this()

노마드오브 2018. 7. 12. 01:31

생성자

객체 생성시, 멤버변수를 원하는 값으로 초기화 하기 위한 메소드

생성자가 하나도 없으면, 컴파일러가 컴파일시에 바이너리코드로 기본생성자를 만들어준다.

다른 생성자가 있으면 컴파일러가 제공하는 기본생성자는 자동생성되지 않음



○ 생성자가 호출되는 순서

객체가 생성되고, 기본값으로 초기화 된 이후에 생성자가 호출됨.

1. 객체생성 

2. 초기화

3. 생성자호출

4. 변수에 객체 주소값 대입



○ 생성자 오버로딩 규칙

생성자의 매개변수 개수가 다르면 가능

생성자의 매개변수 개수가 같을 때는 매개변수의 자료형이 다르면 가능 



○ this 

함수의 지역변수와 클래스 객체의 멤버변수 이름이 같은 경우, 혼동을 막기위해서 해당 객체의 멤버변수에 this를 사용한다



○ this()

같은 클래스 내  다른 생성자를 호출할 때 사용. 

생성자 코드내에서만 호출가능. 

반드시 생성자의 첫번째 문장이 되어야한다.




○ 예제 소스


파일명 : Animal.java


package java0710;


public class Animal {

// 멤버변수

// 문자열 name  정수형 age

String name;

int age;


// 기본생성자

// 동물이름은 "강아지" 나이는 3 으로 초기화

Animal() {

name = "강아지";

age = 3;

}


// name 받는 생성자. 나이는 1

Animal(String name) {   

// 지역변수 name과 클래스 객체의 멤버변수 name의 이름이 같으므로, 

// 객체의 멤버변수 name으로 지정하기위해 this.을 사용한다.

this.name = name;

      age = 1;

}

// age 받는 생성자. 동물이름은 "고양이"

Animal(int age) {

  // name = "고양이";

  // this.age = age;

this("고양이", age); // 같은 클래스 내  다른 생성자를 호출할 때 사용. 생성자 코드내에서만 호출가능. 반드시 생성자의 첫번째 문장이 되어야한다.

}

// name, age 받는 생성자

Animal(String name, int age) {

this.name = name;

this.age = age;

}


Animal(int age, String name) {

this.name = name;

this.age = age;

}


// 기본생성자를 자동생성 해주는 이클립스 메뉴 위치

// 상단메뉴 >> Source > Generate Constructors from Superclass


// 멤버변수를 매개변수로 하는 생성자를 자동생성하는 이클립스 메뉴 위치

// 상단메뉴 >> Source > Generate Constructors using Fields



String getName() {  // name의 값 가져오기 메소드 (확인자 메소드), getter

return name;

}


void setName(String name) {  // name에 값 넣는 메소드 (수정자 메소드), setter

this.name = name;

}


int getAge() {  // age의 값 가져오기 메소드 (확인자 메소드), getter

return age;

}


void setAge(int age) {  // age에 값 넣는 메소드 (수정자 메소드), setter

this.age = age;

}


// getter와 setter을 자동생성 해주는 이클립스 메뉴 위치

// 상단메뉴 >> source > Generate Getters and Setters


// getter and setter 생성 단축키

// alt s + r 



// 메소드 run() 출력 "3살 강아지가 뛴다"

void run() {

System.out.println(age + "살 " + name + "가 뛴다");

}

} // Animal class





파일명 : Test3.java


package java0710;


public class Test3 {


public static void main(String[] args) {

// 객체생성 -> 생성자 호출

Animal ani = new Animal();   // 1.객체생성, 2.초기화, 3.생성자호출, 4.변수에 객체 주소값 대입

ani.run();


ani.name = "고양이";

ani.age = 5;

ani.run();


ani.setName("사자");

ani.setAge(10);

System.out.println(ani.getName());

System.out.println(ani.getAge());

System.out.println("==============");


Animal rabbit = new Animal("토끼");

rabbit.run();


Animal cat = new Animal(5);

cat.run();


Animal giraff = new Animal("기린", 4);

giraff.run();

}


}