λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
β˜•Java

[Java μ΄ν•΄ν•˜κΈ°] 16. Java의 μƒμ„±μž

by Luvbit 2024. 5. 27.


 

 

🀍 Java의 μƒμ„±μžλž€?

μžλ°”μ˜ μƒμ„±μž(constructor)λŠ” 객체λ₯Ό 생성할 λ•Œ ν˜ΈμΆœλ˜λŠ” νŠΉλ³„ν•œ λ©”μ„œλ“œλ‘œ,
객체의 초기 μƒνƒœλ₯Ό μ„€μ •ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

μƒμ„±μžλŠ” 클래슀 이름과 λ™μΌν•œ 이름을 가지며 λ°˜ν™˜ νƒ€μž…μ΄ μ—†μŠ΅λ‹ˆλ‹€
μƒμ„±μžλŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 맀우 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.

 

 

 

πŸ©·μƒμ„±μžμ˜ νŠΉμ§•

 

 

1. 클래슀 이름과 동일

  • μƒμ„±μžλŠ” 클래슀 이름과 λ™μΌν•œ 이름을 κ°€μ§‘λ‹ˆλ‹€.
  • λ°˜ν™˜ νƒ€μž…이 μ—†μœΌλ©°, void도 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • CalculatorλΌλŠ” 클래슀의 μƒμ„±μžλŠ” public Calculator() {  } ν˜•νƒœλ‘œ μ •μ˜ν•©λ‹ˆλ‹€.

2. κ°μ²΄ μ΄ˆκΈ°ν™”

  • μƒμ„±μžλŠ” 객체의 ν•„λ“œλ₯Ό μ΄ˆκΈ°ν™”ν•˜κ±°λ‚˜ 초기 μ„€μ • μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • 객체가 μƒμ„±λ  λ•Œλ§ˆλ‹€ μ‹€ν–‰λ˜λ―€λ‘œ, κ°μ²΄κ°€ ν•„μš”ν•œ μ΄ˆκΈ° μƒνƒœλ₯Ό μ„€μ •ν•˜λŠ” λ° μ ν•©ν•©λ‹ˆλ‹€.
  • 객체λ₯Ό μƒμ„±ν•˜λŠ” μ‚¬μš©μžμ˜ νŽΈμ˜μ— 따라 μ΄ˆκΈ°ν™” 방법은 μ—¬λŸ¬ 가지가 μ‘΄μž¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. μ˜€λ²„λ‘œλ”© κ°€λŠ₯

  • μƒμ„±μžλŠ” μ˜€λ²„λ‘œλ”©λ  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
  • 즉, λ§€κ°œλ³€μˆ˜ λͺ©λ‘μ΄ λ‹€λ₯Έ μ—¬λŸ¬ μƒμ„±μžλ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 이λ₯Ό ν†΅ν•΄ λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ κ°μ²΄λ₯Ό μ΄ˆκΈ°ν™”ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

4 κΈ°λ³Έ μƒμ„±μž ( =default constructor )

  • ν΄λž˜μŠ€μ— λͺ…μ‹œμ μœΌλ‘œ μƒμ„±μžλ₯Ό μ •μ˜ν•˜μ§€ μ•ŠμœΌλ©΄, 
  • μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ λ§€κ°œλ³€μˆ˜κ°€ μ—†λŠ” κΈ°λ³Έ μƒμ„±μžλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
  • λͺ…μ‹œμ μœΌλ‘œ μƒμ„±μžλ₯Ό ν•˜λ‚˜λΌλ„ μ •μ˜ν•˜λ©΄, μ»΄νŒŒμΌλŸ¬λŠ” κΈ°λ³Έ μƒμ„±μžλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

5.  thisλ₯Ό μ‚¬μš©ν•œ μƒμ„±μž 호좜

  • μƒμ„±μž λ‚΄λΆ€μ—μ„œ λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ•Œ this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 이λ₯Ό ν†΅ν•΄ μ€‘볡 μ½”λ“œλ₯Ό μ€„이고 μ΄ˆκΈ°ν™” λ‘œμ§μ„ μž¬μ‚¬μš©ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

 

μ˜€λ²„λ‘œλ”©κ³Ό thisλŠ” μΆ”ν›„ ν¬μŠ€νŒ…μ—μ„œ λ‹€λ£¨κ² μŠ΅λ‹ˆλ‹€.

 

 

 

πŸ§‘μƒμ„±μžμ˜ μž₯점

1. 객체 μ΄ˆκΈ°ν™”μ˜ 일관성:
μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜λ©΄ 객체가 생성될 λ•Œ ν•„μš”ν•œ μ΄ˆκΈ°ν™” μž‘μ—…μ„ μΌκ΄€λ˜κ²Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
이λ₯Ό 톡해 객체의 μƒνƒœλ₯Ό 일관성 있게 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. μ½”λ“œ μž¬μ‚¬μš©μ„±:
μƒμ„±μž μ˜€λ²„λ‘œλ”©κ³Ό this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œ μƒμ„±μž ν˜ΈμΆœμ„ 톡해 μ΄ˆκΈ°ν™” λ‘œμ§μ„ μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ΄λŠ” μ½”λ“œ 쀑볡을 쀄이고 μœ μ§€λ³΄μˆ˜λ₯Ό μš©μ΄ν•˜κ²Œ ν•©λ‹ˆλ‹€.

3. 객체 μƒμ„±μ˜ νŽΈλ¦¬ν•¨:
μƒμ„±μžλŠ” 객체λ₯Ό μƒμ„±ν•˜λ©΄μ„œ λ™μ‹œμ— ν•„μš”ν•œ μ΄ˆκΈ°ν™” μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ―€λ‘œ,
객체 생성을 더 κ°„νŽΈν•˜κ³  μ§κ΄€μ μœΌλ‘œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 


νŠΉμ§•λ³„ 예제둜 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

예제 1 ) 클래슀 이름과 동일

public class Example {
    private int value;

    // μƒμ„±μž - 클래슀 이름과 λ™μΌν•˜λ©° λ°˜ν™˜ νƒ€μž…μ΄ μ—†μŒ
    public Example(int value) {
        this.value = value;
    }

    public void displayValue() {
        System.out.println("Value: " + value);
    }

    public static void main(String[] args) {
        Example ex = new Example(10); // μƒμ„±μž 호좜
        ex.displayValue(); // Value: 10 좜λ ₯
    }
}

 

 

 

 

예제 2 ) 객체 μ΄ˆκΈ°ν™”

public class Person {
    private String name;
    private int age;

    // μƒμ„±μž - 객체 μ΄ˆκΈ°ν™”
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void displayInfo() {
        System.out.println("Name: " + name + ", Age: " + age);
    }

    public static void main(String[] args) {
        Person person = new Person("pipi", 5); // μƒμ„±μž 호좜
        person.displayInfo(); // Name: pipi, Age: 5 좜λ ₯
    }
}

 

 

 

예제 3 ) μ˜€λ²„λ‘œλ”© κ°€λŠ₯

public class Rectangle {
    private int width;
    private int height;

    // κΈ°λ³Έ μƒμ„±μž
    public Rectangle() {
        this.width = 0;
        this.height = 0;
    }

    // λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μž
    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }

    public void displayDimensions() {
        System.out.println("Width: " + width + ", Height: " + height);
    }

    public static void main(String[] args) {
        Rectangle rect1 = new Rectangle(); // κΈ°λ³Έ μƒμ„±μž 호좜
        rect1.displayDimensions(); // Width: 0, Height: 0 좜λ ₯

        Rectangle rect2 = new Rectangle(10, 20); // λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μž 호좜
        rect2.displayDimensions(); // Width: 10, Height: 20 좜λ ₯
    }
}

 

 

 

예제 4 ) κΈ°λ³Έ μƒμ„±μž

public class Animal {
    private String type;

    // κΈ°λ³Έ μƒμ„±μžκ°€ μžλ™μœΌλ‘œ 제곡됨
    public Animal() {
        this.type = "Unknown";
    }

    public void displayType() {
        System.out.println("Type: " + type);
    }

    public static void main(String[] args) {
        Animal animal = new Animal(); // κΈ°λ³Έ μƒμ„±μž 호좜
        animal.displayType(); // Type: Unknown 좜λ ₯
    }
}

 

 

 

예제 5 ) thisλ₯Ό μ‚¬μš©ν•œ μƒμ„±μž ν˜ΈμΆœ

public class Car {
    private String model;

    // λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μž
    public Car(String model) {
        this.model = model;
    }

    // κΈ°λ³Έ μƒμ„±μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜
    public Car() {
        this.model = "Unknown";
    }

    public void displayModel() {
        System.out.println("Model: " + model);
    }

    public static void main(String[] args) {
        Car car1 = new Car("Tesla"); // λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μž 호좜
        car1.displayModel(); // Model: Tesla 좜λ ₯

        Car car2 = new Car(); // κΈ°λ³Έ μƒμ„±μž 호좜
        car2.displayModel(); // Model: Unknown 좜λ ₯
    }
}

 

 

 

 

μƒμ„±μžλŠ” 객체의 초기 μƒνƒœλ₯Ό μ„€μ •ν•˜λŠ”λ° 맀우 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.
이λ₯Ό 톡해 μ½”λ“œμ˜ 일관성과 μž¬μ‚¬μš©μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

μ§ˆλ¬Έμ€ μ–Έμ œλ“ μ§€ λŒ“κΈ€μ— λ‚¨κ²¨μ£Όμ„Έμš”.
🩡🐰🩡