ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 좔상 클래슀, Dispatch, final, Object 클래슀
    Android/Java 2021. 1. 18. 23:13
    λ°˜μ‘ν˜•
    • 이 글은 "μžλ°” 온라인 μŠ€ν„°λ””"λ₯Ό κ³΅λΆ€ν•˜μ—¬ μž‘μ„±ν•œ κΈ€μž…λ‹ˆλ‹€.

    좔상 클래슀

    • 좔상 ν΄λž˜μŠ€λŠ” μ—¬λŸ¬κ°€μ§€ 싀체 클래슀의 곡톡적인 뢀뢄을 μΆ”μΆœν•΄ λ§Œλ“€μ–΄μ§„ 좔상적인 ν΄λž˜μŠ€μž…λ‹ˆλ‹€.

    • λŒ€ν•™μƒ ν΄λž˜μŠ€κ°€ 싀체 클래슀라고 κ°€μ •ν•˜λ©΄ μ„œμšΈλŒ€, μ—°μ„ΈλŒ€, κ³ λ €λŒ€ λ‹€μ–‘ν•œ λŒ€ν•™μƒ ν΄λž˜μŠ€κ°€ λ§Œλ“€μ–΄ 질 수 μžˆμŠ΅λ‹ˆλ‹€.

    • ν•˜μ§€λ§Œ, 이런 ν΄λž˜μŠ€λ“€μ—μ„œ 이름, λ‚˜μ΄κ°™μ€ 곡톡적인 속성과 λ©”μ†Œλ“œλ₯Ό μΆ”μΆœν•΄ μ„ μ–Έν•œ 클래슀λ₯Ό μΆ”μƒν΄λž˜μŠ€λΌκ³  ν•©λ‹ˆλ‹€.

    • 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ μœ μ§€λ³΄μˆ˜μ„±μ„ 높이고 톡일성을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    • μ°Έμ‘°(https://limkydev.tistory.com/188)

    public abstract class Student {
        public String name;
        public int age;
    
        public void printInfo(){
            System.out.println("이름은 "+name+"이고 λ‚˜μ΄λŠ” "+age+"μ„Έ μž…λ‹ˆλ‹€");
        }
    
        public abstract void printSchool();
    }

    클래슀 μ•žμ— abstractλ₯Ό 뢙이면 좔상 클래슀λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. 좔상 클래슀의 μ ‘κ·Ό μ œμ–΄μžλŠ” privateλŠ” ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    public class SStudent extends Student{
    
        String school;
    
        public SStudent(String name, int age) {
            this.name = name;
            this.age = age;
            school = "μ„œμšΈλŒ€ν•™κ΅";
        }
    
        @Override
        public void printSchool() {
            System.out.println(school+"에 μž¬ν•™μ€‘μž…λ‹ˆλ‹€");
        }
    }
    public class KStudent extends Student{
        String school;
    
        public KStudent(String name,int age) {
            this.name = name;
            this.age = age;
            school = "κ³ λ €λŒ€ν•™κ΅";
        }
    
        @Override
        public void printSchool() {
            System.out.println(school+"λ₯Ό μ‘Έμ—…ν•˜μ˜€μŠ΅λ‹ˆλ‹€");
        }
    }

    좔상 클래슀인 Student의 곡톡적인 λ³€μˆ˜ name, ageλ₯Ό 가진 싀체 클래슀 SStudent와 KStudentλ₯Ό μƒμ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
    printSchool λ©”μ†Œλ“œλŠ” abstract ν‚€μ›Œλ“œκ°€ 있기 λ•Œλ¬Έμ— κ°•μ œμ μœΌλ‘œ 상속받은 싀체 ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜λ₯Ό ν•΄μ•Όν•©λ‹ˆλ‹€.

    public class Main {
        public static void main(String[] args) {
    
            Student student = new SStudent("홍길동",21);
            Student student1 = new KStudent("μ†μ˜€κ³΅",25);
    
            student.printInfo();
            student1.printInfo();
    
            student.printSchool();
            student1.printSchool();
        }
    }


    λ©”μ†Œλ“œ λ””μŠ€νŒ¨μΉ˜(Method Dispatch)

    정적 λ””μŠ€νŒ¨μΉ˜(Static Dispatch)

    • 컴파일 μ‹œμ μ—, μ»΄νŒŒμΌλŸ¬κ°€ νŠΉμ • λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  것을 ν™•μ‹€νžˆ μ•„λŠ” κ²½μš°μž…λ‹ˆλ‹€.
    • 컴파일 μ‹œ μƒμ„±λ˜λŠ” λ°”μ΄νŠΈ μ½”λ“œμ— 이 정보가 κ·ΈλŒ€λ‘œ 남아 μžˆμŠ΅λ‹ˆλ‹€. 즉 λŸ°νƒ€μž„ 전에 μ‹€ν–‰λ˜λŠ” λ©”μ†Œλ“œκ°€ 미리 κ²°μ •λœλ‹€λŠ” κ°œλ…μž…λ‹ˆλ‹€.
    • μ˜€λ²„λ‘œλ”© λ©”μ†Œλ“œμΈ 경우 두 κ°€μ§€μ˜ λ©”μ†Œλ“œκ°€ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— 이 경우 Static Dispatchμž…λ‹ˆλ‹€.
    • 좔상 클래슀λ₯Ό 상속받은 싀체 ν΄λž˜μŠ€μ—μ„œλŠ” 싀체 클래슀의 레퍼런슀둜 μ„ μ–Έν•˜κ³  μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“ λ‹€λ©΄ 이 μ—­μ‹œλ„ Static Dispatchμž…λ‹ˆλ‹€.

    동적 λ””μŠ€νŒ¨μΉ˜(Dynamic Dispatch)

    • 동적 λ””μŠ€νŒ¨μΉ˜λŠ” μΈν„°νŽ˜μ΄μŠ€, μΆ”μƒν΄λž˜μŠ€λ₯Ό 상속받은 ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜λœ λ©”μ†Œλ“œλ₯Ό 호좜 μ‹œ 컴파일 νƒ€μž„μ΄ μ•„λ‹Œ λŸ°νƒ€μž„μ— ν•΄μ„λ˜λŠ” ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€.
    • 좔상 클래슀λ₯Ό 상속받은 싀체 ν΄λž˜μŠ€κ°€ μžˆμ–΄λ„ 싀체 ν΄λž˜μŠ€κ°€ μ•„λ‹Œ μΆ”μƒν΄λž˜μŠ€λ‘œ 레퍼런슀둜 μ„ μ–Έν•˜κ³  μΈμŠ€ν„΄μŠ€λŠ” 싀체 클래슀둜 λ§Œλ“ λ‹€λ©΄ Dynamic Dispatchμž…λ‹ˆλ‹€.
    • μ°Έκ³ (https://defacto-standard.tistory.com/413)
    public class Main {
        public static void main(String[] args) {
    
            Student student = new SStudent("홍길동",21);
            Student student1 = new KStudent("μ†μ˜€κ³΅",25);
    
            student.printInfo();
            student1.printInfo();
    
            student.printSchool();
            student1.printSchool();
        }
    }

    μœ„ κ²½μš°μ—μ„œ student, student1 μΈμŠ€ν„΄μŠ€λŠ” printSchool λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λ”λΌλ„ 컴파일 μ‹œμ μ—λŠ” λͺ¨λ₯΄κ³  단지 μΆ”μƒν΄λž˜μŠ€μ˜ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€λŠ” κ²ƒλ§Œ μΈμ§€ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
    λŸ°νƒ€μž„ μ‹œμ μ—μ„œμ•Ό 각 μΈμŠ€ν„΄μŠ€μ— ν• λ‹Ήλœ 객체가 무엇인지 ν™•μΈν•˜κ³  λ©”μ†Œλ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.


    final ν‚€μ›Œλ“œ

    • final 클래슀 : final ν‚€μ›Œλ“œκ°€ 클래슀 이름 μ•žμ— 있으면 상속될 수 μ—†μŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

    • final λ©”μ†Œλ“œ : final ν‚€μ›Œλ“œκ°€ λ©”μ†Œλ“œ 이름 μ•žμ— μžˆλ‹€λ©΄ μ˜€λ²„λΌμ΄λ”© ν•  수 μ—†μŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

    • final λ³€μˆ˜ : final λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ μƒμˆ˜λ‘œ λ§Œλ“€κ³  λ³€κ²½ν•  수 μ—†μŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.


    Object 클래슀

    • java.lang은 μžλ°” ν”„λ‘œκ·Έλž¨μ—μ„œ κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” νŒ¨ν‚€μ§€λ‘œ μžλ°” ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ importλ₯Ό ν•˜μ§€ μ•Šμ•„λ„ μžλ™μœΌλ‘œ ν¬ν•¨λ©λ‹ˆλ‹€.

    • 이 νŒ¨ν‚€μ§€ μ•ˆμ— λ“€μ–΄ μžˆλŠ” java.lang.Object ν΄λž˜μŠ€λŠ” μžλ°” API의 λͺ¨λ“  ν΄λž˜μŠ€μ™€ μ‚¬μš©μžκ°€ μ •μ˜ν•œ λͺ¨λ“  클래슀의 μ΅œμƒμœ„ ν΄λž˜μŠ€μž…λ‹ˆλ‹€.

    • java.lang.ObjectλŠ” μžλ™μœΌλ‘œ μƒμ†λ°›κ²Œ λ˜μ–΄ Object ν΄λž˜μŠ€μ— μžˆλŠ” λͺ¨λ“  λ©”μ†Œλ“œμ™€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    • μ°Έμ‘°(https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html)

    λ°˜μ‘ν˜•
Designed by Tistory.