Java

클래스 설계와 생성자의 활용

조충희 2025. 4. 15. 17:27

생성자 (constructor)

기본 생성자 / 사용자 정의 생성자

"필수적인 값을 넣도록 강제한다."

 

클래스의 인스턴스(객체)를 생성할때 호출되는 정해진 유형의 메서드이다.
객체가 생성될 때 가장 먼저 수행되는 코드이기도 하다.

 

! 기본 생성자
컴파일러가 자동으로 생성해준다.

!  사용자 정의 생성자
사용자가 필요에 의해 직접 생성자코드를 넣어주는 것을 가리킨다.

!  생성자 오버로딩이란
생성자가 여러개인 상황을 가리킨다.

 

package ch08;
public class Dog {

    String name;

    //사용자 정의 생성자
    public Dog(String s) {
        name = s;
    }

    /*
    생성자는
    객체가 만들어질 때
    제일 먼저 수행하는 코드가 된다.
     */

} // end of class
package ch08;
public class DogMainTest1 {
    // main
    public static void main(String[] args) {

        //Dog d1 = new Dog();
        //d1.name = "흰둥이";

        /*
        개발자가 생성자를 직접 만들지 않으면
        컴파일러가 자동으로 '기본 생성자'를 추가해준다.
         */

        Dog d2 = new Dog("흰둥이");
        System.out.println(d2.name); // 흰둥이

    } // end of main
} // end of class

 

생성자의 문법

public 클래스명(매개변수) {

멤버변수 = 매개변수

}

기본 생성자 (default constructor)

개발자가 생성자를 하나라도 만들지 않으면
컴파일러가 .java 파일에서 => .class 파일로 변환할때
자동으로 코드를 넣어준다.

 

package ch08;

public class Student {

    /*
    생성자 (constructor)

    객체를 생성할 때 특정 모양으로 객체를 만들라고 지시하는 것
    강제성을 부여한다.

    생성자는 객체를 생성할때 반드시 존재해야 한다.
     */
    String name;
    int number;
    int grade;

    /*
    생성자의 문법

    기본 생성자 (default constructor)

    개발자가 생성자를 하나라도 만들지 않으면
    컴파일러가 .java 파일에서 => .class 파일로 변환할때
    자동으로 코드를 넣어준다.
     */

    // 기본 생성자
    // public Student() {}

    // 사용자 정의 생성자
    public Student(String s, int n, int g) { // 대소문자가 클래스 이름(Student)과 같아야 한다.
        name = s;
        number = n;
        grade = g;
    }

} // end of class
package ch08;

public class MainTest1 {
    // main
    public static void main(String[] args) {

        // 인수 값
        Student s1 = new Student("홍길동", 1, 3);
        System.out.println(s1.name); // 홍길동
        System.out.println(s1.number + "번"); // 1번
        System.out.println(s1.grade + "학년"); // 3학년
    } // end of main
} // end of class

 

생성자 예제

생성자가 여러개면 생성자 오버로딩이라고 한다.

package ch08;

// 사용자의 정보를 저장해보자. 나중에 쓰기 위해
public class UserInfo {

    int userId;
    String userPassWord;
    String userName;
    String userTell;

    /*
    생성자가 여러개라면
    이를 생성자 오버로딩이라고 한다.
     */

    //기본 생성자 모양
    public UserInfo() {
    }

    //사용자 정의 생성자
    public UserInfo(int uid) {
        System.out.println("1.사용자정의생성자 호출됨");
        // 멤버 변수 값을 초기화시키는 코드를 작성한다.
        userId = uid;
    }

    public UserInfo(int uid, String p) {
        userId = uid;
        userPassWord = p;
    }

    public UserInfo(int uid, String p, String n) {
        userId = uid;
        userPassWord = p;
        userName = n;
    }

    public UserInfo(int uid, String p, String n, String t) {
        userId = uid;
        userPassWord = p;
        userName = n;
        userTell = t;
    }

} // end of class
package ch08;

public class UserInfoMainTest1 {
    // main
    public static void main(String[] args) {

//        UserInfo u1 = new UserInfo();
//        UserInfo u2 = new UserInfo(1);
//        UserInfo u3 = new UserInfo(1, "p1");
//        UserInfo u4 = new UserInfo(1, "p1", "김");
        UserInfo u5 = new UserInfo(1, "p1", "김", "02-123-4567");

        /*
        생성자는
        객체가 메모리에 올라갈 때
        가장 먼저 수행되는 코드이다.
         */

    } // end of main
} // end of class

 

생성자 예제

생성자를 사용하는 목적은 강제성을 부여하기 위함이다.

package ch09;
public class Bus {
    // 속성
    int busId;
    String busType;
    String busCompany;

    // 생성자 - 생성자가 여럿 있으면 '생성자 오버로딩'
//    public Bus(int id) {
//        busId = id;
//    }
//    public Bus(int id, String bt) {
//        busId = id;
//        busType = bt;
//    }
    public Bus(int id, String bt, String bc) {
        busId = id;
        busType = bt;
        busCompany = bc;
        // 멤버변수 매개변수
    }

    // 메서드
    public void showInfo() {
        System.out.println("===== 상태창 =====");
        System.out.println("버스 번호: " + busId);
        System.out.println("버스 종류: " + busType);
        System.out.println("버스 회사: " + busCompany);
    }

} // end of class
package ch09;
public class BusMainTest1 {
    // main
    public static void main(String[] args) {

//        Bus b1 = new Bus(133); // 강제성
        Bus b1 = new Bus(133,"시내","텐코");
        b1.showInfo();

        /*
        생성자를 사용하는 목적은
        강제성을 부여하기 위함이다.
         */

    } // end of main
} // end of class