inblog logo
|
DailyCoding
    JAVA

    17. 생성자(Constructor)

    박은서's avatar
    박은서
    Dec 17, 2025
    17. 생성자(Constructor)
    Contents
    1. 생성자(Constructor)1️⃣ 생성자란?2️⃣ 생성자의 특징3️⃣ 주의해야 할 점 (객체 지향 관점)4️⃣ 예시5️⃣ 교재 예제2. 기본 생성자(Default Contructor)1️⃣ 기본 생성자란?2️⃣ 기본 생성자의 특징3️⃣ 주의해야 할 점4️⃣ 교재 예제3. 실습

    1. 생성자(Constructor)

    교재 p.155-162 4.3 생성자와 메소드 오버로딩

    1️⃣ 생성자란?

    객체가 생성될 때 객체의 상태를 초기화하는 특수한 메소드
    객체 상태의 초기화를 유연하게 할 수 있음
    ※기본적이고 가장 많이 사용되는 상태는 기본 생성자로, 특수하고 변동사항이 있을 경우 생성자로 받음

    2️⃣ 생성자의 특징

    특징
    설명
    이름
    클래스 이름과 동일
    반환 타입
    없음 (void도 ❌)
    호출 시점
    객체 생성 시
    오버로딩
    ⭕ 가능

    3️⃣ 주의해야 할 점 (객체 지향 관점)

    1) 생성자는 초기 상태만 책임진다

    • 생성자는 객체가 만들어질 때 반드시 필요한 값만 초기화
    • 모든 필드를 생성자에서 초기화 할 필요 ❌
    // ❌ 모든 상태를 생성자에서 처리 new Player(hp, level, score, position);

    2) 시간에 따라 변하는 값은 생성자에서 ❌

    • 객체 생성 이후에 변하는 값
      • → 생성자 ❌
        → 메서드 ⭕
    • 예시 : 점수 증가, 체력 감소, 상태 변경
    player.takeDamage(10); player.addScore(100);

    3) 행위 없는 상태 변화는 잘못된 설계

    • 중간에 갑자기 값이 바뀌는 건 ❌
    • 이유 없는 값 변경 = 마법 같은 코드
    player.hp =0; // ❌ 행위 없음

    4) 상태 변화는 반드시 “행위(메서드)”를 통해서

    • 객체의 상태 변화는 의미 있는 메서드로 표현해야 함
    player.die(); // ⭕ player.heal(20); // ⭕
    ➡️ 상태 변경 = 행위의 결과

    객체 지향의 첫 번째 원칙

    👉 위의 4가지 내용이 객체 지향의 첫 번째 원칙
    • 객체는 데이터를 들고 있고, 행위를 통해서만 상태가 변함
    객체 = 상태 + 행위

    4️⃣ 예시

    class Person { String name; // 생성자 Person(String name) { this.name = name; } }

    5️⃣ 교재 예제

    1) PizzaTest(p.156)

    package ex04; class Pizza{ int size; String type; // 매개 변수가 없는 생성자 -> 상태 고정 public Pizza(){ size = 12; type = "슈퍼스프림"; } // 매개 변수가 있는 생성자 -> 객체 생성 때마다 초기화 가능 public Pizza(int s, String t){ size = s; type = t; } } public class PizzaTest { public static void main(String[] args) { Pizza obj1 = new Pizza(); System.out.println("(" + obj1.type + " , " + obj1.size + ",)"); Pizza obj2 = new Pizza(24,"포테이토"); System.out.println("(" + obj2.type + " , " + obj2.size + ",)"); } }
    notion image

    2) 예제 4-4 TelevisionTest (p.157)

    package ex04; class Television { private int channel; private int volume; private boolean onOff; Television(int c, int v, boolean o){ channel = c; volume = v; onOff = o; } void print() { System.out.println("채널은 " + channel + "이고 볼륨은 " + volume + "입니다."); } } public class TelevisionTest { public static void main(String[] args) { Television myTv = new Television(7,10,true); myTv.print(); Television yourTv = new Television(11, 20, true); yourTv.print(); } }
    notion image
     

    2. 기본 생성자(Default Contructor)

    1️⃣ 기본 생성자란?

    매개변수가 없으며, 클래스가 아무 생성자도 정의하지 않았을 때 컴파일러가 자동으로 제공하는 생성자

    2️⃣ 기본 생성자의 특징

    • 매개변수가 없음
    • 클래스에 생성자를 하나도 만들지 않으면 자동으로 생성
    • 개발자가 생성자를 하나라도 정의하면 기본 생성자는 자동으로 생성되지 않음
    • 객체 생성 시 **필드를 기본값(0, null, false 등)**으로 초기화한다.

    3️⃣ 주의해야 할 점

    1) 생성자를 하나라도 정의하면 기본 생성자는 자동 생성 ❌

    • 자바는 생성자를 하나도 정의하지 않았을 때만 기본 생성자(클래스명())를 자동으로 만들어줌
    classUser { User(String name) {} } // User() 기본 생성자 ❌ 자동 생성 안 됨
    객체 생성 시 항상 값을 입력하지 않는다면?
    • 객체를 만들 때마다 모든 상태 값을 넘기는 건 비효율적 → 그래서 기본값을 갖는 생성자 필요
    ➡️ 해결 방법 :
    • 기본 생성자 직접 정의 ⭕
      • 가장 많이 사용되는 기본 상태로 초기화
      • 객체 생성 진입점을 제공
    classUser { String role; boolean active; User() { this.role ="USER"; this.active =true; } }
    • 특수한 경우를 위한 생성자도 함께 제공
      • 상황에 따라 다른 초기화가 필요할 수 있음 → 오버로딩된 생성자 사용
    classUser { String role; boolean active; User() { this("USER",true); } User(String role,boolean active) { this.role = role; this.active = active; } }

    생성자 설계의 핵심 원칙

    • 기본 생성자 → 가장 많이 쓰이는 기본 상태
    • 매개변수 생성자 → 특수한 초기 상태
    👉 객체 생성의 의도를 생성자로 표현

    4️⃣ 교재 예제

    1) BoxTest(p.158)

    package ex04; class Box2 { int width, height, depth; } public class BoxTest2 { public static void main(String[] args) { Box2 b = new Box2(); System.out.println("상자의 크기 : (" + b.width + "," + b.height + "," + b.depth +")"); } }
    notion image

    3. 실습

    package ex04; public class Burger { String 재료1; String 재료2; String 재료3; int price; // 기본생성자 Burger(){ 재료1 = "불고기"; 재료2 = "양상추"; 재료3 = "빵"; price = 3800; } // 생성자 Burger(String 재료1, int price){ this.재료1 = 재료1; 재료2 = "양상추"; 재료3 = "빵"; this.price = price; } public static void main(String[] args) { Burger b1 = new Burger(); Burger b2 = new Burger(); Burger b3 = new Burger(); Burger b4 = new Burger(); Burger b5 = new Burger(); Burger b6 = new Burger(); Burger b7 = new Burger("새우", 4000); Burger b8 = new Burger("한우불고기", 8000); } }
    Share article
    Contents
    1. 생성자(Constructor)1️⃣ 생성자란?2️⃣ 생성자의 특징3️⃣ 주의해야 할 점 (객체 지향 관점)4️⃣ 예시5️⃣ 교재 예제2. 기본 생성자(Default Contructor)1️⃣ 기본 생성자란?2️⃣ 기본 생성자의 특징3️⃣ 주의해야 할 점4️⃣ 교재 예제3. 실습

    DailyCoding

    RSS·Powered by Inblog