[JAVA] μƒμ„±μž(Constructor) / final ν‚€μ›Œλ“œ

2023. 2. 7. 20:05Β·Develop/JAVA

 

μƒμ„±μž(Constructor)

 

 

μƒμ„±μžλŠ” new μ—°μ‚°μžλ₯Ό ν†΅ν•΄μ„œ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ λ°˜λ“œμ‹œ 호좜이 되고 제일 λ¨Όμ € μ‹€ν–‰λ˜λŠ” μΌμ’…μ˜λ©”μ†Œλ“œ

 

(ν•˜μ§€λ§Œ λ©”μ†Œλ“œμ™€λŠ” λ‹€λ₯΄λ‹€.)

 

μƒμ„±μžλŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(ν•„λ“œ κ°’ λ“±)λ₯Ό μ΄ˆκΈ°ν™” μ‹œν‚€λŠ” 역할을 ν•œλ‹€. 

 

 

 

 

μƒμ„±μžλ₯Ό μ„ μ–Έν•˜λŠ” 방법은 μœ„μ— λ‚΄μš©κ³Ό κ°™λ‹€. 

 

ν΄λž˜μŠ€λΌλŠ” 뢀뢄은 μƒμ„±μžλ₯Ό μ •μ˜ν•˜λŠ” ν΄λž˜μŠ€μ˜ 이름과 λ™μΌν•˜κ²Œ μ μ–΄μ€˜μ•Ό ν•œλ‹€. 

 

λΉ¨κ°„μƒ‰μœΌλ‘œ ν‘œμ‹œν•œ 뢀뢄은 ν•„μˆ˜λ‘œ 적어야 ν•˜λŠ” λ‚΄μš©μ€ μ•„λ‹ˆλ‹€.

 

 

λ©”μ„œλ“œλͺ…이 클래슀λͺ…κ³Ό λ™μΌν•˜κ³  리턴 μžλ£Œν˜•μ„ μ •μ˜ν•˜μ§€ μ•ŠλŠ” λ©”μ„œλ“œλ₯Ό μƒμ„±μž(Constructor)라고 ν•œλ‹€.

 

μƒμ„±μžμ˜ κ·œμΉ™

  1. 클래슀λͺ…κ³Ό λ©”μ„œλ“œλͺ…이 λ™μΌν•˜λ‹€.
  2. λ¦¬ν„΄νƒ€μž…μ„ μ •μ˜ν•˜μ§€ μ•ŠλŠ”λ‹€. (void도 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.)

μƒμ„±μžλŠ” 객체가 생성될 λ•Œ ν˜ΈμΆœλœλ‹€.

 

즉, μƒμ„±μžλŠ” λ‹€μŒκ³Ό 같이 new ν‚€μ›Œλ“œκ°€ μ‚¬μš©λ  λ•Œ ν˜ΈμΆœλœλ‹€.

 

 

public class ConstructorEx01 {
// public ConstructorEx01(){ } // Default Constructor μžλ™ 생성

    public static void main(String[] args) {
        ConstructorEx01 ce = new ConstructorEx01(); // μΈμŠ€ν„΄μŠ€ 생성 및 μƒμ„±μž 호좜
    }

 

클래슀λ₯Ό μ •μ˜ν•  λ•Œ μƒμ„±μžλ₯Ό μƒλž΅ν•˜λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μ μœΌλ‘œ κΈ°λ³Έ μƒμ„±μž(Default Constructor)λ₯Ό 생성

 

 

public class ConstructorEx03 {
    public ConstructorEx03(){
        System.out.println("μƒμ„±μž 호좜 성곡");
    }
    public ConstructorEx03(String a){ // a = μ‚¬μš©μž μ •μ˜
        System.out.println(a + " μƒμ„±μž 호좜 성곡");
    }

    public static void main(String[] args) {
        ConstructorEx03 ce = new ConstructorEx03("μ‚¬μš©μž μ •μ˜"); // λ§€κ°œλ³€μˆ˜λ₯Ό κ°–λŠ” μƒμ„±μž 호좜
        ConstructorEx03 ce2 = new ConstructorEx03(); // κΈ°λ³Έ μƒμ„±μž 호좜
    }
}

 

μƒμ„±μžμ˜ λ§€κ°œλ³€μˆ˜λ₯Ό λ‹€λ₯΄κ²Œ μ§€μ •ν•˜μ—¬ μ •μ˜ν•˜λŠ” 것을 μƒμ„±μž μ˜€λ²„λ‘œλ”©

 

 

 

final ν‚€μ›Œλ“œ 

 

final ν‚€μ›Œλ“œλŠ” λ³€μˆ˜(variable), λ©”μ„œλ“œ(method), λ˜λŠ” 클래슀(class)에 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

 

final ν‚€μ›Œλ“œλ₯Ό 뢙이면 λ¬΄μ–Έκ°€λ₯Ό μ œν•œν•œλ‹€λŠ” 의미

 

λ³€μˆ˜(variable)

λ³€μˆ˜μ— final을 뢙이면 이 λ³€μˆ˜λŠ” μˆ˜μ •ν•  수 μ—†λ‹€λŠ” 의미

 

μˆ˜μ •λ  수 μ—†κΈ° λ•Œλ¬Έμ— μ΄ˆκΈ°ν™” 값은 ν•„μˆ˜μ μž…λ‹ˆλ‹€. λ§Œμ•½μ— κ°μ²΄μ•ˆμ˜ λ³€μˆ˜λΌλ©΄ μƒμ„±μž μ΄ˆκΈ°ν™”κΉŒμ§€λŠ” ν—ˆμš©

 

λ©”μ„œλ“œ(method)

λ©”μ„œλ“œμ— final을 뢙이면 overrideλ₯Ό μ œν•œ

상속 받은 ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό μˆ˜μ •ν•΄μ„œ μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λ„둝 ν•  수 μžˆλŠ”κ²ƒμ΄ λ©”μ„œλ“œμ— final을 λΆ™μ΄λŠ” 것

 

 

클래슀(Class)

final ν‚€μ›Œλ“œλ₯Ό ν΄λž˜μŠ€μ— 뢙이면 μƒμ† λΆˆκ°€λŠ₯ 클래슀

λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ μƒμ†ν•˜μ—¬ μž¬μ •μ˜λ₯Ό ν•  수 μ—†λŠ” κ²ƒμž…λ‹ˆλ‹€

 


 

μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”

 

클래슀λ₯Ό κ°€μ§€κ³  κ°μ²΄λ₯Ό μƒμ„±ν•˜λ©΄, ν•΄λ‹Ή κ°μ²΄λŠ” λ©”λͺ¨λ¦¬μ— μ¦‰μ‹œ μƒμ„±λ©λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ μƒμ„±λœ κ°μ²΄λŠ” λͺ¨λ“  μΈμŠ€ν„΄μŠ€ λ³€μˆ˜κ°€ 아직 μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ μƒνƒœμž…λ‹ˆλ‹€.

 

μƒμ„±μž(constructor)

 

public class OrderServiceImpl implements OrderService {

    private final MemberRepository memberRepository;
    private  final DiscountPolicy discountPolicy;
    
    public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }

 

객체의 생성과 λ™μ‹œμ— μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ›ν•˜λŠ” κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•  수 μžˆλŠ” λ©”μ†Œλ“œ

 

μƒμ„±μž(constructor)의 이름은 ν•΄λ‹Ή 클래슀의 이름과 κ°™μ•„μ•Ό ν•©λ‹ˆλ‹€.

 

μ΄λŸ¬ν•œ μƒμ„±μžλŠ” λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ κ°€μ§‘λ‹ˆλ‹€.

 

 

1. μƒμ„±μžλŠ” λ°˜ν™˜κ°’이 μ—†μ§€λ§Œ, λ°˜ν™˜ νƒ€μž…μ„ voidν˜•μœΌλ‘œ μ„ μ–Έν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

2. μƒμ„±μžλŠ” μ΄ˆκΈ°ν™”λ₯Ό μœ„ν•œ 데이터λ₯Ό 인수둜 μ „달받을 수 μžˆμŠ΅λ‹ˆλ‹€.

 

3. κ°μ²΄λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” 방법이 μ—¬λŸ¬ 개 μ‘΄μž¬ν•  κ²½μš°μ—λŠ” ν•˜λ‚˜μ˜ ν΄λž˜μŠ€κ°€ μ—¬λŸ¬ 개의 μƒμ„±μžλ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

    즉, μƒμ„±μžλ„ ν•˜λ‚˜μ˜ λ©”μ†Œλ“œμ΄λ―€λ‘œ, λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©μ΄ κ°€λŠ₯ν•˜λ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

 

 

λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©(overloading) : κ°™μ€ μ΄λ¦„μ˜ λ©”μ†Œλ“œλ₯Ό μ€‘λ³΅ν•˜μ—¬ μ •μ˜ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

 

  λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜λ‚˜ νƒ€μž…μ„ λ‹€λ₯΄κ²Œ ν•˜λ©΄, ν•˜λ‚˜μ˜ μ΄λ¦„μœΌλ‘œ λ©”μ†Œλ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

μƒμ„±μžμ˜ 호좜

 

μžλ°”μ—μ„œλŠ” new ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ κ°μ²΄λ₯Ό 생성할 λ•Œ μžλ™μœΌλ‘œ μƒμ„±μžκ°€ ν˜ΈμΆœλ©λ‹ˆλ‹€.

 

 


 

 

"μƒμ„±μž μ£Όμž…μ€ 호좜 μ‹œμ μ— 호좜되고 νŒŒλΌλ―Έν„°κ°€ μ΄ˆκΈ°ν™”λ˜λ―€λ‘œ final이 μ‚¬μš©κ°€λŠ₯ν•˜μ§€λ§Œ,

 

setterλŠ” 객체가 μƒμ„±λœ λ‹€μŒμ— 호좜 λ° μ΄ˆκΈ°ν™”λ˜λ―€λ‘œ final을 μ‚¬μš©ν•  수 μ—†λ‹€."

 

final ν‚€μ›Œλ“œλŠ” κ°„λ‹¨νžˆ λ§ν•˜λ©΄ 멀버 λ³€μˆ˜λ₯Ό 'μƒμˆ˜'(const)둜 λ§Œλ“€κ² λ‹€λŠ” λœ»μž…λ‹ˆλ‹€.

 

λ³€μˆ˜μ˜ κ²½μš°λŠ” κ·Έλ ‡κ³  λ©”μ„œλ“œμ— λΆ™λŠ” final은 μž¬μ •μ˜κ°€ λΆˆκ°€λŠ₯, ν΄λž˜μŠ€μ— λΆ™λŠ” final은 상속 λΆˆκ°€λŠ₯ λ“±μœΌλ‘œ μ˜λ―Έκ°€ λ‹¬λΌμ§‘λ‹ˆλ‹€.

 

 

μƒμˆ˜λŠ” ν•œλ²ˆ 값을 ν• λ‹Ήν•˜λ©΄, λ‹€μ‹œ κ·Έ 값을 λ³€κ²½ν•  수 μ—†μŒμ„ λ§ν•©λ‹ˆλ‹€.

 

κ·Έλž˜μ„œ μžλ°”μ—μ„œλŠ” μƒμˆ˜λŠ” μ„ μ–Έκ³Ό λ™μ‹œμ— 값을 ν• λ‹Ήν•˜λ„λ‘ μ œν•œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 

 

private final int score = 0;

 

 

 

κ·ΈλŸ¬λ‚˜ μ„ μ–Έκ³Ό λ™μ‹œμ— 값을 ν• λ‹Ήν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” μ˜ˆμ™Έκ°€ μžˆλŠ”λ°, μƒμ„±μžμ—μ„œ μƒμˆ˜λ₯Ό μ΄ˆκΈ°ν™” ν•  λ•Œ μž…λ‹ˆλ‹€.

 

μƒμ„±μžλŠ” 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ 'λ°˜λ“œμ‹œ' 거쳐야 ν•˜λŠ” 과정이고,

 

μ—¬κΈ°μ„œ μƒμˆ˜κ°’을 μ΄ˆκΈ°ν™”λ₯Ό ν•˜κ³  μžˆλ‹€λ©΄ μ΄λŠ” 'ν™•μ‹€νžˆ μƒμˆ˜κ°€ μ΄ˆκΈ°ν™” 됨을 보μž₯'ν•©λ‹ˆλ‹€.

 

κ·Έλž˜μ„œ 이런 κ²½μš°λŠ” μ»΄νŒŒμΌμ„ ν—ˆκ°€ ν•©λ‹ˆλ‹€.

 

private final int score;

public SomeClass(int score) {

    this.score = score;

}

 

 

setter둜 멀버 λ³€μˆ˜λ₯Ό μ„€μ •ν•œλ‹€λŠ” 것은 κ°μ²΄κ°€ μƒμ„±λ˜λŠ” 과정이 λͺ¨λ‘ λλ‚œ 이후에

 

setter λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ λ©€λ²„ λ³€μˆ˜μ˜ 값을 ν• λ‹Ήν•˜κ² λ‹€λŠ” λœ»μž…λ‹ˆλ‹€.

 

 

λ§Œμ•½ 이 κ°μ²΄μ˜ 멀버 λ³€μˆ˜μ€‘ μƒμˆ˜κ°€ μžˆμ„κ²½μš°, μƒμˆ˜κ°€ 생성은 λ˜μ—ˆμœΌλ‚˜ μ–Έμ œ μ΄ˆκΈ°ν™” 될지λ₯Ό μ»΄νŒŒμΌλŸ¬κ°€ μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€.

 

κ·Έλž˜μ„œ 이런 경우 final ν‚€μ›Œλ“œλ₯Ό μ“°μ§€ λͺ»ν•˜λ„둝 μ»΄νŒŒμΌλŸ¬κ°€ λ§‰μŠ΅λ‹ˆλ‹€.

 

 

 

 

 

 

 

https://wikidocs.net/281

 

05-06 μƒμ„±μž

μ΄λ²ˆμ—λŠ” 클래슀의 μƒμ„±μž(Constructor)에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž. [TOC] ## μƒμ„±μž(Constructor) λ‹€μŒ ν΄λž˜μŠ€λ“€μ€ 이전 챕터듀을 μ§„ν–‰ν•˜λ©° λ§Œλ“  ν΄λž˜μŠ€λ“€μ΄…

wikidocs.net

[좜처] [JAVA/μžλ°”] μƒμ„±μž(Constructor)와 μ΄ˆκΈ°ν™”|μž‘μ„±μž JOKER

 

JOKER's ROOM : 넀이버 λΈ”λ‘œκ·Έ

μ½”λ”©, AI, IT, ν”„λ‘œκ·Έλž¨ 정보 곡유 μ„œμ΄μΆ” ν™˜μ˜

blog.naver.com

 

https://www.tcpschool.com/java/java_methodConstructor_constructor

 

μ½”λ”©κ΅μœ‘ ν‹°μ”¨ν”ΌμŠ€μΏ¨

4μ°¨μ‚°μ—…ν˜λͺ…, μ½”λ”©κ΅μœ‘, μ†Œν”„νŠΈμ›¨μ–΄κ΅μœ‘, μ½”λ”©κΈ°μ΄ˆ, SWμ½”λ”©, κΈ°μ΄ˆμ½”λ”©λΆ€ν„° μžλ°” 파이썬 λ“±

tcpschool.com

 

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)

'Develop > JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[JAVA] μ˜ˆμ™Έμ²˜λ¦¬ (Exception)  (0) 2023.01.20
JAVA / λ°°μ—΄(Array) 와 리슀트(List) 의 차이 / μ œλ„€λ¦­μŠ€(Generics)  (1) 2023.01.20
(0) . JAVA ν•™μŠ΅ ν™˜κ²½ κ΅¬μΆ•ν•˜κΈ° / JAVA μ–Έμ–΄μ˜ νŠΉμ§•  (0) 2023.01.07
'Develop/JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [JAVA] μ˜ˆμ™Έμ²˜λ¦¬ (Exception)
  • JAVA / λ°°μ—΄(Array) 와 리슀트(List) 의 차이 / μ œλ„€λ¦­μŠ€(Generics)
  • (0) . JAVA ν•™μŠ΅ ν™˜κ²½ κ΅¬μΆ•ν•˜κΈ° / JAVA μ–Έμ–΄μ˜ νŠΉμ§•
hello_u
hello_u
  • hello_u
    😜
    hello_u
  • 전체
    였늘
    μ–΄μ œ
    • 😜 (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring μž…λ¬Έ (20)
        • Spring κΈ°λ³Έ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA κΈ°λ³Έ (16)
        • Spring JPA ν™œμš© (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp 기초 (44)
        • 파이썬 μ½”λ”©ν…ŒμŠ€νŠΈ (64)
        • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • μ»΄ν“¨ν„°μΌλ°˜ (3)
        • 운영체제 (3)
        • λ°μ΄ν„°λ² μ΄μŠ€ (0)
        • 정보톡신 (1)
        • 자료ꡬ쑰 (1)
        • μ†Œν”„νŠΈμ›¨μ–΄ 곡학 (1)
        • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (0)
        • μ΅œμ‹  λ””μ§€ν„Έ, μΌλ°˜μƒμ‹ (0)
      • 자격증 (41)
        • μ •λ³΄λ³΄μ•ˆκΈ°μ‚¬ (9)
        • μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ (22)
        • λ¦¬λˆ…μŠ€λ§ˆμŠ€ν„° 1κΈ‰ (3)
        • SQLD (7)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
hello_u
[JAVA] μƒμ„±μž(Constructor) / final ν‚€μ›Œλ“œ
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”