❀️ JAVA/Basic

[JAVA] μƒμ„±μž(consructor)

Genie_. 2024. 10. 17. 18:26
728x90
λ°˜μ‘ν˜•

πŸ“š μƒμ„±μž(constructor)

1.  μƒμ„±μžλž€?

μƒμ„±μžλŠ” μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œ ν˜ΈμΆœλ˜λŠ” '*μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λ©”μ„œλ“œ'이닀.

μ„€λͺ…λŒ€λ‘œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™” ν• λ•Œ 주둜 μ‚¬μš©λ˜λ©°, μΈμŠ€ν„΄μŠ€ 생성 μ‹œ μ‹€ν–‰λ˜μ–΄μ•Ό ν•  μž‘μ—…μ„ μœ„ν•΄μ„œλ„ μ‚¬μš©λœλ‹€.

 

*μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” : μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ“€μ„ μ΄ˆκΈ°ν™” ν•˜λŠ” 것

 

μƒμ„±μž 쑰건과 μ •μ˜

μƒμ„±μžλŠ” 클래슀 내에 μ„ μ–Έλ˜λ©°, λ©”μ„œλ“œμ˜ ꡬ쑰와 μœ μ‚¬ν•˜λ‹€.

ν΄λž˜μŠ€μ΄λ¦„(νƒ€μž… λ³€μˆ˜λͺ…, νƒ€μž… λ³€μˆ˜λͺ…, ...){
	// μΈμŠ€ν„΄μŠ€ μƒμ„±μ‹œ μˆ˜ν–‰λ  μ½”λ“œ,
	// 주둜 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™” μ½”λ“œλ₯Ό μ λŠ”λ‹€.
}
  • μƒμ„±μžμ˜ 이름은 클래슀의 이름과 κ°™μ•„μ•Ό ν•œλ‹€.
  • μƒμ„±μžλŠ” 리턴 값이 μ—†λ‹€.
    • μƒμ„±μž μ•žμ— 리턴값이 μ—†μŒμ„ λœ»ν•˜λŠ” ν‚€μ›Œλ“œ voidλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμŒ, 아무것도 적지 μ•ŠλŠ”λ‹€.
  • μƒμ„±μžλŠ” newλ₯Ό 톡해 객체λ₯Ό 생성할 λ•Œ, 객체당 ν•œ 번 호좜
  • μƒμ„±μžλŠ” μ—¬λŸ¬κ°œ μž‘μ„± κ°€λŠ₯ν•˜λ‹€(μ˜€λ²„λ‘œλ”©)

 

λ˜ν•œ, μƒμ„±μžμ— λŒ€ν•΄ μ£Όμ˜ν•΄μ•Όν•  μ μ΄μžˆλ‹€.

μ—°μ‚°μž newκ°€ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” 것이지 μƒμ„±μžκ°€ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” 것이 μ•„λ‹ˆλ‹€.

μƒμ„±μžλŠ” λ‹¨μˆœνžˆ μΈμŠ€ν„΄μŠ€λ³€μˆ˜λ“€μ˜ μ΄ˆκΈ°ν™”μ— μ‚¬μš©λ˜λŠ” νŠΉλ³„ν•œ λ©”μ„œλ“œμΌ 뿐이닀.

 

* μΈμŠ€ν„΄μŠ€ : ν΄λž˜μŠ€μ— μ˜ν•΄μ„œ λ§Œλ“€μ–΄μ§„ 객체

κ·Έλ ‡λ‹€λ©΄ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” μ½”λ“œμ˜ μˆ˜ν–‰ κ³Όμ • μ˜ˆμ‹œλ₯Ό 보자.

Card c = new Card();
  1. μ—°μ‚°μž new에 μ˜ν•΄μ„œ λ©”λͺ¨λ¦¬(heap)에 Card클래슀의 μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λœλ‹€.
  2. μƒμ„±μž Card()κ°€ ν˜ΈμΆœλ˜μ–΄ μˆ˜ν–‰λœλ‹€.
  3. μ—°μ‚°μž new의 결과둜, μƒμ„±λœ CardμΈμŠ€ν„΄μŠ€μ˜ μ£Όμ†Œκ°€ λ°˜ν™˜λ˜μ–΄ μ°Έμ‘°λ³€μˆ˜ c에 μ €μž₯λœλ‹€.

 

μš°λ¦¬κ°€ μ§€κΈˆκΉŒμ§€ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•΄μ™”λ˜ 'ν΄λž˜μŠ€μ΄λ¦„()'이 μƒμ„±μžμ˜€λ˜ 것이닀.

그럼 μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•ŒλŠ” λ°˜λ“œμ‹œ μƒμ„±μžλ₯Ό μ„ νƒν•˜μ—¬ μ§€μ •ν•΄μ€˜μ•Ό ν•œλ‹€.

 


2. κΈ°λ³Έ μƒμ„±μž

λͺ¨λ“  ν΄λž˜μŠ€μ—λŠ” λ°˜λ“œμ‹œ ν•˜λ‚˜ μ΄μƒμ˜ μƒμ„±μžκ°€ μ •μ˜ λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.

ν•˜μ§€λ§Œ μš°λ¦¬λŠ” μƒμ„±μžλ₯Ό μ •μ˜ ν•œ 적이 μ—†λ‹€, κ·Έλ ‡μ§€λ§Œ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μžˆμ—ˆλ‹€.

κ·Έ μ΄μœ κ°€ μ»΄νŒŒμΌλŸ¬κ°€ μ œκ³΅ν•˜λŠ” 'κΈ°λ³Έ μƒμ„±μž(default constructor)' 덕뢄이닀.

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

단, μƒμ„±μžκ°€ ν•˜λ‚˜λΌλ„ μžˆμ„ λ•ŒλŠ” κΈ°λ³Έ μƒμ„±μžλ₯Ό 직접 μΆ”κ°€ν•΄μ•Όν•œλ‹€.

 

κΈ°λ³Έ μƒμ„±μžλŠ” μ•„λž˜μ™€ 같이 μΆ”κ°€ ν•  수 μžˆλ‹€.

ν΄λž˜μŠ€μ΄λ¦„() { }
Card() { }

κ·Έλ ‡λ‹€λ©΄, μ’€ μ „μ˜ μ˜ˆμ‹œ 'new Card()'λΆ€λΆ„μ˜ 'Card()'λŠ” κΈ°λ³Έ μƒμ„±μžκ°€ λœλ‹€.

κΈ°λ³Έ μƒμ„±μžλŠ” λ§€κ°œλ³€μˆ˜λ„, λ‚΄μš©λ„ μ—†λ‹€.

 


3. λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μž

λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μžλŠ”, λ©”μ„œλ“œμ²˜λŸΌ λ§€κ°œλ³€μˆ˜λ₯Ό μ„ μ–Έν•˜μ—¬ 호좜 μ‹œ 값을 λ„˜κ²¨λ°›μ•„ μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” μž‘μ—…μ— μ‚¬μš©ν•  수 μžˆλ‹€.

 

μ˜ˆμ‹œλ₯Ό λ“€μ–΄λ³΄μž, μ•„λž˜μ˜ μ½”λ“œλŠ” μžλ™μ°¨ 클래슀둜 μ •μ˜ν•œ 것이닀, μ„Έκ°œμ˜ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ 두 개의 μƒμ„±μžλ§Œ κ°€μ§€κ³  μžˆλ‹€.

class Car {
	String color;
    String gearType;
    int door;
    
    Car() {}      // κΈ°λ³Έ μƒμ„±μž
    Car(String c, String g, int d) {   // λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μž
    	color = c;
        gearType = g;
        door = d;
    }
}

λ§Œμ•½ Car 객체λ₯Ό 생성할 λ•Œ, κΈ°λ³Έ μƒμ„±μžλ₯Ό μ΄μš©ν•œλ‹€λ©΄, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ“€μ„ λ”°λ‘œ μ΄ˆκΈ°ν™” ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

Car c = new Car();
c.color = "white";
c.gearType = "auto";
c.door = 4;

μ΄λ ‡κ²Œ ν•˜λ‚˜ν•˜λ‚˜ μ΄ˆκΈ°ν™” ν•˜λ©΄, μ½”λ“œκ°€ κΈΈμ–΄μ§€κ³  직관적이지 μ•Šλ‹€.

 

Car c = new Car("white","auto",4);

λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μžλ₯Ό μ‚¬μš©ν•΄ 생성과 λ™μ‹œμ— μ΄ˆκΈ°ν™”λ₯Ό ν•  수 μžˆκ²Œλœλ‹€.

μ΄λ ‡κ²Œ 봀을 λ•ŒλŠ” 훨신 더 직관적이고 μ½”λ“œκ°€ κ°„κ²°ν•΄μ§„λ‹€.

 

κΈ°λ³Έ μƒμ„±μžλ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œμ™€ λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μžλ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œ, λ‚΄μš©μ€ λͺ¨λ‘ κ°™λ‹€.

ν•˜μ§€λ§Œ μ½”λ“œλ₯Ό μž‘μ„± ν•  λ•ŒλŠ” 항상 직관적이고 κ°„κ²°ν•˜κ²Œ μž‘μ„±ν•˜λŠ” 것이 μ’‹λ‹€.

 

 

Q & A

Q. λͺ¨λ“  ν΄λž˜μŠ€μ—λŠ” λ°˜λ“œμ‹œ ν•˜λ‚˜ μ΄μƒμ˜ μƒμ„±μžκ°€ μ •μ˜λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.
λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μžκ°€ ν΄λž˜μŠ€μ— μ„ μ–Έλœ 경우, κΈ°λ³Έ μƒμ„±μžλŠ” 없어도 λ˜λŠ” 것 μ•„λ‹Œκ°€μš”?

A. κΈ°λ³Έ μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 없어도 λœλ‹€!
(μƒμ„±μžλ₯Ό 아무것도 λ§Œλ“€μ§€ μ•ŠμœΌλ©΄ μžλ™μœΌλ‘œ κΈ°λ³Έ μƒμ„±μžκ°€ λ§Œλ“€μ–΄μ§€κ²Œ λ˜λŠ”λ°, ν•˜λ‚˜λΌλ„ λ§€κ°œλ³€μˆ˜κ°€ λ“€μ–΄κ°„ μƒμ„±μžκ°€ μ„ μ–Έλœ 경우 κΈ°λ³Έ μƒμ„±μžκ°€ default둜 μ„€μ •λ˜μ§€ μ•ŠκΈ°λ•Œλ¬Έμ— 보톡 λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μžλ₯Ό λ§Œλ“  λ‹€μŒμ—λŠ” κΈ°λ³Έ μƒμ„±μžλ₯Ό λͺ…μ‹œν•΄μ€λ‹ˆλ‹€.)

 

 


 

λ°˜μ‘ν˜•
728x90
λ°˜μ‘ν˜•