JAVA์˜ ์ƒ์†๐Ÿ™†โ€โ™‚๏ธ

๊น€๋ฏผ์ œยท2023๋…„ 10์›” 17์ผ
0
post-thumbnail
  • ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•  ์ผ์ด ์žˆ๋Š”๋ฐ ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ๋“ค์„ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ํ˜•ํƒœ์ผ ๋•Œ ์ƒ์†์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
  • โ€œ00์€ 00์˜ ์ข…๋ฅ˜ ์ค‘ ํ•˜๋‚˜๋‹คโ€ ๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด ๊ด€๊ณ„๋ฅผ ์ƒ์† ๊ด€๊ณ„๋ผ๊ณ  ํ•œ๋‹ค. ์ƒ์† ๊ด€๊ณ„๋Š” is a ๊ด€๊ณ„ ํ˜น์€ kind of ๊ด€๊ณ„๋ผ๊ณ ๋„ ํ•œ๋‹ค.
    • ex) ์„ธํƒ๊ธฐ๋Š” ๊ฐ€์ „ ์ œํ’ˆ์ด๋‹ค. ์„ ํ’๊ธฐ๋Š” ๊ฐ€์ „ ์ œํ’ˆ์ด๋‹ค.
  • ์ด๋ฏธ ๊ฐœ๋ฐœ๋œ ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์ค€๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์ž์‹์ด ๋ถ€๋ชจ๋ฅผ ์„ ํƒํ•œ๋‹ค. ์ž์‹ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•  ๋•Œ, ์–ด๋–ค ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์„์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

์˜ˆ์‹œ

  • ์ „์ž์ œํ’ˆ,TV,์ „์ž๋ ˆ์ธ์ง€ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.
  • TV์™€ ์ „์ž๋ ˆ์ธ์ง€๋Š” ์ „์ž์ œํ’ˆ์— ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ž ์ œํ’ˆ์€ ๋ถ€๋ชจ ํด๋ž˜์Šค, TV์™€ ์ „์ž๋ ˆ์ธ์ง€๋Š” ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋œ๋‹ค.
  • ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ex) TV์™€ ์ „์ž๋ ˆ์ธ์ง€๋Š” ๋„๋‹ค,์ผœ๋‹ค ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ์ด๋ฆ„์œผ๋กœ ๋ถ€๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ผ๋ฐ˜ํ™”๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ƒ์†์€ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์ด๋‹ค. ๋ฐ˜๋“œ์‹œ ์จ์•ผํ•  ๋•Œ๋งŒ ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ž˜๋ชป ๋ฐ›์œผ๋ฉด ํƒ€๊ฒฉ์ด ํฌ๋‹ค.

์„ ์–ธ ๋ฐฉ๋ฒ•

[์ ‘๊ทผ ์ œํ•œ์ž][abstract, final] class ํด๋ž˜์Šค๋ช… extends ๋ถ€๋ชจ ํด๋ž˜์Šค๋ช…{}

์ƒ์†์˜ ํŠน์ง•

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์—†๋‹ค.
    • extends ๋’ค์—๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋งŒ ์™€์•ผํ•œ๋‹ค
    • ์•„๋ฌด ๊ฒƒ๋„ ์ƒ์†๋ฐ›์ง€ ์•Š์œผ๋ฉด java.lang.Object๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.
      • ๋ชจ๋“  ํด๋ž˜์Šค๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ ์ž์‹์ด๋‹ค
  • ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ private ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ๊ฐ–๋Š” ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ๋Š” ์ƒ์† ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋œ๋‹ค. ๋˜ํ•œ ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์— ์กด์žฌํ•œ๋‹ค๋ฉด default ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ๊ฐ–๋Š” ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ๋„ ์ƒ์† ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋œ๋‹ค.
  • ๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ์ž์‹ ํƒ€์ž…์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฒ„์Šค๋Š” ์ž๋™์ฐจ๋‹ค
    • Car car = new Bus();
      • Bus์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์กŒ์ง€๋งŒ ์‹ค์ œ ์ฐธ์กฐ๋Š” Carํƒ€์ž…์œผ๋กœ ํ•œ๋‹ค.

        Untitled

      • ์•ž์˜ ๋ณ€์ˆ˜ ์ฐธ์กฐ ํƒ€์ž…๋งŒ ๋ณด๋ฉด ์ด ๋ณ€์ˆ˜๊ฐ€ ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์•Œ ์ˆ˜ ์žˆ์Œ

๋ถ€๋ชจ ์ƒ์„ฑ์ž์˜ ํ˜ธ์ถœ

  • ์ž๋ฐ”์—์„œ๋Š” ์ž์‹ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋ถ€๋ชจ ๊ฐ์ฒด๊ฐ€ ๋จผ์ € ์ƒ์„ฑ๋˜๊ณ  ๊ทธ ๋‹ค์Œ ์ž์‹ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ์ฐธ์กฐ๋œ๋‹ค.
    • ์Šคํƒ์˜์—ญ์˜ ์ž์‹ ํด๋ž˜์Šค ๊ฐ์ฒด ๋ฒˆ์ง€ โ†’ ํž™์˜์—ญ์˜ ์ž์‹ ๊ฐ์ฒด ๋ฒˆ์ง€ โ†’ ํž™์˜์—ญ์˜ ๋ถ€๋ชจ ๊ฐ์ฒด ๋ฒˆ์ง€
  • ๊ทธ๋ ‡๋‹ค๋ฉด ๋ถ€๋ชจ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€๋ชจ ์ƒ์„ฑ์ž๋ฅผ ์–ด๋””์„œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ผ๊นŒ??
    • ๋ถ€๋ชจ ์ƒ์„ฑ์ž๋Š” ์ž์‹ ์ƒ์„ฑ์ž์˜ ๋งจ ์ฒซ์ค„์— super()๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ๋œ๋‹ค.
    • super()๋Š” ๋ถ€๋ชจ์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
    • super(๋งค๊ฐœ๋ณ€์ˆ˜,โ€ฆ)๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ชจ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
    • superํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•ด๋„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ super()๊ฐ€ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ๋งŒ์•ฝ ๋ถ€๋ชจ ํด๋ž˜์Šค์— ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์—†๊ณ  ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž๋งŒ ์žˆ๋‹ค๋ฉด ์ž์‹ ์ƒ์„ฑ์ž์—์„œ ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจ ์ƒ์„ฑ์ž ํ˜ธ์ถœ์„ ์œ„ํ•ด super(๋งค๊ฐœ๋ณ€์ˆ˜,..)๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค.
    • super ํ‚ค์›Œ๋“œ๋Š” ์ž์‹ ์ƒ์„ฑ์ž ์ฒซ ์ค„์— ์œ„์น˜ํ•ด์•ผํ•œ๋‹ค.

์˜ˆ์ œ

public class Parent {
    public String name;
    public int id;
    
    public Parent(String name, int id) {
        this.name = name;
        this.id = id;
    }
}
public class Child extends Parent{
    int birthData;
    public Child(String name, int id, int birthData){
        super(name,id);
        this.birthData=birthData;
    }
}
public class Exam {
    public static void main(String[] args) {
        Parent parent = new Parent("๊น€๋ฏผ์ œ", 1);
        System.out.println(parent.name + " : " + parent.id);
        Child child = new Child("๊น€๋ฏผ์ œ", 1, 1999);
        System.out.println(child.name + " : " + child.id + ", " + child.birthData);
    }
}
->๊น€๋ฏผ์ œ : 1
	๊น€๋ฏผ์ œ : 1, 1999

๋‹คํ˜•์„ฑ - ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(overriding)

  • ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ
  • ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ์€ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ
  • ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ๋ถ€๋ชจ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์™„์ „ํžˆ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
    • ๋ฉ”์†Œ๋“œ๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋˜๋ฉด ๋ฌด์กฐ๊ฑด ์ž์‹ ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
    • ์ž์‹ ํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ ๋ฉ”์†Œ๋“œ์— ํ•œํ•ด์„œ๋Š” ์ด์ œ๋ถ€ํ„ฐ ์ž์‹ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋œป

๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ฐฉ๋ฒ•

  • ๋ถ€๋ชจ์˜ ๋ฉ”์†Œ๋“œ์™€ ๋™์ผํ•œ ์‹œ๊ทธ๋‹ˆ์ฒ˜(๋ฆฌํ„ด ํƒ€์ž…, ๋ฉ”์†Œ๋“œ ์ด๋ฆ„, ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋ชฉ๋ก)๋ฅผ ๊ฐ€์ ธ์•ผํ•œ๋‹ค.
  • ์ ‘๊ทผ ์ œํ•œ์„ ๋” ๊ฐ•ํ•˜๊ฒŒ ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค.(ex. public โ†’ private,default๋กœ ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅ)
  • ์ƒˆ๋กœ์šด ์˜ˆ์™ธ(Exception)๋ฅผ throwsํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๊ฒŒ๋˜๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋Š” ์ˆจ๊ฒจ์ง€๊ณ  ์žฌ์ •์˜๋œ ์ž์‹ ๋ฉ”์†Œ๋“œ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค. ์ž์‹ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค๋ฉด superํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์„œ ๋ถ€๋ชจ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ์ œ
public class Parent {
    public void print1() {
        System.out.println("๋ถ€๋ชจ ํด๋ž˜์Šค์ž„๋‹น!");
    }
    public void print2(){
        System.out.println("๋ถ€๋ชจ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ!");
    }
}

public class Child extends Parent{
    public void print1(){
        System.out.println("์ž์‹์ž„๋‹น..");
    }
    public void print2(){
        super.print2();
        System.out.println("์ž์‹ ํด๋ž˜์Šค ํ˜ธ์ถœ!");
    }
}

public class Exam {
    public static void main(String[] args) {
        Parent parent = new Parent();
        parent.print1();
        Child child = new Child();
        child.print1();
        parent.print2();
        child.print2();
    }
}
->๋ถ€๋ชจ ํด๋ž˜์Šค์ž„๋‹น!
	์ž์‹์ž„๋‹น..
	๋ถ€๋ชจ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ!
	๋ถ€๋ชจ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ!
	์ž์‹ ํด๋ž˜์Šค ํ˜ธ์ถœ!

๋‹คํ˜•์„ฑ

  • ๋‹คํ˜•์„ฑ์€ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๋™์ผํ•˜์ง€๋งŒ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์‹คํ–‰๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋„๋ก ํ•˜๋Š” ์„ฑ์งˆ์ด๋‹ค.
  • ๋‹คํ˜•์„ฑ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋ฉ”์†Œ๋“œ ์žฌ์ •์˜์™€ ํƒ€์ž… ๋ณ€ํ™˜์ด ํ•„์š”ํ•˜๋‹ค.
  • ๋‹คํ˜•์„ฑ์˜ ์žฅ์ 
    1. ์œ ์ง€๋ณด์ˆ˜ : ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋‹ค.
    2. ์žฌ์‚ฌ์šฉ์„ฑ : ๊ฐ์ฒด์˜ ์žฌ์‚ฌ์šฉ์ด ์‰ฌ์›Œ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„์ง„๋‹ค.
    3. ๋Š์Šจํ•œ ๊ฒฐํ•ฉ : ํด๋ž˜์Šค ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ค„์—ฌ ํ™•์žฅ์„ฑ์€ ๋†’์•„์ง€๊ณ  ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ์•„์ง„๋‹ค.

์ž๋™ ํƒ€์ž… ๋ณ€ํ™˜

  • ์ž์‹์€ ๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ์ž๋™ ํƒ€์ž… ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ž๋™ ํƒ€์ž… ๋ณ€ํ™˜์€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋„์ค‘์— ์ž๋™์ ์œผ๋กœ ํƒ€์ž… ๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
  • ์ž๋™ ํƒ€์ž… ๋ณ€ํ™˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์—์„œ ์ผ์–ด๋‚œ๋‹ค.
    ๋ถ€๋ชจํƒ€์ž… ๋ณ€์ˆ˜๋ช… = new ์ž์‹ํƒ€์ž…;
  • ์ž๋™ ํƒ€์ž… ๋ณ€ํ™˜์˜ ๊ฐœ๋…์€ ๋ถ€๋ชจ์˜ ํŠน์ง•๊ณผ ๊ธฐ๋Šฅ์„ ์ƒ์†๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ์™€ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณ ์–‘์ด๊ฐ€ ๋™๋ฌผ์˜ ํŠน์ง•๊ณผ ๊ธฐ๋Šฅ์„ ์ƒ์†๋ฐ›์•˜๋‹ค๋ฉด โ€˜๊ณ ์–‘์ด๋Š” ๋™๋ฌผ์ด๋‹คโ€™๊ฐ€ ์„ฑ๋ฆฝ๋œ๋‹ค.

์˜ค๋ฒ„๋ผ์ด๋”ฉ

  • ์šฐ๋ฆฌ๋Š” ์œ„์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ๊ณต๋ถ€ํ•˜์˜€๋‹ค. ๋‹คํ˜•์„ฑ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ํ•„์š”ํ•˜๋‹ค.
  • Car class์˜ run์„ โ€œ์ „๋ฅœ๊ตฌ๋™ํ•œ๋‹ค.โ€๋ผ๊ณ  ๋‘๊ณ  Bus class์˜ run์„ โ€œํ›„๋ฅœ๊ตฌ๋™ํ•œ๋‹ค.โ€๋ผ๊ณ  ๋‘๋ฉด ์ถœ๋ ฅ์€ ๋‘˜ ๋‹ค โ€œํ›„๋ฅœ๊ตฌ๋™ํ•œ๋‹คโ€๋กœ ์ถœ๋ ฅ๋œ๋‹ค
  • ๋‘˜ ๋‹ค bus์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ–ˆ๊ธฐ ๋–„๋ฌธ์— bus์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
    • bus๋Š” ํ›„๋ฅœ ๊ตฌ๋™์œผ๋กœ ๊ฐ€๋„๋ก ๋งŒ๋“ค์–ด๋†จ๊ธฐ ๋•Œ๋ฌธ์— โ€œํ›„๋ฅœ๊ตฌ๋™ํ•œ๋‹คโ€๊ฐ€ ์ถœ๋ ฅ๋จ

      ** ๋ฉ”์†Œ๋“œ๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋˜๋ฉด ๋ฌด์กฐ๊ฑด ์ž์‹ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

  • ํ•„๋“œ๋Š” Type์„ ๋”ฐ๋ผ๊ฐ€๊ณ  ๋ฉ”์†Œ๋“œ๋Š” ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ ์ž์‹์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๋”ฐ๋ผ๊ฐ„๋‹ค.
Parent.class
public class Parent {
    int i = 5; // ํ•„๋“œ์— ๋Œ€ํ•œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
		public void printII(){
			System.out.println(i*2);
		}
    public void printI(){
        System.out.println("Parent - printI() : " + i); // ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
    }
}

child.class
public class child extends Parent{
    public int i = 15; // ํ•„๋“œ์— ๋Œ€ํ•œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
    public void printI(){
        System.out.println("Child - printI() : " + i); // ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
    }
}

exam01.class
public class exam01 {
    public static void main(String[] args) {
        Parent p1 = new Parent();
        System.out.println(p1.i); //5
        p1.printI(); //5

        child c1 = new child();
        System.out.println(c1.i); //15
        c1.printI(); //15

        Parent p2 = new child(); //child๋Š” Parent์˜ ์ž์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜ ์•ˆ ๋‚จ
        System.out.println(p2.i); //5
				p2.printII(); //10, child์˜ i*2๊ฐ€ ๋˜์–ด 30์ด ๋‚˜์˜ฌ ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ƒํ–ˆ์ง€๋งŒ ํ•„๋“œ๋Š” ๋ถ€๋ชจ ํƒ€์ž…์„
											//    ๋”ฐ๋ผ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— 10 ์ถœ๋ ฅ
        p2.printI(); //15
    }
}
  • ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋งŒ ๊ธฐ์–ตํ•˜๋ฉด ๋จ
  • ์ •๋ณด ์€๋‹‰์€ ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์ค‘์š”ํ•œ ๊ธฐ๋ฒ•์ด๋‹ค. ์ค‘์š”ํ•œ ํ•„๋“œ๋Š” ์€๋‹‰ํ•˜๊ณ , ํ•„๋“œ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•˜๋„๋ก ์‚ฌ์šฉํ•œ๋‹ค.
    • exam01์—์„œ๋Š” parent๋‚˜ child์˜ ํ•„๋“œ i์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ํ•„๋“œ์— ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์ ‘๊ทผํ•ด์•ผํ•จ
    • ์ด๋Ÿฌํ•œ ๊ฐœ๋…์„ ์ •๋ณด ์€๋‹‰์ด๋ผ ํ•˜๊ณ  ๊ฐ์ฒด ์ง€ํ–ฅ ๋ฌธ๋ฒ• ์ค‘ ์ ‘๊ทผ ์ง€์ •์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์€๋‹‰ํ•œ๋‹ค.
    • ์•ˆ์ „์„ ์œ„ํ•ด ๋งŒ๋“  ์‹ ํ˜ธ๋“ฑ ๋•Œ๋ฌธ์— ์ง€๊ฐ์„ ํ–ˆ๋‹ค๊ณ  ์‹ ํ˜ธ๋“ฑ์„ ์—†์• ๋ฉด ์•ˆ๋œ๋‹ค.
    • ์•ž์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์ •๋ณด๋ฅผ ์™ธ๋ถ€์— ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ธฐ๋ฒ•๋“ค์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ๋ฐ ์ด๋ฅผ ์‹ ํ˜ธ๋“ฑ์„ ์„ธ์šด๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

๋‹คํ˜•์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ (feat.Object)

  • ๋ถ€๋ชจ ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋กœ ์ž์‹ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์กฐ์ƒ ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋กœ ํ›„์† ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Parent c1 = new Child(); -> Parent๋Š” Child์˜ ์ž์†์ด๋‹ค.
  • ์•„๋ฌด๊ฒƒ๋„ ์ƒ์†๋ฐ›์ง€ ์•Š์œผ๋ฉด Object๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค
  • Object b1 = new Parent();
  • Object b2 = new Child();
  • prinrln(Object x)์ฒ˜๋Ÿผ object๋ฅผ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ Object๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ด๋“  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • Object์˜ ์ž์†๋“ค์€ ๋‹ค ์ด ๋ฉ”์†Œ๋“œ์— ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • System.out.println(b1.toString()); == System.out.println(b1);

๋‹คํ˜•์„ฑ ์‚ฌ์šฉ ์˜ˆ์‹œ

  • ๋‹คํ˜•์„ฑ์€ ์–ด๋–ป๊ฒŒํ•˜๋ฉด ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ?
  • ์„ฑ๋ณ„๊ณผ ์„ฑ๋ณ„์— ๋”ฐ๋ฅธ id๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์˜ˆ์‹œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž
    class Gender {
        int id ;
        public Gender(int id){
            this.id = id;
        }
    }
    
    class Male extends Gender{
        //์ƒ์œ„ ๋ฉ”์†Œ๋“œ์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ธ์ž๋กœ 1์„ ๋„ฃ์–ด์คŒ
        public Male() {
            super(1);
        }
        @Override
        public String toString() {
            return "Male{" +
                    "id=" + id +
                    '}';
        }
    }
    
    class Female extends Gender{
        //์ƒ์œ„ ๋ฉ”์†Œ๋“œ์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ธ์ž๋กœ 1์„ ๋„ฃ์–ด์คŒ
        public Female() {
            super(2);
        }
    
        @Override
        public String toString() {
            return "Female{" +
                    "id=" + id +
                    '}';
        }
    }
    
    public class GenderInfo {
        void genderInfo(Gender gender){
            System.out.println(gender);
            System.out.println("id๋งŒ ์ถœ๋ ฅ : " + gender.id);
        }
    }
    
    class Main {
        public static void main(String[] args){
            GenderInfo gender = new GenderInfo();
            gender.genderInfo(new Male());
            gender.genderInfo(new Female());
        }
    }
    ->Male{id=1}
    	id๋งŒ ์ถœ๋ ฅ : 1
    	Female{id=2}
    	id๋งŒ ์ถœ๋ ฅ : 2
    • ์œ„์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์šฐ์„  Genderํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด id๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ํ•„๋“œ์— ์ €์žฅํ•˜๋Š” ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
    • ๊ทธ ๋‹ค์Œ Male๊ณผ Female ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด Gender๋ฅผ ์ƒ์†ํ•œ ๋’ค ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด superํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ์˜ ์ƒ์„ฑ์ž์— ์ธ์ž๋ฅผ ๋„ฃ์–ด ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ค€๋‹ค.
    • ๊ทธ ๋‹ค์Œ GenderInfo ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด Genderํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์›ํ•˜๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค.
      • ์—ฌ๊ธฐ์„œ ๋‹คํ˜•์„ฑ์ด ํ™œ์šฉ๋˜๋Š”๋ฐ ๋”ฐ๋กœ Male,Female ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
    • main ๋ฉ”์†Œ๋“œ์—์„œ GenderInfo ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  genderInfo์— Male,Female ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ์ฃผ์–ด ์‚ฌ์šฉํ•œ๋‹ค.
profile
๋ธ”๋กœ๊ทธ ์ด์ „ํ–ˆ์Šต๋‹ˆ๋‹ค!! ๐Ÿ‘‰ https://alswp006.github.io/

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