Java & Kotlin

[JAVA] 객체 지ν–₯ μ–Έμ–΄2

mangdo 2021. 6. 24. 20:38

🌱 μ ‘κ·Ό μ œμ–΄μž(ν•œμ •μž)

 λ©€λ²„ λ³€μˆ˜μ™€ λ©”μ†Œλ“œμ—λŠ” μ ‘κ·Ό μ œμ–΄μžλ₯Ό 지정할 수 μžˆλ‹€.

 μ ‘κ·Ό μ œμ–΄μžλ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” 객체듀간 관계에 λ”°λΌμ„œ μ ‘κ·Όν•  수 μžˆλŠ” 것과 μ•„λ‹Œ 것, κΆŒν•œμ„ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€. 클래슀 내뢀에 μ„ μ–Έλœ λ°μ΄ν„°μ˜ λΆ€μ μ ˆν•œ μ‚¬μš©μœΌλ‘œλΆ€ν„° λ³΄ν˜Έν•΄μ•Όν•˜λŠ”λ° 이것을 λ°”λ‘œ μΊ‘μŠν™”λΌκ³  ν•œλ‹€. μ ‘κ·Ό μ œμ–΄μžλŠ” μΊ‘μŠν™”λ₯Ό λ•λŠ” 도ꡬ 쀑 ν•˜λ‚˜μ΄λ‹€.

  λ™μΌν•œ 클래슀 같은 νŒ¨ν‚€μ§€ λ‚΄
λͺ¨λ“  클래슀
λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜
μƒμ†λœ 클래슀
λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜
μƒμ†λ˜μ§€ μ•Šμ€ 클래슀
public O O O O
protected O O O X
default O O X X
private O X X X

private : μ–΄λ– ν•œ κ²½μš°μ—λ„ μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•˜λ‹€. ν•΄λ‹Ήν΄λž˜μŠ€ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.

default : λ™μΌν•œ νŒ¨ν‚€μ§€λΌλ©΄ 상속 여뢀에 상관없이 μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.

protected : λ™μΌν•œ νŒ¨ν‚€μ§€μ΄λ©΄ 상속 여뢀에 상관없이 μ‚¬μš©κ°€λŠ₯ν•˜κ³  λ‹€λ₯Έ νŒ¨ν‚€μ§€λΌλ©΄ μƒμ†λœ κ²½μš°μ—λ§Œ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.

public : λͺ¨λ“  ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.

 

 

🌱 좔상 클래슀

 μΆ”상 ν΄λž˜μŠ€λž€ 좔상 λ©”μ†Œλ“œκ°€ 선언될 수 μžˆλŠ” ν΄λž˜μŠ€μ΄λ‹€. 좔상 λ©”μ†Œλ“œλž€ μ„ μ–Έλ§Œ λ˜μ–΄μžˆκ³  κ΅¬ν˜„λΆ€λΆ„μ΄ μ—†λŠ” λ©”μ†Œλ“œμ΄λ‹€. λ‹€μ‹œλ§ν•΄ 리턴 νƒ€μž…, ν•¨μˆ˜ 이름, νŒŒλΌλ―Έν„° 이름은 μ„ μ–Έλ˜μ–΄μžˆμ§€λ§Œ κ΅¬ν˜„λΆ€λΆ„μ€ 아직 μ—†κ³  μƒμ†λ°›λŠ” ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•΄μ•Όν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

 μΌλ°˜ν΄λž˜μŠ€μ™€ 달리 μΆ”μƒν΄λž˜μŠ€λŠ” 직접 객체λ₯Ό 생성할 수 μ—†λ‹€. μžμ‹ν΄λž˜μŠ€λ₯Ό ν†΅ν•΄μ„œλ§Œ κ°€λŠ₯ν•˜λ‹€. μ™œλƒν•˜λ©΄ 아직 μ„ μ–Έλ§Œ ν–ˆμ„ 뿐 κ΅¬ν˜„λ˜μ–΄μžˆμ§€ μ•ŠλŠ” 클래슀이기 λ•Œλ¬Έμ΄λ‹€. 

 

[ μ½”λ“œ : μΆ”μƒν΄λž˜μŠ€ ]

abstract class Bird {
    private int x, y, z;

    void fly(int x, int y, int z) {
        printLocation();
        System.out.println("μ΄λ™ν•©λ‹ˆλ‹€.");
        this.x = x;
        this.y = y;
        if (flyable(z)) {
            this.z = z;
        } else {
            System.out.println("이 μƒˆλŠ” λ‚  수 μ—†μŠ΅λ‹ˆλ‹€");
        }
        printLocation();
    }

    abstract boolean flyable(int z);

    public void printLocation() {
        System.out.println("ν˜„μž¬ μœ„μΉ˜ (" + x + ", " + y + ", " + z + ")");
    }
}

class Pigeon extends Bird {
    @Override
    boolean flyable(int z) {
        return true;
    }
}

class Peacock extends Bird {
    @Override
    boolean flyable(int z) {
        return false;
    }
}

public class Main {
    public static void main(String[] args) {
        Bird pigeon = new Pigeon();
        Bird peacock = new Peacock();
        // Bird brid = new Brid() -> λΆˆκ°€λŠ₯
        
        System.out.println("-- λΉ„λ‘˜κΈ° --");
        pigeon.fly(1, 1, 3);
        System.out.println("-- κ³΅μž‘μƒˆ --");
        peacock.fly(1, 1, 3);
        System.out.println("-- λΉ„λ‘˜κΈ° --");
        pigeon.fly(3, 3, 30000);
    }
}

좜λ ₯κ²°κ³Ό

 

🌱 μΈν„°νŽ˜μ΄μŠ€

  μΈν„°νŽ˜μ΄μŠ€λŠ” 좔상 ν΄λž˜μŠ€λ³΄λ‹€ λ”μš± μ™„λ²½ν•œ 좔상화λ₯Ό μ œκ³΅ν•œλ‹€. μΆ”μƒν΄λž˜μŠ€λŠ” 좔상 λ©”μ†Œλ“œ 외에 멀버 λ³€μˆ˜λ‚˜ 일반 λ©”μ†Œλ“œλ₯Ό κ°€μ§ˆ 수 μžˆμ§€λ§Œ, μΈν„°νŽ˜μ΄μŠ€λŠ” 좔상 λ©”μ†Œλ“œμ™€ μƒμˆ˜λ§Œ κ°€μ§ˆ 수 μžˆλ‹€. 또 μΆ”μƒν΄λž˜μŠ€μ™€λŠ” λ‹€λ₯΄κ²Œ 닀쀑 상속이 κ°€λŠ₯ν•˜λ‹€. κ·Έλž˜μ„œ 주둜 μΆ”μƒν΄λž˜μŠ€λŠ” 클래슀λ₯Ό 상속받아 이용과 ν™•μž₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜κ³ , μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„ν•˜λ €κ³  ν•˜λŠ” κ°μ²΄λ“€μ˜ λ™μž‘μ„ λͺ…μ„Έν•˜λŠ”λ° μ‚¬μš©λœλ‹€. 

 

[ μ½”λ“œ : μΈν„°νŽ˜μ΄μŠ€ ]

interface Bird {
    void fly(int x, int y, int z);
}

class Pigeon implements Bird{
    private int x,y,z;

    @Override
    public void fly(int x, int y, int z) {
        printLocation();
        System.out.println("λ‚ μ•„κ°‘λ‹ˆλ‹€.");
        this.x = x;
        this.y = y;
        this.z = z;
        printLocation();
    }
    public void printLocation() {
        System.out.println("ν˜„μž¬ μœ„μΉ˜ (" + x + ", " + y + ", " + z + ")");
    }
}

public class Main {
    public static void main(String[] args) {
        Bird bird = new Pigeon();
        // Bird bird1 = new Bird(); : λΆˆκ°€λŠ₯
        bird.fly(1, 2, 3);
        // bird.printLocation(); : λΆˆκ°€λŠ₯
    }
}

좜λ ₯κ²°κ³Ό

 

 

좜처

처음 μ‹œμž‘ν•˜λŠ” JAVA ν”„λ‘œκ·Έλž˜λ°(김좩석 μ €) 

슀파λ₯΄νƒ€ μ½”λ”© 클럽 μžλ°” κ°•μ˜