Leveraging Programming Languages: Java Lang.

m_ngyeongยท2025๋…„ 4์›” 7์ผ
0
post-thumbnail

10. Leveraging Programming Languages


Java Lang.

โœ… ์˜ค๋ฒ„๋ผ์ด๋”ฉ(์žฌ์ •์˜)๊ณผ ์—…์บ์ŠคํŒ…

class Parent {
    void show() {
        System.out.println("Parent");
    }
}

class Child extends Parent {
    void show() {
        System.out.println("Child");
    }
}

public class Test1 {
    public static void main(String[] args) {
        Parent obj = new Child();
        obj.show();
    }
}

๐Ÿ–๏ธ Child
ํ•ด์„ค: Parent obj = new Child(); ์ƒํƒœ์—์„œ obj.show() ํ˜ธ์ถœ โ†’ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ Child์˜ show() ์‹คํ–‰

โœ… ์˜ค๋ฒ„๋กœ๋”ฉ(์„œ๋กœ ๋‹ค๋ฅธ ์ธ์ˆ˜)

class Overload {
    void print(int a) {
        System.out.println("int");
    }
    
    void print(double a) {
        System.out.println("double");
    }
}

public class Test2 {
    public static void main(String[] args) {
        Overload obj = new Overload();
        obj.print(10.5f);
    }
}

๐Ÿ–๏ธ double
ํ•ด์„ค: 10.5f์€ float์ด์ง€๋งŒ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๊ณ , ์ž๋™ ํ˜•๋ณ€ํ™˜์œผ๋กœ double ๋ฒ„์ „ ํ˜ธ์ถœ๋จ

โŒ ๋ฉ”์„œ๋“œ ํ•˜์ด๋”ฉ vs ์˜ค๋ฒ„๋ผ์ด๋”ฉ

class A {
    static void hello() {
        System.out.println("Hello from A");
    }
}

class B extends A {
    static void hello() {
        System.out.println("Hello from B");
    }
}

public class Test3 {
    public static void main(String[] args) {
        A obj = new B();
        obj.hello();
    }
}

๐Ÿ–๏ธ Hello from A
ํ•ด์„ค: static ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค ํƒ€์ž…์ด ์•„๋‹ˆ๋ผ ์ฐธ์กฐ ๋ณ€์ˆ˜ ํƒ€์ž… ๊ธฐ์ค€์œผ๋กœ ํ˜ธ์ถœ๋จ โ†’ A obj = new B(); ์ด๋ฏ€๋กœ A.hello() ํ˜ธ์ถœ
๐Ÿ™Œ ํ‹€๋ฆฐ ์ด์œ : static์€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ์•„๋‹Œ ํ•˜์ด๋”ฉ์ด๋ฉฐ, ๋™์  ๋ฐ”์ธ๋”ฉ์ด ์ ์šฉ๋˜์ง€ ์•Š์Œ

โœ… equals() vs ==

public class Test4 {
    public static void main(String[] args) {
        String s1 = new String("hello");
        String s2 = new String("hello");

        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
    }
}

๐Ÿ–๏ธ
false
true
ํ•ด์„ค:

  • == โ†’ ์ฃผ์†Œ ๋น„๊ต (false),
  • equals() โ†’ ๋ฌธ์ž์—ด ๋‚ด์šฉ ๋น„๊ต (true)

โœ… ์˜ค๋ฒ„๋ผ์ด๋”ฉ vs ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ˆจ๊ธฐ๊ธฐ

class Super {
    String name = "Super";

    String getName() {
        return name;
    }
}

class Sub extends Super {
    String name = "Sub";

    String getName() {
        return name;
    }
}

public class Test5 {
    public static void main(String[] args) {
        Super obj = new Sub();
        System.out.println(obj.name);
        System.out.println(obj.getName());
    }
}

๐Ÿ–๏ธ
Super
Sub
ํ•ด์„ค: obj.name์€ ๋ณ€์ˆ˜ ์ˆจ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— Super ์ถœ๋ ฅ,
getName()์€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ Sub ์ชฝ ์‹คํ–‰

โŒ ์˜ค๋ฒ„๋กœ๋”ฉ ํ•ด์„ ์ˆœ์„œ

class Demo {
    void process(Object o) {
        System.out.println("Object");
    }

    void process(String s) {
        System.out.println("String");
    }
}

public class Test6 {
    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.process(null);
    }
}

๐Ÿ–๏ธ String
ํ•ด์…œ: ์˜ค๋ฒ„๋กœ๋”ฉ์€ ๊ฐ€์žฅ ๊ตฌ์ฒด์ ์ธ ํƒ€์ž… ์šฐ์„ !
null์€ Object, String ๋ชจ๋‘์— ํ•ด๋‹นํ•˜์ง€๋งŒ, String์ด ๋” ๊ตฌ์ฒด์ ์ด๋ฏ€๋กœ ์„ ํƒ๋จ
โ— ํ‹€๋ฆฐ ์ด์œ : ์˜ค๋ฒ„๋กœ๋”ฉ ํ•ด์„ ์‹œ "๋” ๊ตฌ์ฒด์ ์ธ ํƒ€์ž… ์šฐ์„ " ์ด๋ž€ ๊ทœ์น™์„ ๋†“์นจ

โœ… ์—…์บ์ŠคํŒ…๊ณผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ

class Animal {
    void speak() {
        System.out.println("Animal speaks");
    }
}

class Dog extends Animal {
    void speak() {
        System.out.println("Dog barks");
    }

    void wagTail() {
        System.out.println("Dog wags tail");
    }
}

public class Test7 {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.speak();
        // a.wagTail(); // ์ปดํŒŒ์ผ ์—๋Ÿฌ
    }
}

๐Ÿ–๏ธ Dog barks
ํ•ด์„ค: Animal a = new Dog(); โ†’ a.speak() ํ˜ธ์ถœ ์‹œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ Dog์˜ speak() ํ˜ธ์ถœ๋จ

โœ… equals ์˜ค๋ฒ„๋ผ์ด๋”ฉ

class Person {
    String name;

    Person(String name) {
        this.name = name;
    }

    public boolean equals(Object o) {
        if (o instanceof Person) {
            return this.name.equals(((Person) o).name);
        }
        return false;
    }
}

public class Test8 {
    public static void main(String[] args) {
        Person p1 = new Person("John");
        Person p2 = new Person("John");
        System.out.println(p1 == p2);      // Line A
        System.out.println(p1.equals(p2)); // Line B
    }
}

๐Ÿ–๏ธ
false
true

๐Ÿ”Ž Line A: p1 == p2

  • ==๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’์„ ๋น„๊ตํ•ด.
  • p1๊ณผ p2๋Š” new ํ‚ค์›Œ๋“œ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ์ƒ์„ฑ๋๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ๊ฐ€ ๋‹ค๋ฆ„.
  • ๋”ฐ๋ผ์„œ ๊ฒฐ๊ณผ๋Š”: โœ… false

๐Ÿ”Ž Line B: p1.equals(p2)

  • equals() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์ˆœํžˆ ์ฐธ์กฐ๊ฐ’์ด ์•„๋‹Œ ๋‚ด์šฉ ๋น„๊ต๋ฅผ ํ•ด.
  • this.name.equals(((Person) o).name) โ†’ ์ฆ‰ p1.name.equals(p2.name)
  • ๋‘˜ ๋‹ค "John"์ด๋‹ˆ๊นŒ ๊ฒฐ๊ณผ๋Š”: โœ… true

โœ… ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ ๋ฉ”์„œ๋“œ์™€ ์ƒ์„ฑ์ž ์ˆœ์„œ

class Base {
    Base() {
        print();
    }

    void print() {
        System.out.println("Base");
    }
}

class Derived extends Base {
    int num = 10;

    void print() {
        System.out.println("Derived: " + num);
    }
}

public class Test9 {
    public static void main(String[] args) {
        new Derived();
    }
}

๐Ÿ–๏ธ Derived: 10
ํ•ด์„ค: Derived ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์‹œ, Base ์ƒ์„ฑ์ž ๋‚ด๋ถ€์—์„œ print() ํ˜ธ์ถœ
โ†’ Derived.print() ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋จ โ†’ num์€ ์ด๋ฏธ ์ดˆ๊ธฐํ™”๋œ ์ƒํƒœ โ†’ 10

โŒ final, static, ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ˜ผํ•ฉ

class One {
    final void show() {
        System.out.println("One");
    }

    static void greet() {
        System.out.println("Static One");
    }
}

class Two extends One {
    // void show() {} // ์ปดํŒŒ์ผ ์—๋Ÿฌ: final ๋ฉ”์„œ๋“œ๋Š” ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ถˆ๊ฐ€

    static void greet() {
        System.out.println("Static Two");
    }
}

public class Test10 {
    public static void main(String[] args) {
        One o = new Two();
        o.show();
        o.greet();
    }
}

๐Ÿ–๏ธ
One
Static One
ํ•ด์„ค:

  • show()๋Š” final โ†’ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ถˆ๊ฐ€ โ†’ One์˜ ๋ฉ”์„œ๋“œ ์‹คํ–‰๋จ (O)
  • greet()๋Š” static โ†’ ์ฐธ์กฐ ํƒ€์ž… ๊ธฐ์ค€์œผ๋กœ ํ˜ธ์ถœ โ†’ One o = new Two(); โ†’ One.greet() ์‹คํ–‰๋จ โ†’ โŒ Static One์ด ๋งž๋Š” ์ถœ๋ ฅ
profile
สšศ‰ษž

0๊ฐœ์˜ ๋Œ“๊ธ€