클래슀 νƒ€μž… μΊμŠ€νŒ…

클래슀 νƒ€μž… μΊμŠ€νŒ…

λΆ€λͺ¨ 클래슀, μžμ‹ 클래슀 μ‚¬μ΄μ˜ 클래슀 νƒ€μž…μ„ λ³€ν™˜ν•˜λŠ” 것

μ’…λ₯˜

ν•­λͺ©
μ—…μΊμŠ€νŒ… (UpCasting)
μžμ‹ 객체λ₯Ό λΆ€λͺ¨ 클래슀 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것 μžλ™ λ³€ν™˜
λ‹€μš΄μΊμŠ€νŒ… (DownCasting)
λΆ€λͺ¨ 객체λ₯Ό μžμ‹ 클래슀 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것 λͺ…μ‹œμ  λ³€ν™˜ ν•„μš”

μ—…μΊμŠ€νŒ… (Up Casting)

μžμ‹ 객체λ₯Ό λΆ€λͺ¨ 클래슀 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것
λ³€μˆ˜λŠ” λΆ€λͺ¨ 클래슀의 μžˆλŠ” λ³€μˆ˜λ§Œ μ ‘κ·Ό κ°€λŠ₯
λ©”μ†Œλ“œλŠ” μžμ‹ 클래슀의 λ©”μ†Œλ“œκ°€ μš°μ„ ν•˜μ—¬ μ‹€ν–‰λœλ‹€.
μ™œ μ—…μΊμŠ€νŒ…μ„ ν•˜λ©΄, λ³€μˆ˜λŠ” λΆ€λͺ¨ κ²ƒλ§Œ, λ©”μ†Œλ“œλŠ” μžμ‹μ„ μš°μ„ ν•΄μ„œ μ ‘κ·Όλ˜λ‚˜μš”?
λ³€μˆ˜λŠ” 정적 바인딩, λ©”μ†Œλ“œλŠ” 동적 바인딩이 이루어지기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

정적 바인딩

컴파일 μ‹œμ μ—μ„œ 연결될 값을 κ²°μ •ν•˜λŠ” 방식
λ³€μˆ˜λŠ” 정적바인딩이 μ μš©λ˜μ„œ μ„ μ–Έν•œ 클래슀 νƒ€μž…μ— λ”°λΌμ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ³€μˆ˜κ°€ 결정이 λœλ‹€.
κ·Έλž˜μ„œ μ—…μΊμŠ€νŒ…μ„ ν•˜λ©΄ λΆ€λͺ¨ 클래슀의 λ³€μˆ˜λ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€.
μžμ‹ ν΄λž˜μŠ€μ— λΆ€λͺ¨ ν΄λž˜μŠ€μ™€ λ™μΌν•œ μ΄λ¦„μ˜ λ³€μˆ˜κ°€ μžˆμ–΄λ„ λΆ€λͺ¨ 클래슀의 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€.

동적 바인딩

μ‹€ν–‰ μ‹œμ μ—μ„œ 연결될 값을 κ²°μ •ν•˜λŠ” 방식
λ©”μ†Œλ“œλŠ” μ‹€ν–‰ μ‹œμ μ—μ„œ μ‹€μ œ 객체 μΈμŠ€ν„΄μŠ€ νƒ€μž…μ— 따라 κ²°μ •λœλ‹€.
κ·Έλž˜μ„œ μ—…μΊμŠ€νŒ…μ„ 해도 μƒμ„±λœ μΈμŠ€ν„΄μŠ€μΈ μžμ‹ 클래슀의 μ˜€λ²„λΌμ΄λ”© 된 λ©”μ†Œλ“œκ°€ μ‹€ν–‰λœλ‹€.
β€’
UpCasting.java
class Person { String name; int age = 10; void work() { System.out.println("일을 ν•©λ‹ˆλ‹€."); } } class Student extends Person { String major; int age = 20; void work() { System.out.println("곡뢀 ν•©λ‹ˆλ‹€."); } } public class UpCasting { public static void main(String[] args) { Person person = new Student(); // μ—λŸ¬ : System.out.println( person.major ); System.out.println( person.age ); person.work(); } }
Java
볡사

λ‹€μš΄μΊμŠ€νŒ… (Down Casting)

λΆ€λͺ¨ 객체λ₯Ό μžμ‹ 클래슀 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것
μ „μ œ 쑰건 : μ—…μΊμŠ€νŒ…
λ‹€μš΄ μΊμŠ€νŒ…μ€ μ—…μΊμŠ€νŒ…λœ 객체만 κ°€λŠ₯ν•˜λ‹€.
β€’
DownCasting.java
class Person { String name; int age = 10; void work() { System.out.println("일을 ν•©λ‹ˆλ‹€."); } } class Student extends Person { String major; int age = 20; void work() { System.out.println("곡뢀 ν•©λ‹ˆλ‹€."); } } public class DownCasting { public static void main(String[] args) { Person person = new Student(); // μ—… μΊμŠ€νŒ… Student student = (Student) person; // λ‹€μš΄ μΊμŠ€νŒ… // μ—λŸ¬ : Student student2 = new Person(); // * μ—…μΊμŠ€νŒ…μ„ μ „μ œν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. System.out.println( student.age ); student.work(); } }
Java
볡사
λ‹€μš΄ μΊμŠ€νŒ…μ„ ν•˜λ©΄, λ³€μˆ˜λ„ μžμ‹ 클래슀의 λ³€μˆ˜, λ©”μ†Œλ“œλ„ μžμ‹ 클래슀의 λ©”μ†Œλ“œλ₯Ό μ ‘κ·Όν•œλ‹€.