생성자

고동현·2024년 6월 3일
0

JAVA

목록 보기
5/22

this를 사용한 초기화

MemberInit

public class MemberInit {
    String name;
    int age;
    int grade;

    void initMember(String name,int age, int grade){
        this.age = age;
        this.name = name;
        this.grade = grade;
    }
}

MethodInitMain3

public class MethodInitMain3 {
    public static void main(String[] args) {
        MemberInit member1 = new MemberInit();
        member1.initMember("user1",15,90);

        MemberInit member2 = new MemberInit();
        member2.initMember("user2",30,90);

        MemberInit[] memberInits = {member1,member2};
        for (MemberInit memberInit : memberInits) {
            System.out.println("이름:" + memberInit.name + "나이: "+memberInit.age + "성적: " +memberInit.grade);
        }
    }
}

이제 메서드호출을 통해 객체의 필드를 초기화 해줬다.

참고: this.를 파라미터와 필드명이 다르면 쓰지 않아도 된다. 같으면 써야함
만약 이름이 다르다면 안쓰는것을 추천

생성자 사용

public class MemberConstruct {
    String name;
    int age;
    int grade;

    MemberConstruct(String name,int age, int grade){
        this.name=name;
        this.age=age;
        this.grade=grade;
    }
}

생성자를 사용함

public class ConstructMain1 {
    public static void main(String[] args) {
        MemberConstruct member1 = new MemberConstruct("user1",15,90);
        MemberConstruct member2 = new MemberConstruct("user2",30,40);

        MemberConstruct[] memberConstructs = {member1,member2};
        for (MemberConstruct memberConstruct : memberConstructs) {
            System.out.println("이름:" + memberConstruct.name + "나이: "+memberConstruct.age + "성적: " +memberConstruct.grade);
        }
    }
}

장점: 파라미터 누락을 방지할 수 있음

기본생성자

생각해보면 이전에 new로 객체를 만들때, 생성자를 만들지 않았는데도 생성자 호출이 되었다.

public class MemberInit {
    String name;
    int age;
    int grade;

    void initMember(String name,int age, int grade){
        this.age = age;
        this.name = name;
        this.grade = grade;
    }
    //자바가 기본으로 만들어줌
    MemberInit(){
    }
}

memberInit에서는 생성자 메서드를 정의하지 않더라도 자바가 생성자가 1개라도 없다면 기본생성자를 만들어주다.

그렇다면 왜 만들어주냐? 만약 자바에서 기본생성자를 만들어 주지 않는다면 생성자 기능이 필요 없는데도 모든 클래스에 개발자가 직접 기본생성자를 정의해야하는 불편함 때문이다.

생성자 오버로딩

public class MemberConstruct {
    String name;
    int age;
    int grade;

    MemberConstruct(String name,int age, int grade){
        this.name=name;
        this.age=age;
        this.grade=grade;
    }

    MemberConstruct(String name, int age){
        this.name = name;
        this.age = age;
        this.grade = 50;
    }
}
public class ConstructMain1 {
    public static void main(String[] args) {
        MemberConstruct member1 = new MemberConstruct("user1",15,90);
        MemberConstruct member2 = new MemberConstruct("user2",30);

        MemberConstruct[] memberConstructs = {member1,member2};
        for (MemberConstruct memberConstruct : memberConstructs) {
            System.out.println("이름:" + memberConstruct.name + "나이: "+memberConstruct.age + "성적: " +memberConstruct.grade);
        }
    }
}

참고 : 오버로딩 vs 오버라이딩

  • 오버로딩: 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 갯수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할수있다.
  • 오버라이딩: 부모클래스의 메서드를 재정의하는것이므로, 자식클래스에서는 오버라이딩하고자하는 메서드 이름, 매개변수, 반환형이 같아야한다.
profile
항상 Why?[왜썻는지] What?[이를 통해 무엇을 얻었는지 생각하겠습니다.]

0개의 댓글