최원종의 개발 블로그

생성자 본문

Java/Java 객체지향

생성자

chl6698 2026. 2. 24. 17:52

생성자(Constructor)는 클래스의 인스턴스, 즉 객체를 생성할 때 호출되는 특별한 유형의 메서드.

객체의 초기화를 담당하며, 객체가 올바르게 사용될 수 있도록 필요한 값들을 설정하고, 필요한 초기화 코드를 실행.

 

생성자의 주요 특징

  • 생성자의 이름은 클래스의 이름과 동일해야 한다
  • 생성자는 반환 타입을 가지지 않으며, 심지어 void도 사용하지 않는다
  • 객체 생성 시 new 키워드와 함께 자동으로 호출된다.
  • 생성자는 크게 기본 생성자와 사용자 정의 생성자로 구분할 수 있다.

 

기본 생성자( default constructor)

  • 클래스에는 반드시 적어도 하나 이상의 생성자가 존재
  • 클래스에 생성자를 구현하지 않아도 new키워드와 함께 생성자를 호출할 수 있음
  • 클래스에 생성자가 하나도 없는 경우 컴파일러가 생성자 코드를 넣어 줌
  • public Student(){}

생성자 코드(1)

package ch07;

public class Bus {

    int busId;
    String busType;
    String company;

    // 생성자를 만들어 보자.
    public Bus() {
    }

    // 생성자 - 파라메터 1개를 받는 생성자
    public Bus(int id) {
        busId = id;
    }

    // 생성자 - 파라메터 2개를 받는 생성자
    public Bus(int id, String type) {
        busId = id;
        busType = type;
    }

    // 생성자 2개 상이면 생성자 오버로딩이라고 부를 수 있다.
    public Bus(int id, String type, String name) {
        busId = id;
        busType = type;
        company = name;
    }
}
package ch07;

public class BusMainTest {

    //메인함수
    public static void main(String[] args) {
        // 참조타입(주소값담고있음)
        //객체를 생성시킬때 호출하는자이다(모양맞춰야한다)
        Bus b1 = new Bus(133);
        System.out.println(b1);
        System.out.println(b1.busId);

        System.out.println("--------------------");
        Bus b2 = new Bus(100, "시내");
        System.out.println(b2);
        System.out.println(b2.busId + ", " + b2.busType);

        System.out.println("--------------------");
        Bus b3 = new Bus(300, "시외", "한일");
        System.out.println(b3);
        System.out.println(b3.busId + ", " + b3.busType + ", " + b3.company);

        System.out.println("--------------------");
        // 생성자에 좋은 점
        Bus b4 = new Bus();
        b4.busId = 400;
        b4.busType = "시외";
        b4.company = "부일";

    }
}

더보기
출력 결과 화면

 

 

 

생성자 코드(2)

package ch07;

public class Student {
    String name;
    int number;
    int grade;

    //기본 생성자
    //개발자가 생성자를 하나라도 만들지 않으면 자동으로 컴파일러가 생성자를 추가해 준다.
    //public Student() {} <---- 기본 생성자 모양
    //컴파일러가 .java --------> (이때 자동 추가 됨) .class

    //사용자 정의 생성자
    public Student(String s, int n, int g) {
        name = s;
        number = n;
        grade = g;
    }

    //tip
    //생성자
    //객체를 생성할 때 다음과 같은 모양으로 객체를 만들어라고 지시하는 것
    //즉, 강제성을 부여하는 것과 같다.
    //생성자는 객체를 생성할 때 반드시 존재해야한다

}
package ch07;

public class StudentMainTest {

    Student s1 = new Student("티모", 10, 3);

}

 

 

생성자 코드 (3)

package ch07;

public class Dog {

    //직접 속성 정의
    String name;

    //직접 생성자 정의
    public Dog(String n) {
        System.out.println("오 생성자 호출~ ");
        name = n;
        //중요!
        //**생성자는 객체가 만들어질 때 제일 먼저 수행하는 코드가 된다**
    }

    //여기서 메인함수 만들어보기
    public static void main(String[] args) {
        Dog dog1 = new Dog("바둑이");

        System.out.println(dog1.name);
    }
}

 

 

생성자 커피머신 만들기 실습 코드

package ch07;

/**
 * 메서드 연습
 * 메서드란? 객체에 소손된 함수로, 클래스의 상태(데이터)를 활용하거라 객체와 관련된
 * 작업을 처리할 때 사용한다.
 */
public class CoffeeMachine {

    //1. 상태 설계
    int water; //물의 양(ml)
    int coffee; //원두의 양(g)

    //3. 생성자 만들기 - 사용자 정의 생성자(사용자 생성자 만들면 기본생성자 생성x)
    public CoffeeMachine(int w, int c) {
        water = w;
        coffee = c;
    }

    //2. 행위 설계
    //물 채우기
    public void refillWater(int amount) {
        if (amount > 0) {
            water += amount;
            System.out.println("amount + " + "ml의 물을 채웠습니다");
        } else {
            System.out.println("0보다 큰 양의 물을 채워주세요");
        }
    }

    //커피 원두 채우기
    public void refillCoffee(int amount) {
        if (amount > 0) {
            coffee += amount;
            System.out.println(amount + "g의 커피 원두를 채웠습니다");
        } else {
            System.out.println("0보다 큰 양의 원두를 채워주세요");
        }
    }

    //커피 만들기
    public String makeCoffee() {
        //커피 한 잔에 물 100ml, 원두 10g필요( 사전 조건 설계)
        if (water >= 100 && coffee >= 10) {
            water -= 100;//물 사용한 값 빼주기
            coffee -= 10;//원두 사용한 값 빼주기
            return "맛있는 커피 한 잔 완성";
        } else {
            return "재료가 부족해요! 물이나 원두 채워주세요";
        }
    }

    //상태창
    public void showInfo() {
        System.out.println("=======상태창=========");
        System.out.println("현재 물 양 : " + water);
        System.out.println("현재 원두 양 : " + coffee);
    }
}
package ch07;

//코드를 실행하는 측
public class CoffeeMachineMainTest {
    public static void main(String[] args) {

        CoffeeMachine machine = new CoffeeMachine(200, 30);
        String orderResult1 = machine.makeCoffee();
        System.out.println(orderResult1);
        machine.showInfo();
        System.out.println("-------------");
        machine.makeCoffee();
        machine.showInfo();
        System.out.println("-----------------");
        String orderResult2 = machine.makeCoffee();
        System.out.println("orderResult2 : " + orderResult2);
        machine.showInfo();
    }
}
더보기
결과 출력 화면

 

 

생성자 연습문제 코드

package ch07;

public class Phone {

    //속성 정의
    String search;
    int batteryCharger;
    String executeApp;

    //생성자 생성, 또는 기본생성자, 또는 생성자 오버로딩
    public Phone(String name, int b1, String appName) {
        search = name;
        batteryCharger = b1;
        executeApp = appName;
    }

    //행위 정의
    //검색하는 동작
    public void searchWord() {
        System.out.println(search + "를 검색합니다 ");
    }

    //배터리 잔량 표시 동작
    public void remainingBattery() {
        System.out.println("배터리 잔량 표시 ");
        if (batteryCharger == 0) {
            System.out.println("곧 전원이 꺼집니다 충전해주세요");
        } else if (batteryCharger < 10) {
            System.out.println("배터리가 10퍼 아래입니다 충전해 주세요");
        } else if (batteryCharger < 60) {
            System.out.println("배터리가 60퍼 아래입니다 충전을 권장드립니다");
        } else if (batteryCharger <= 100) {
            System.out.println("배터리 잔량이 양호합니다");
        } else {
            System.out.println("배터리는 100퍼가 최대입니다 다시 입력해 주세요");
        }
    }

    //앱을 실행하는 동작
    public void app() {
        System.out.println(executeApp + "앱을 실행합니다");
    }


    //실제 테스트 (파일 따로 만들기)

}
package ch07;

public class PhoneMainTest {
    public static void main(String[] args) {
        Phone p1 = new Phone("함수", 30, "네이버");
        p1.searchWord();
        System.out.println("---------------");
        p1.remainingBattery();
        System.out.println("--------------");
        p1.app();
    }
}
더보기
출력결과화면

 

'Java > Java 객체지향' 카테고리의 다른 글

접근 제어 지시자 (access modifier)  (0) 2026.02.25
객체지향 프로그래밍(객체간 상호작용)  (1) 2026.02.25
메서드  (0) 2026.02.24
함수  (0) 2026.02.24
클래스와 객체  (0) 2026.02.24