JAVA

[Java] 생성자

songsua 2024. 10. 20. 16:55

객체를 생성하는 시점에 어떤 작업을 하고 싶다면 생성자(Constructor)를 이용하면 된다.

생성자를 알아보기 전에 먼저 생성자가 왜 필요한지 코드로 간단히 알아보자.

 

package construct;

public class Construct01 {
        String name;
        int age;
        int grade;
}
package construct;

public class ConstaructMain {
    public static void main(String[] args) {
        Construct01 member1 = new Construct01();
        member1.name = "user1";
        member1.age = 15;
        member1.grade = 90;

        Construct01 member2 = new Construct01();
        member2.name = "user2";
        member2.age = 22;
        member2.grade = 87;

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

위에서 같이 회원 객체를 생성하면,

member1.name = "user1";
member1.age = 15;
member1.grade = 90;

 

변수 초기값을 설정해야한다. 메서드를 사용해서 반복을 제거해보면,

package construct;

public class ConstaructMain {
    public static void main(String[] args) {
        Construct01 member1 = new Construct01();
        initMember(member1, "yun", 14, 90);
        //member1.name = "user1";
        //member1.age = 15;
        //member1.grade = 90;
        Construct01 member2 = new Construct01();
        initMember(member2, "user2", 22, 87);
        //member2.name = "user2";
        //member2.age = 22;
        //member2.grade = 87;

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

    }
    //static 메서드는 main 메서드 밖에서 정의 해야함
    static void initMember(Construct01 member, String name, int age, int grade) {
            member.name = name;
            member.age = age;
            member.grade = grade;
        }
}

initMember 메서드를 사용해서 반복을 제거했지만, 이 메서드는 대부분 Member객체의 멤버 변수를 사용한다.


정리하면,

생성자는 메서드와 비슷하다. 하지만 메서드는 아니다!! 그렇기 때문에 void 는 사용하면 안된다.
생성자는 클래스가 객체로 생성될 때 자동으로 호출되는 메서드이다.
객체의 초기 상태를 설정하는 역할을 한다.

예를들어
주의할 점

  • 생성자는 static이 되면 안된다
    → 생성자는 객체가 생성될 때 실행되는 것이기 때문에 static 키워드를 쓰면 안된다.
    static은 객체를 만들어지도 않아도 생성되는 것인데, 생성자는 객체를 만들때 실행되는 것이라 사용하면 안된다.
  • 반환 타입이 없어야한다 (void도 쓰면 안 됨)
    → 생성자는 반환 타입(void 같은 것)이 없어야한다
  • 클래스 이름과 같은 이름으로 생성해야한다!
    → Test1(int num, String name) 


class Test1 {
    int num;       // 숫자 변수
    String name;   // 이름 변수

    // 생성자 (이름이 클래스 이름과 같아야 해!)
    Test1(int num, String name) {
        this.num = num;    // this는 현재 객체의 num을 의미
        this.name = name;
        System.out.println("생성자 호출: " + name + ", " + num);
    }
}

public class Main {
    public static void main(String[] args) {
        // 객체 생성 -> 생성자가 자동으로 실행됨
        Test1 t = new Test1(10, "홍길동");
    }
}

 

 

'JAVA' 카테고리의 다른 글

[Java] 캡슐화  (1) 2024.10.27
[Java] 생성자  (0) 2024.10.23
[Java] 객체 지향 프로그래밍  (1) 2024.10.20
[Java] 문제와 풀이2  (1) 2024.10.20
[Java] NullPointerException  (0) 2024.10.20