πŸ“Œ Java - μ—…μΊμŠ€νŒ…, λ‹€μš΄μΊμŠ€νŒ…, 좔상 클래슀, μΈν„°νŽ˜μ΄μŠ€

My Pale Blue DotΒ·2025λ…„ 3μ›” 7일
0

JAVA

λͺ©λ‘ 보기
16/35
post-thumbnail

πŸ“… λ‚ μ§œ

2025-03-07

πŸ“ ν•™μŠ΅ λ‚΄μš©

1️⃣ μ—…μΊμŠ€νŒ…(Upcasting)κ³Ό λ‹€μš΄μΊμŠ€νŒ…(Downcasting)

βœ… μ—…μΊμŠ€νŒ…κ³Ό λ‹€μš΄μΊμŠ€νŒ… κ°œλ…

  • μ—…μΊμŠ€νŒ…: ν•˜μœ„ 클래슀 객체λ₯Ό μƒμœ„ 클래슀 μ°Έμ‘° λ³€μˆ˜μ— ν• λ‹Ή (μžλ™ ν˜•λ³€ν™˜)
  • λ‹€μš΄μΊμŠ€νŒ…: μƒμœ„ 클래슀 객체λ₯Ό ν•˜μœ„ 클래슀 μ°Έμ‘° λ³€μˆ˜μ— ν• λ‹Ή (κ°•μ œ ν˜•λ³€ν™˜ ν•„μš”)
  • ν™œμš© λͺ©μ :
    • μ—…μΊμŠ€νŒ…μ„ μ‚¬μš©ν•˜λ©΄ λ‹€μ–‘ν•œ ν•˜μœ„ 클래슀λ₯Ό μƒμœ„ 클래슀 ν•˜λ‚˜λ‘œ 관리할 수 있음.
    • λ‹€μš΄μΊμŠ€νŒ…μ„ ν™œμš©ν•˜μ—¬ μ—…μΊμŠ€νŒ…λœ 객체의 ν™•μž₯된 κΈ°λŠ₯을 μ‚¬μš©ν•  수 있음.

βœ… μ—…μΊμŠ€νŒ…κ³Ό λ‹€μš΄μΊμŠ€νŒ… 예제

package ch12;

class Super {
    int n1;
}

class Sub extends Super {
    int n2;
}

public class C06Up {
    public static void main(String[] args) {
        Super ob1 = new Super();
        ob1.n1 = 10;
        Sub ob2 = new Sub();
        ob2.n1 = 10;
        ob2.n2 = 20;

        // Upcasting (μžλ™ ν˜•λ³€ν™˜)
        Super ob3 = new Sub();
        ob3.n1 = 100;

        // Downcasting (κ°•μ œ ν˜•λ³€ν™˜)
        Sub ob6 = (Sub) ob3;

        System.out.println(ob6);
    }
}

2️⃣ 클래슀 계측을 ν™œμš©ν•œ μ—…μΊμŠ€νŒ…κ³Ό λ‹€μš΄μΊμŠ€νŒ…

βœ… 클래슀 계측 ꡬ쑰

  • A 클래슀 β†’ B, C (ν•˜μœ„ 클래슀)
  • B β†’ D, E
  • C β†’ F, G

βœ… μ—…μΊμŠ€νŒ…κ³Ό λ‹€μš΄μΊμŠ€νŒ…μ„ ν™œμš©ν•œ 예제

package ch12;

class A { int a; public A(int a) { this.a = a; } }

class B extends A { int b; public B(int a, int b) { super(a); this.b = b; } }

class C extends A { int c; public C(int a, int c) { super(a); this.c = c; } }

class D extends B { int d; public D(int a, int b, int d) { super(a, b); this.d = d; } }
class E extends B { int e; public E(int a, int b, int e) { super(a, b); this.e = e; } }
class F extends C { int f; public F(int a, int c, int f) { super(a, c); this.f = f; } }
class G extends C { int g; public G(int a, int c, int g) { super(a, c); this.g = g; } }

public class C07UpDownCatingMain {
    public static void UpDownCastTestFunc(A obj, int... arg) {
        obj.a = arg[0];

        if (obj instanceof B) ((B) obj).b = arg[1];
        if (obj instanceof C) ((C) obj).c = arg[1];

        if (obj instanceof D) ((D) obj).d = arg[2];
        if (obj instanceof E) ((E) obj).e = arg[2];
        if (obj instanceof F) ((F) obj).f = arg[2];
        if (obj instanceof G) ((G) obj).g = arg[2];

        System.out.println(obj);
    }

    public static void main(String[] args) {
        UpDownCastTestFunc(new B(0, 0), 10, 20);
        UpDownCastTestFunc(new D(0, 0, 0), 30, 40, 50);
    }
}

3️⃣ 좔상 ν΄λž˜μŠ€μ™€ 좔상 λ©”μ„œλ“œ

βœ… 좔상 ν΄λž˜μŠ€μ™€ 좔상 λ©”μ„œλ“œ κ°œλ…

  • 좔상 클래슀: abstract ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©, 객체 생성 λΆˆκ°€, ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ 상속 ν›„ κ΅¬ν˜„ ν•„μš”.
  • 좔상 λ©”μ„œλ“œ: λͺΈμ²΄ {}κ°€ μ—†λŠ” λ©”μ„œλ“œ, λ°˜λ“œμ‹œ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ @Override둜 κ΅¬ν˜„.

βœ… 좔상 클래슀 예제

abstract class Animal {
    String name;
    public Animal(String name) { this.name = name; }
    abstract void makeSound();
    void sleep() { System.out.println(name + " is sleeping."); }
}

class Dog extends Animal {
    public Dog(String name) { super(name); }
    @Override
    void makeSound() { System.out.println(name + " says: Woof! Woof!"); }
}

public class AbstractTest {
    public static void main(String[] args) {
        Animal dog = new Dog("Buddy");
        dog.makeSound();
        dog.sleep();
    }
}

4️⃣ μΈν„°νŽ˜μ΄μŠ€

βœ… μΈν„°νŽ˜μ΄μŠ€ κ°œλ…

  • interface ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ •μ˜.
  • λͺ¨λ“  λ©”μ„œλ“œλŠ” 기본적으둜 좔상 λ©”μ„œλ“œ.
  • 닀쀑 μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ κ°€λŠ₯ (implements μ‚¬μš©).

βœ… μΈν„°νŽ˜μ΄μŠ€ 예제

interface Animal {
    void makeSound();
}

class Dog implements Animal {
    @Override
    public void makeSound() { System.out.println("멍멍!"); }
}

public class InterfaceTest {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound();
    }
}

5️⃣ 좔상 클래슀λ₯Ό ν™œμš©ν•œ λ‹¨μœ„ λ³€ν™˜ ν”„λ‘œκ·Έλž¨

βœ… λ‹¨μœ„ λ³€ν™˜μ„ μœ„ν•œ 좔상 클래슀

import java.util.Scanner;

abstract class Converter {
    abstract protected double convert(double src);
    abstract protected String getSrcString();
    abstract protected String getDestString();
    protected double ratio;

    public void run() {
        Scanner scanner = new Scanner(System.in);
        System.out.println(getSrcString()+"을 "+getDestString()+"둜 λ³€ν™˜ν•©λ‹ˆλ‹€.");
        System.out.print(getSrcString()+"을 μž…λ ₯ν•˜μ„Έμš”>> ");
        double val = scanner.nextDouble();
        double res = convert(val);
        System.out.println("λ³€ν™˜ κ²°κ³Ό: "+res+getDestString()+"μž…λ‹ˆλ‹€");
        scanner.close();
    }
}

class Won2Dollar extends Converter {
    public Won2Dollar(double ratio) { this.ratio = ratio; }

    @Override
    protected double convert(double src) { return Math.round(src / ratio); }
    @Override
    protected String getSrcString() { return "원화"; }
    @Override
    protected String getDestString() { return "λ‹¬λŸ¬"; }
}

public class C02Ex {
    public static void main(String[] args) {
        Won2Dollar toDollar = new Won2Dollar(1446);
        toDollar.run();
    }
}

πŸ”₯ 정리

βœ” μ—…μΊμŠ€νŒ…κ³Ό λ‹€μš΄μΊμŠ€νŒ…μœΌλ‘œ λ‹€ν˜•μ„± ν™œμš©
βœ” 좔상 ν΄λž˜μŠ€λŠ” 곡톡 κΈ°λŠ₯ 제곡 + νŠΉμ • λ©”μ„œλ“œ κ΅¬ν˜„ κ°•μ œ
βœ” μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑 κ΅¬ν˜„ κ°€λŠ₯, κ·œμΉ™ μ •μ˜
βœ” 좔상 클래슀λ₯Ό ν™œμš©ν•œ λ‹¨μœ„ λ³€ν™˜ ν”„λ‘œκ·Έλž¨ κ΅¬ν˜„

πŸ”— μ°Έκ³  자료

profile
Here, My Pale Blue.🌏

0개의 λŒ“κΈ€