반응형
- 생성자(Constructor)
생성자를 사용하면 객체변수에 무조건 값을 설정해야 객체가 생성되게 만들 수 있다.
아래와같은 코드를 그 아래코드와 같이 바꾸면 된다.
class HouseDog extends Dog {
void sleep() {
System.out.println(this.name + " zzz in house");
}
void sleep(int hour) {
System.out.println(this.name + " zzz in house for " + hour + " hours");
}
}
class HouseDog extends Dog {
HouseDog(String name) {
this.setName(name);
}
void sleep() {
System.out.println(this.name + " zzz in house");
}
void sleep(int hour) {
System.out.println(this.name + " zzz in house for " + hour + " hours");
}
}
HouseDog(String name) {
this.setName(name);
}
메서드명이 클래스명과 동일하고 리턴 자료형을 지정하지않는다. 이러한 메소드를 생성자(constructor)라고한다
1)메서드와 클래스명이 동일하다.
2)리턴 자료형을 지정하지 않는다.(void도 사용하지 않음)
생성자는 new키워드를 사용하여 객체를 만들 때 호출된다.
즉 위처럼 생성자를 만들면 아래와같이 호출해야 한다.
- 디폴트(Default) 생성자
class Dog extends Animal {
void sleep() {
System.out.println(this.name + " zzz");
}
}
class Dog extends Animal {
Dog() {
}
void sleep() {
System.out.println(this.name + " zzz");
}
}
두 코드의 차이는 아래에는 생성자가 구현되어 있다는 점이다. 아무입력항목도 없고 내용도 없는 생성자를
디폴트 생성자 라고 한다. 이런 기본생성자가 없으면 자료형이 정해진 생성자가 기본으로 있는경우
빈 형태로 생성자를 생성할 수 없다. 즉 위의 new HouseDog()를 보면
new HouseDog() // 기본생성자 없으면 불가능
new HouseDog("닉네임") // 이것만가능
위와같이 기본생성자를 하나 만들어두면 new HouseDog()를 쓸 수있고 기본 생성자가 없다면
두번째 형태만 가능하다.
- 생성자 오버로딩(Overloading)
메소드 오버로딩과 동일한 개념으로 생성자 오버로딩도 존재한다. 입력항목에 따라 다른 생성자를 만들 수 있다.
.....
class HouseDog extends Dog {
HouseDog(String name) {
this.setName(name);
}
HouseDog(int type) {
if (type == 1) {
this.setName("yorkshire");
} else if (type == 2) {
this.setName("bulldog");
}
}
void sleep() {
System.out.println(this.name + " zzz in house");
}
void sleep(int hour) {
System.out.println(this.name + " zzz in house for " + hour + " hours");
}
}
....
public class Sample {
public static void main(String[] args) {
HouseDog happy = new HouseDog("happy");
HouseDog yorkshire = new HouseDog(1);
System.out.println(happy.name); // happy 출력
System.out.println(yorkshire.name); // yorkshire 출력
}
}
....
- 참고
http://www.tcpschool.com/java/java_methodConstructor_constructor
반응형
'JAVA, Spring' 카테고리의 다른 글
Spring Boot 데이터 조회하기 (웹에서) (0) | 2023.04.04 |
---|---|
Spring Boot DB테이블과 SQL, 롬복과 리팩터링 (0) | 2023.04.04 |
JAVA Call by value, 클래스 상속(Inheritance) (0) | 2023.04.04 |
JAVA 클래스(class) 와 메서드(method) (0) | 2023.04.04 |
Spring Boot CRUD만들어보기 (데이터생성 JPA, DB로저장) (0) | 2023.04.03 |