생성자 #1

Yullc·2025년 3월 15일
post-thumbnail

처음부터 코드라니.. 당황스럽겠지만 한번 보자

public class Main {
    public static void main(String[] args) {
        사람 사람1 = new 사람();
        사람1.이름 ="김철수";
        사람1.나이 =22;
        System.out.println("===사람1 정보===")
        System.out.printf("아름 : %s\n",사람1.이름);
        System.out.printf("나이 : %s\n",사람1.나이);
        
        사람 사람2 = new 사람();
        사람2.이름 ="이영희";
        사람2.나이 =22;
        System.out.println("===사람3 정보===")
        System.out.printf("아름 : %s\n",사람2.이름);
        System.out.printf("나이 : %s\n",사람2.나이);
    }
}
class 사람{
    String 이름;
    int 나이;
}

대충 봤을때 사람이라는 객체를 만들어 사람 1,3이라는 변수들에 넣고 사람이라는 클래스와 연결 시켜주는 그림이 나오지?
여기서 우리가 사람 정보를 출력할 때 이름과 나이의 값이 나올거야. 그런데 난 이걸 좀 더 간편하게 할 수 있는방법은 없을까? 라고 생각을 했어. 자동으로 알아서 척척 되면 얼마나 좋을까!! 해서 나온게 생성자야.

생성자는 new로 객체를 만들때 자동으로 호출되는 메서드야
생성자는 규칙이 몇개 있는데 void로 정의하지않아도 return타입이 필요없어!
그리고 생성자를 만들때 클래스명과 일치해야돼!

그래서 어떻게 쓰냐?

class 사람{
    String 이름;
    int 나이;
    사람(){
        this.나이=22;
    }
}

이렇게 하면 나이를 적지 않아도 나이 값을 받아올 수 있어!!

그 다음으로 내가 이름도 생성자로 만들고 싶어! 그래서
사람 사람1= new 김철수(); 이렇게 했어
그러면 김철수라는 클래스를 만들고 사람 클래스가 부모가 되는거지?

class 사람{
    String 이름;
    int 나이;
    사람(){ //부모의 생성자가 먼저 호출
        this.나이=22;
    }
}
class 김철수 extends 사람{
    김철수(){
        System.out.println("김철수가 실행됨");
        this.이름 = "김철수";
    }
}

이러한 형태가 나올거야 그러면 처음에 정의 했던 사람1.이름 ="김철수"; 이것도 안쓸수가 있어
그리고 내가 오버로딩을 원해 그러면

사람 사람1 = new 김철수("김철수");

이렇게 괄호안에 매개변수로 String 타입의 값을 넣어줘

class 김철수 extends 사람{
    김철수(String 이름){
        System.out.println("김철수가 실행됨");
        this.이름=이름;
    }
}

그러면 김철수에 있는 생성자도 String타입의 인자를 받아오겠지?
그럼 자동으로 링킹이 되어서 김철수라는 이름이 올라갈거야! 최종본을 보여주자면

public class Main {
    public static void main(String[] args) {
        사람 사람1 = new 김철수("김철수");
        //나이
        System.out.println("===사람1 정보===");
        System.out.printf("아름 : %s\n",사람1.이름);
        System.out.printf("나이 : %s\n",사람1.나이);
        사람 사람2 = new 사람();
        사람2.이름 ="이영희";
        // 나이
        System.out.println("===사람3 정보===")
        System.out.printf("아름 : %s\n",사람2.이름);
        System.out.printf("나이 : %s\n",사람2.나이);
    }
}
class 사람{
    String 이름;
    int 나이;
    사람(){ //부모의 생성자가 먼저 호출
        this.나이=22;
    }
}
class 김철수 extends 사람{
    김철수(String 이름){
        System.out.println("김철수가 실행됨");
        this.이름=이름;
    }
}

요런식으로 오늘은 생성자가 어떤식으로 활용되는지 간단하게 알려주고
내일 제대로 알려주도록 할게 빠이

profile
아자아자자

0개의 댓글