달나라 노트

Java - 생성자 (Constructor) 본문

Java

Java - 생성자 (Constructor)

CosmosProject 2021. 3. 14. 01:54
728x90
반응형

 

 

 

 

 

 

People.java

public class People {
	String name;
	String planet;
	
	public void setName(String name) {
		this.name = name;
	}
	
	public void setPlanet(String planet) {
		this.planet = planet;
	}
}

 

 

 

Lisa.java

public class Lisa extends People {
	public static void main(String args[]) {
		Lisa lisa = new Lisa();
		
		System.out.println(lisa.name);
		System.out.println(lisa.planet);
	}
}


-- Result
null
null

 

위처럼 2개의 파일을 만들고 Lisa.java를 실행시켜보면 null값을 얻게됩니다.

 

그 이유는 lisa 객체는 Lisa class를 이용하여 만들어지고, Lisa class는 People class를 부모 class로 하여 상속받는데 People class에서 name, planet 변수에는 아무 값이 할당되어있지 않기 때문에 null값이 출력되는 것이죠.

 

만약 name과 planet이 필수적으로 입력되어야 하는 값이라면 어떨까요?

위처럼 People class를 상속받아 객체를 생성할 때 name, planet 값은 반드시 입력되어야 하는 경우 위처럼 name, planet값을 입력받지도 않았는데 객체가 생성되어버리면 문제가 생길 수 있습니다.

 

이럴 때 우리는 생성자(Constructor)라는 것을 이용합니다.

 

 

 

위 코드를 아래처럼 바꿔봅시다.

 

public class Lisa extends People {
	public Lisa(String name, String planet) {
		this.name = name;
		this.planet = planet;
	}
	
	public static void main(String args[]) {
		Lisa lisa = new Lisa("Lisa", "Earth");
		
		System.out.println(lisa.name);
		System.out.println(lisa.planet);
	}
}


-- Result
Lisa
Earth

 

.Lisa.java 파일에 Lisa라는 method를 추가했습니다.

위처럼 아래 2개 조건을 만족하는 method는 생성자로 취급되어 해당 class를 이용하여 객체가 생성될 때(= new 키워드가 실행될 때) 위 생성자 method도 실행됩니다.

 

조건 1 = 생성자가 될 method의 이름이 class의 이름과 동일하다.

조건 2 = return 값이 없다.(Return값이 없으며 추가로 void라고 명시하지 않아야 합니다.)

 

그래서 Lisa lisa = new Lisa("Lisa", "Earth"); 이 부분을 보면 아까와는 다르게 객체 생성 시 Lisa class에 parameter를 2개 주고 있죠.

생성자를 정의했기 때문에 그렇습니다.

 

만약 생성자가 있는데 Lisa, Earth를 빼먹고 그냥 Lisa lisa = new Lisa(); 이렇게만 적는다면 에러가 발생합니다.

 

 

 

class PersonalInfo {
    String name;
    String age;

    public PersonalInfo(String name, String age) {
        this.name = name;
        this.age = age;
    }
}

public class JavaPrac {
    public static void main(String args[]) {
        PersonalInfo personalinfo = new PersonalInfo("Lisa", "28");

        System.out.println(personalinfo.name);
        System.out.println(personalinfo.age);
    }
}


-- Result
Lisa
28

.위 예시는 생성자를 이용한 또 다른 코드입니다.

 

PersonalInfo class를 이용하여 personalinfo 객체를 생성할 때 생성자가 있기 때문에 ("Lisa", "28")라고 생성자에 필요한 parameter를 입력해주었습니다.

 

 

class PersonalInfo {
    String name;
    String age;

    public void PersonalInfo(String name, String age) {
        this.name = name;
        this.age = age;
    }
}

public class JavaPrac {
    public static void main(String args[]) {
        PersonalInfo personalinfo = new PersonalInfo();

        System.out.println(personalinfo.name);
        System.out.println(personalinfo.age);
    }
}


-- Result
null
null

만약 생성자에 void라고 명시하게 되면 이는 생성자가 아니게됩니다.

따라서 위 코드처럼 name, age값을 주지 않아도 객체가 생성됩니다.

생성자를 사용할 땐 이 부분에 대해 주의합시다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

'Java' 카테고리의 다른 글

Java - Polymorphism  (0) 2021.03.14
Java - interface  (0) 2021.03.14
Java - class overloading  (0) 2021.03.14
Java - class의 상속  (0) 2021.03.14
Java - ArrayList  (0) 2021.03.13
Comments