Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable

Amenable's Blog

곡변 λ°˜ν™˜νƒ€μž… (Convariant Return Type)
πŸ“‚ JAVA/μ£Όμš” κ°œλ…

곡변 λ°˜ν™˜νƒ€μž… (Convariant Return Type)

2023. 3. 9. 23:37

1. μ •μ˜ 🌻

  곡변 λ°˜ν™˜νƒ€μž…μ΄λž€ μž¬μ •μ˜ν•œ λ©”μ„œλ“œμ˜ λ°˜ν™˜ νƒ€μž…μ€ μƒμœ„ 클래슀의 λ©”μ„œλ“œκ°€ λ°˜ν™˜ν•˜λŠ” νƒ€μž…μ˜ ν•˜μœ„ νƒ€μž…μ΄ 될 수 μžˆλ‹€λŠ” 것이닀.

  기쑴의 μ˜€λ²„λΌμ΄λ”©μ€ 'λ©”μ„œλ“œμ˜ 이름', '맀개 λ³€μˆ˜μ˜ 개수, νƒ€μž…, μˆœμ„œ', '리턴 νƒ€μž…'이 κ°™μ•„μ•Ό ν–ˆλ‹€. ν•˜μ§€λ§Œ JDK1.5λΆ€ν„° κ³΅λ³€ λ°˜ν™˜νƒ€μž…이 μΆ”κ°€λ˜λ©΄μ„œ μ˜€λ²„라이딩을 ν•  λ•Œ λ‹€λ₯Έ λ¦¬ν„΄ νƒ€μž…을 κ°€μ§ˆ μˆ˜ μžˆκ²Œ λ˜μ—ˆλ‹€. μ—¬κΈ°μ„œ λ‹€λ₯Έ νƒ€μž…μ΄λž€ λΆ€λͺ¨ν΄λž˜μŠ€μ— μ •μ˜λœ λ©”μ„œλ“œμ˜ 리턴 νƒ€μž…μ˜ μ„œλΈŒνƒ€μž…μ„ λ§ν•œλ‹€.

 

2. κ΅¬ν˜„(JAVA) 🌼

  μ˜€λ²„λΌμ΄λ”©μ—μ„œμ˜ λ¦¬ν„΄νƒ€μž…μ€ λΆ€λͺ¨ν΄λž˜μŠ€ 리턴 νƒ€μž…μ˜ μ„œλΈŒνƒ€μž…μ΄λ©΄ λœλ‹€. 이 μ μ„ μœ μ˜ν•΄μ„œ μ½”λ“œλ₯Ό λ³΄μž.

class Parent {
	Parent testMethod() {
		return this;
	}
}

class ChildA extends Parent {
	@Override
	ChildA testMethod() {
		return this;
	}
}

class ChildB extends Parent {
	// κΌ­ μžμ‹ μ˜ νƒ€μž…μ„ 리턴 νƒ€μž…μœΌλ‘œ ν•˜λŠ” 것이 μ•„λ‹Œ
	// λΆ€λͺ¨ 클래슀 리턴 νƒ€μž…μ˜ μ„œλΈŒνƒ€μž…μ΄λ©΄
	// 무엇이든지 κ°€λŠ₯ν•˜λ‹€!!!
	@Override
	ChildA testMethod() {
		return new ChildA();
	}
}

public class Test {
	public static void main(String[] args) {
		Parent parent = new Parent();
		Parent parentReturn = parent.testMethod();
		
		ChildA childA = new ChildA();
		ChildA childAReturn1 = childA.testMethod();
		
		ChildB childB = new ChildB();
		ChildA childANotB = childB.testMethod();
	}
}

 

3. 곡변 λ°˜ν™˜νƒ€μž…μ˜ μž₯점 🌷

1. 번거둜운 ν˜•λ³€ν™˜μ„ 쀄일 수 μžˆλ‹€.

// κΈ°μ‘΄ 방법
Lion copiedLion = (Lion)originalLion.clone();

// 곡변 λ°˜ν™˜νƒ€μž…μ„ μ΄μš©ν•˜λŠ” 방법
Lion copiedLion = originalLion.clone();

  μ΄λŠ” μ½”λ“œμ˜ 가독성, μ‚¬μš©μ„±, μœ μ§€λ³΄μˆ˜μ„±μ— 도움을 μ€€λ‹€.

2. 더 ꡬ체적인 λ°˜ν™˜ μœ ν˜•μ„ κ°€μ§ˆ 수 μžˆλ‹€.

3. ClassCastException을 λ°©μ§€ν•  수 μžˆλ‹€.

  ClassCastExceptionμ΄λž€ 클래슀 κ°„μ˜ ν˜• λ³€ν™˜ 였λ₯˜μ‹œ λ°œμƒν•˜λŠ” λŸ°νƒ€μž„ μ˜ˆμ™Έμ΄λ‹€. 곡변 λ°˜ν™˜νƒ€μž…μ„ μ΄μš©ν•˜λ©΄ 이λ₯Ό λ°©μ§€ν•  수 μžˆλ‹€.

 

ν•΄λ‹Ή 글은
남ꢁ μ„±λ‹˜μ˜ JAVA의 정석,
geeksforgeeks의 Covariant Return Types in Java
을 μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

 

'πŸ“‚ JAVA > μ£Όμš” κ°œλ…' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

JVM λ©”λͺ¨λ¦¬ ꡬ쑰  (0) 2023.03.24
λ³€μˆ˜  (0) 2023.03.21
마컀 μΈν„°νŽ˜μ΄μŠ€ (Marker Interface)  (0) 2023.03.09
Parsing(νŒŒμ‹±) - CSV, XML, JSON  (0) 2023.01.30
μž…μΆœλ ₯(I/O)(2) - 직렬화(Serialization)  (2) 2023.01.29
    'πŸ“‚ JAVA/μ£Όμš” κ°œλ…' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • JVM λ©”λͺ¨λ¦¬ ꡬ쑰
    • λ³€μˆ˜
    • 마컀 μΈν„°νŽ˜μ΄μŠ€ (Marker Interface)
    • Parsing(νŒŒμ‹±) - CSV, XML, JSON
    Amenable
    Amenable
    CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

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