πŸ“‚ JAVA/μ£Όμš” κ°œλ…

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

Amenable 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
을 μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.