nyximos.log

[Java] ์ƒ์† ๋ณธ๋ฌธ

Programming/JAVA

[Java] ์ƒ์†

nyximos 2022. 8. 12. 19:01

๐Ÿ‘ฉ‍๐Ÿš€ ๋ชฉํ‘œ

์ž๋ฐ”์˜ Class์— ๋Œ€ํ•ด ํ•™์Šตํ•˜์„ธ์š”

๐Ÿ‘ฉ‍๐Ÿ’ป ํ•™์Šตํ•  ๊ฒƒ

  • ์ž๋ฐ” ์ƒ์†์˜ ํŠน์ง•
  • super ํ‚ค์›Œ๋“œ
  • ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
  • ๋‹ค์ด๋‚˜๋ฏน ๋ฉ”์†Œ๋“œ ๋””์ŠคํŒจ์น˜ (Dynamic Method Dispatch)
  • ์ถ”์ƒ ํด๋ž˜์Šค
  • final ํ‚ค์›Œ๋“œ
  • Object ํด๋ž˜์Šค

 

 

 

๐Ÿ‘ช ์ž๋ฐ” ์ƒ์†์˜ ํŠน์ง•

๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ

์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š๋”๋ผ๋„ ๊ธฐ์กด ํด๋ž˜์Šค์˜ ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ƒ์†์˜ ์žฅ์ 

  • ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ ↑
  • ์ฝ”๋“œ ์ค‘๋ณต ์ œ๊ฑฐ
  • ํ”„๋กœ๊ทธ๋žจ ์ƒ์‚ฐ์„ฑ ↑
  • ์œ ์ง€๋ณด์ˆ˜์„ฑ ↑

 

class ํ•˜์œ„ํด๋ž˜์Šค extends ์ƒ์œ„ํด๋ž˜์Šค{

}
class Parent { }

class Child extends Parent {

}

 

๐Ÿ“Œ ์ƒ์œ„ ํด๋ž˜์Šค · ๋ถ€๋ชจ/์กฐ์ƒ ํด๋ž˜์Šค · ์Šˆํผํด๋ž˜์Šค

์ƒ์†ํ•ด์ฃผ๋Š” ํด๋ž˜์Šค

 

๐Ÿ“Œ ํ•˜์œ„ ํด๋ž˜์Šค · ์ž์‹/์ž์† ํด๋ž˜์Šค · ์„œ๋ธŒํด๋ž˜์Šค

๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ํŒŒ์ƒ๋œ ํด๋ž˜์Šค

์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๋ฉค๋ฒ„๋ฅผ ์ƒ์† ๋ฐ›๋Š”๋‹ค. (์ƒ์„ฑ์ž์™€ ์ดˆ๊ธฐํ™” ๋ธ”๋Ÿญ์€ ์ƒ์†๋˜์ง€ ์•Š๋Š”๋‹ค.)

์ƒˆ๋กœ์šด ์ฝ”๋“œ๊ฐ€ ์ถ”๊ฐ€ ๋˜์–ด๋„ ์ƒ์œ„ ํด๋ž˜์Šค๋Š” ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ๋ชปํ•œ๋‹ค.

 

Object ํด๋ž˜์Šค

๋ชจ๋“  ํด๋ž˜์Šค๋Š” Object Class๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›๋Š”๋‹ค.

 

๋‹จ์ผ ์ƒ์† single inheritance

C++์—์„œ๋Š” ๋‹ค์ค‘ ์ƒ์† multiple inheritance์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ ์ž๋ฐ”์—์„œ๋Š” ๋‹จ์ผ ์ƒ์†๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‘ ๊ฐœ ์ด์ƒ์˜ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ•˜๋‚˜์˜ ์ƒ์œ„ ํด๋ž˜์Šค๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ๋ช…ํ™•ํ•˜๊ณ  ์ฝ”๋“œ์˜ ์‹ ๋ขฐ์„ฑ์ด ๋†’๋‹ค.

class ํ•˜์œ„ํด๋ž˜์Šค extends ์ƒ์œ„ํด๋ž˜์Šค1, ์ƒ์œ„ํด๋ž˜์Šค{ // ๋ถˆ๊ฐ€๋Šฅ
}

 

 

 

๐Ÿฆธ‍โ™‚๏ธ super ํ‚ค์›Œ๋“œ

์ฐธ์กฐ๋ณ€์ˆ˜ Super

์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ฅผ ์ฐธ์กฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ

์ƒ์†๋ฐ›์€ ๋ฉค๋ฒ„์™€ ์ž์‹ ์˜ ๋ฉค๋ฒ„์™€ ์ด๋ฆ„์ด ๊ฐ™์„ ๋•Œ super๋ฅผ ๋ถ™์—ฌ์„œ ๊ตฌ๋ณ„

class Parent {
    int x = 10;

    void printMethod() {
        System.out.println("Printed in Parent Class.");
    }
}

class Child extends Parent {
    int x = 20;

    void guessX(){
        System.out.println("x = " + x);
        System.out.println("this.x = " + this.x);
        System.out.println("super.x = " + super.x);
    }

    void printMethod() {
        super.printMethod();
        System.out.println("Printed in Child Class.");
    }

}

public class InheritanceTest {

    public static void main(String[] args) {
        Child child = new Child();
        child.guessX();

        System.out.println("==========================");

        child.printMethod();
    }
}
x = 20
this.x = 20
super.x = 10
==========================
Printed in Parent Class.
Printed in Child Class.

 

 

์ƒ์„ฑ์ž super()

ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์—์„œ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ์‚ฌ์šฉ

์ƒ์„ฑ์ž์˜ ์ฒซ์ค„์— ๋ฐ˜๋“œ์‹œ ์ƒ์„ฑ์ž ํ˜ธ์ถœํ•œ๋‹ค.

๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ƒ์„ฑ์ž ํ˜ธ์ถœ์— super()๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

๋ช…์‹œ์  ํ˜ธ์ถœ

class Store {
    Store() {
        System.out.println("Store ์ƒ์„ฑ์ž");
    }
}

class LiquorStore extends Store{
    LiquorStore() {
        super();
        System.out.println("LiquorStore ์ƒ์„ฑ์ž");
    }
}

public class ConstructorSuperTest {
    public static void main(String[] args) {
        LiquorStore liquorStore = new LiquorStore();
    }
}
Store ์ƒ์„ฑ์ž
LiquorStore ์ƒ์„ฑ์ž

 

๋ฌต์‹œ์  ํ˜ธ์ถœ

class Store {
    Store() {
        System.out.println("Store ์ƒ์„ฑ์ž");
    }
}

class LiquorStore extends Store{
    LiquorStore() {
        System.out.println("LiquorStore ์ƒ์„ฑ์ž");
    }
}

public class ConstructorSuperTest {
    public static void main(String[] args) {
        LiquorStore liquorStore = new LiquorStore();
    }
}
Store ์ƒ์„ฑ์ž
LiquorStore ์ƒ์„ฑ์ž

 

 

๐Ÿง™‍โ™‚๏ธ ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

override : ~ ์œ„์— ๋ฎ์–ด์“ฐ๋‹ค.

ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•œ๋‹ค. 

 

 

์˜ค๋ฒ„๋กœ๋”ฉ overloading๊ณผ ํ—ท๊ฐˆ๋ฆฌ๊ธฐ ์‰ฝ๋‹ค.

 

๐Ÿ“Œ ์˜ค๋ฒ„๋กœ๋”ฉ overloading

  • ๊ธฐ์กด์— ์—†๋Š” ์ƒˆ๋กœ์šด ๋งค์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ
  • ์„ ์–ธ๋ถ€๊ฐ€ ๋‹ค๋ฅด๋‹ค.

 

๐Ÿ“Œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ overriding

  • ์ƒ์†๋ฐ›์€ ๋ฉ”์„œ๋“œ์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ
  • ๊ตฌํ˜„๋ถ€๊ฐ€ ๋‹ค๋ฅด๋‹ค.
  • ๋ฉ”์„œ๋“œ์˜ ์„ ์–ธ๋ถ€(๋ฉ”์„œ๋“œ๋ช…. ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฐ˜ํ™˜ํƒ€์ž…)๊ฐ€ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ์™€์™€ ์ผ์น˜ํ•˜๋‹ค.
  • ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ์กฐ์ƒ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ณด๋‹ค ์ข์€ ๋ฒ”์œ„๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
  • ์กฐ์ƒ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ณด๋‹ค ๋งŽ์€ ์ˆ˜์˜ ์˜ˆ์™ธ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.
class Animal{
    void run(){
        System.out.println("๋™๋ฌผ์ด ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค.");;
    }
}

class Cat extends Animal {
    void run() {
        System.out.println("๊ณ ์–‘์ด๊ฐ€ ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค.");
    }
}

public class OverridingTest {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.run();
    }
}
๊ณ ์–‘์ด๊ฐ€ ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค.

 

 

๐Ÿ‘ฉ‍๐Ÿ”ฌ ๋‹ค์ด๋‚˜๋ฏน ๋ฉ”์†Œ๋“œ ๋””์ŠคํŒจ์น˜ (Dynamic Method Dispatch)

  • override๋œ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์ด ์ปดํŒŒ์ผ์ด ์•„๋‹Œ ๋Ÿฐํƒ€์ž„ ๋•Œ ํ™•์ธ๋˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜
  • ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ง€ ๋ชจ๋ฅธ๋‹ค. ๋Ÿฐํƒ€์ž„ ์‹œ์ ์ด ๋˜์–ด์•ผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • override๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒ์œ„ ํด๋ž˜์Šค ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ๋˜๋ฉด,
    Java๋Š” ํ˜ธ์ถœ์ด ๋ฐœ์ƒํ•œ ์‹œ์ ์— ์ฐธ์กฐ๋˜๋Š” ๊ฐ์ฒด์˜ ์œ ํ˜•์— ๋”ฐ๋ผ์„œ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰ํ• ์ง€, ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.

 

๐Ÿ“Œ upcasting

์ƒ์œ„ ํด๋ž˜์Šค ์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

Java๋Š” ์ด ์‚ฌ์‹ค์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Ÿฐํƒ€์ž„์— override๋œ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ํ˜ธ์ถœํ•œ๋‹ค.

์ƒ์œ„ ํด๋ž˜์Šค์— ํ•˜์œ„ ํด๋ž˜์Šค์— ์˜ํ•ด override๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ,

์ƒ์œ„ ํด๋ž˜์Šค ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค. 

์ƒ์œ„ํด๋ž˜์Šค obj = new ํ•˜์œ„ํด๋ž˜์Šค();

 

๐Ÿ“ŒDynamic Method Dispatch ์žฅ์ 

๋Ÿฐํƒ€์ž„ ๋‹คํ˜•์„ฑ์˜ ํ•ต์‹ฌ์ธ overriding of methods ์ง€์›

 

// A Java program to illustrate Dynamic Method
// Dispatch using hierarchical inheritance
class A
{
    void m1()
    {
        System.out.println("Inside A's m1 method");
    }
}
  
class B extends A
{
    // overriding m1()
    void m1()
    {
        System.out.println("Inside B's m1 method");
    }
}
  
class C extends A
{
    // overriding m1()
    void m1()
    {
        System.out.println("Inside C's m1 method");
    }
}
  
// Driver class
class Dispatch
{
    public static void main(String args[])
    {
        // object of type A
        A a = new A();
  
        // object of type B
        B b = new B();
  
        // object of type C
        C c = new C();
  
        // obtain a reference of type A
        A ref;
          
        // ref refers to an A object
        ref = a;
  
        // calling A's version of m1()
        ref.m1();
  
        // now ref refers to a B object
        ref = b;
  
        // calling B's version of m1()
        ref.m1();
  
        // now ref refers to a C object
        ref = c;
  
        // calling C's version of m1()
        ref.m1();
    }
}

 

https://www.geeksforgeeks.org/dynamic-method-dispatch-runtime-polymorphism-java/

 

Dynamic Method Dispatch or Runtime Polymorphism in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

 

๐Ÿงš‍โ™€๏ธ ์ถ”์ƒ ํด๋ž˜์Šค abstract class

  • ์™„์ „ํ•˜๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค
  • ์„ ์–ธ์‹œ abstract๋ฅผ ๋ถ™์ธ๋‹ค.
  • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค.
  • ํ•˜๋‚˜ ์ด์ƒ์˜ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

๐Ÿ“Œ ์ถ”์ƒ ๋ฉ”์„œ๋“œ abstract method

  • ์„ ์–ธ๋ถ€๋งŒ ์ž‘์„ฑํ•œ๋‹ค.
  • ๊ตฌํ˜„๋ถ€๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. → ๋ฉ”์„œ๋“œ์˜ ๋‚ด์šฉ์ด ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.
  • ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ†ตํ•ด ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
abstract ๋ฆฌํ„ดํƒ€์ž… ๋ฉ”์„œ๋“œ์ด๋ฆ„();

 

abstract class Shape {
    private int x,y;

//  ์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹Œ ๋ฉ”์„œ๋“œ๋„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
    public void move(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public abstract void draw();
}

class Rectangle extends Shape {
    private int width, height;

    public void draw() {
        System.out.println("์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ");
    }
}

class Circle extends Shape {
    private int radius;
    public void draw() {
        System.out.println("์› ๊ทธ๋ฆฌ๊ธฐ");
    }
}


public class AbstractTest {
    public static void main(String[] args) {
        Rectangle rectangle = new Rectangle();
        rectangle.draw();

        Circle circle = new Circle();
        circle.draw();
    }
}

 

 

๐Ÿ‘ฉ‍๐Ÿš’ final ํ‚ค์›Œ๋“œ

final : ๋งˆ์ง€๋ง‰์˜, ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†๋Š”

ํด๋ž˜์Šค์— ์‚ฌ์šฉ : ์ž์‹ ์„ ํ™•์žฅํ•˜๋Š” ์ž์†ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.  →  String, Math

๋ฉ”์„œ๋“œ์— ์‚ฌ์šฉ : ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ•  ์ˆ˜ ์—†๋‹ค.

๋ณ€์ˆ˜์— ์‚ฌ์šฉ : ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ์ƒ์ˆ˜

final class FinalTest {     	      // ์กฐ์ƒ์ด ๋  ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค
    final int MAX_SIZE = 10;          // ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ (์ƒ์ˆ˜)
    
    final int getMaxSize() {
        final int LV = MAX_SIZE;      // ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•  ์ˆ˜ ์—†๋Š” ๋ฉ”์„œ๋“œ
        return MAX_SIZE;              // ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ์ง€์—ญ๋ณ€์ˆ˜ (์ƒ์ˆ˜)
    }
}

 

๐Ÿ•ต๏ธ‍โ™€๏ธ Object ํด๋ž˜์Šค

๋ชจ๋“  ํด๋ž˜์Šค์˜ ์กฐ์ƒ ํด๋ž˜์Šค์ด๋‹ค.

Object ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋“ค์€ ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

11๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

๊ฐ์ฒด ์ž์‹ ์˜ ๋ณต์‚ฌ๋ณธ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

protected Object clone()

 

๊ฐ์ฒด ์ž์‹ ๊ณผ ๊ฐ์ฒด obj๊ฐ€ ๊ฐ™์€ ๊ฐ์ฒด์ธ์ง€ ์•Œ๋ ค์ค€๋‹ค.

๊ฐ™๊ณ  ๋‹ค๋ฆ„์„ ์ฐธ์กฐ๋ณ€์ˆ˜์˜ ๊ฐ’์œผ๋กœ ํŒ๋‹จํ•œ๋‹ค.

๊ฐ™์œผ๋ฉด true

public boolean equals(Object obj)

 

๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋  ๋•Œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์— ์˜ํ•ด ์ž๋™์ ์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค.

์ด ๋•Œ ์ˆ˜ํ–‰๋˜์–ด์•ผํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๋•Œ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ๋‹ค.

protected void finalize()

 

๊ฐ์ฒด ์ž์‹ ์˜ ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” Class ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

public Class getClass()

 

๊ฐ์ฒด ์ž์‹ ์˜ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

public int hashCode()

 

๊ฐ์ฒด ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

public String toString()

 

๊ฐ์ฒด ์ž์‹ ์˜ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ํ•˜๋‚˜๋งŒ ๊นจ์šด๋‹ค.

public void notify()

 

๊ฐ์ฒด ์ž์‹ ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋ฅผ ๊นจ์šด๋‹ค.

public void notifyAll()

 

๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ notify()๋‚˜ notifyAll()์„ ํ˜ธ์ถœํ•  ๋•Œ๊นŒ์ง€,

ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฌดํ•œํžˆ ๋˜๋Š” ์ง€์ •๋œ ์‹œ๊ฐ„ (timeout, nanos)๋™์•ˆ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•œ๋‹ค.

public void wait()
public void wait(long timeout)
public void wait(long timeout, int nanos)

 

 

 

์ฐธ์กฐ

6์ฃผ์ฐจ ๊ณผ์ œ: ์ƒ์†

๋‚จ๊ถ์„ฑ, ์ž๋ฐ”์˜ ์ •์„ ๊ธฐ์ดˆํŽธ, ๋„์šฐ์ถœํŒ, 2019

https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

 

Inheritance (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com

 

'Programming > JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] ์ธํ„ฐํŽ˜์ด์Šค  (1) 2022.08.29
[Java] ํŒจํ‚ค์ง€  (0) 2022.08.17
[Java] ํด๋ž˜์Šค  (0) 2022.08.05
[Java] ์ œ์–ด๋ฌธ  (0) 2022.08.04
[Java] ์—ฐ์‚ฐ์ž  (0) 2022.02.02