날아라김지원
Published 2023. 4. 4. 17:57
JAVA 생성자(Constructor) JAVA, Spring

- 생성자(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 출력
    }
}
        
        ....

 

 

- 참고

https://wikidocs.net/281

http://www.tcpschool.com/java/java_methodConstructor_constructor

profile

날아라김지원

@flykimjiwon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!