목차
생성자
객체를 인스턴스화 할 때, 초기 상태를 지정해 주기 위해서 생성자 개념을 사용한다.
각 언어마다 생성자를 지정하는 방법이 다양한데, VisualBasic 에서는 New 키워드로, Swift는 init 키워드로, Java와 C#같은 경우에는 클래스의 이름과 동일한 메서드로 생성자를 지정한다.
우리는 계속 사용해오던 Java를 사용하여 알아보록 하자.
상속 Slime 클래스의 생성자를 만들어보자.
public class slime{
private int hp;
private int ATK;
private int DEF;
public slime(){ // 반환값이 없다!
this.hp = 500;
this.ATK = 30;
this.DEF = 10;
}
public void tackle()
/*
등등
*/
}
}
위를 보면, 생성자에는 반환값이 존재하지 않는 것을 볼 수 있다. 결국, 생성자가 초기상태를 지정하고 객체를 반환하여서 반환값이 있을 이유가 없기 때문이다.
생성자는 일반 메서드와 같이 없거나, 1개 이상의 parameter를 받을 수 있다.
public class slime{
private int hp;
private int ATK;
private int DEF;
public slime(int Hp, int ATK, int DEF){
this.hp = Hp;
this.ATK = ATK;
this.DEF = DEF;
}
public void tackle()
/*
등등
*/
}
}
또한, 저번 장에서 설명했던, 오버로딩을 이용해서 여러개의 생성자를 사용할 수 있다.
public class slime{
private int hp;
private int ATK;
private int DEF;
public slime(){
this.hp = 500;
this.ATK = 30;
this.DEF = 10;
}
public slime(int Hp, int ATK, int DEF){
this.hp = Hp;
this.ATK = ATK;
this.DEF = DEF;
}
public void tackle()
/*
등등
*/
}
}
그럼 생성자를 정의하지 않았을 때의 경우는 어떻게 될까? 이때까지 해왔던것들은 모두 잘못된 것일까?
생성자를 정의하지 않으면, 자동으로 하나의 생성자가 만들어진다.
public class slime{
private int hp;
private int ATK;
private int DEF;
public slime(){
super(); // super()는 부모클래스의 생성자를 말한다.
}
public void tackle()
/*
등등
*/
}
}
Java에서, 한 클래스가 따로 어떤 클래스로부터 상속을 받는다고 표시하지 않으면, Java의 Object 클래스를 상속받게 된다.
'OOP' 카테고리의 다른 글
추상클래스와 인터페이스 (2021.01.03) (0) | 2022.08.04 |
---|---|
오버로딩, 오버라이딩 (2020.10.23) (0) | 2022.08.04 |
상속 (2020.10.17) (0) | 2022.08.04 |
캡슐화 (2020.09.23) (0) | 2022.08.04 |
객체지향이 무엇일까? (2020.09.09) (0) | 2022.08.04 |