๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ/Java

[Java] ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด(OOP)์˜ ํŠน์„ฑ: ์ฝ”๋“œ๋กœ ๋ณด๋Š” ์บก์Šํ™”, ์ƒ์†์„ฑ, ๋‹คํ˜•์„ฑ, ์ถ”์ƒํ™”

by HanaV 2023. 3. 22.
728x90

์ปดํ“จํ„ฐ ์–ธ์–ด๋Š” ํฌ๊ฒŒ ์ ˆ์ฐจํ˜•(Precedural Program Language)๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ(Object Oriented Program Language)์ด ์žˆ๋Š”๋ฐ, Java์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋ผ๋Š” ์ ์ด๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์˜ ์ œ์ผ ํฐ ์žฅ์ ์€ ํ˜‘์—…ํ•˜๊ธฐ ํŽธ๋ฆฌํ•˜๋‹ค๋Š” ์ ์ด๋‹ค.

 


 

1. ์บก์Šํ™”(Encapsulation)

๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•ด์„œ ์ธ์Šคํ„ด์Šค ๊ฐ„ ์„œ๋กœ ์˜ํ–ฅ์„ ์•ˆ ์ฃผ๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์šด์˜ํ•œ๋‹ค. ๊ฐ์ฒด๋ฅผ ๋‚ด๋ถ€๋ฅผ ๋ณดํ˜ธํ•˜๊ณ  ๋ณผ ์ˆ˜ ์—†๊ฒŒ ํ•˜์—ฌ ์ •๋ณด ์€๋‹‰์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

 


 

2. ์ƒ์†์„ฑ(Inheritance)

๋‹ค๋ฅธ ํด๋ž˜์Šค(๋ถ€๋ชจ ํด๋ž˜์Šค)์˜ ํŠน์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ์œผ๋กœ, ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ฑ์„ ์ตœ๋Œ€ํ•œ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•ด๋ณด์ž

์˜ˆ์‹œ ์ฝ”๋“œ

class Parent {
    int a = 3;
    int b = 4;
    public void parentPrint(){
        System.out.println("Parent Class");
    }
}

class Child extends Parent{ //์ƒ์†: extends ๋ถ€๋ชจํด๋ž˜์Šค์ด๋ฆ„
    int c = 5;
    int d = 6;
    public void childPrint(){
        System.out.println("Child Class");
    }
}

public class InheritanceExample {
    public static void main(String[] args) {
        Child child = new Child();
        child.parentPrint();
        child.childPrint();
        System.out.println("a = " + child.a);
    }
}

console

Parent Class
Child Class
a = 3

Child ํด๋ž˜์Šค์—๋Š” parentPrint ๋ฉ”์†Œ๋“œ์™€ int a, int b ๊ฐ’์ด ์—†์ง€๋งŒ, Parent ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์•„ ์ถœ๋ ฅ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ž๋ฐ”๋Š” ๋‹ค์ค‘์ƒ์†์ด ์•ˆ๋œ๋‹ค, ๋‹ค๋งŒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋™์‹œ์— ์ƒ์†๋ฐ›์„ ์ˆ˜๋Š” ์žˆ๋‹ค.

 


 

3. ๋‹คํ˜•์„ฑ(Polymorphism)

๋‹คํ˜•์„ฑ์€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ผ์„ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœํ•ด ์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding)์€ ๋‹คํ˜•์„ฑ์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋กœ, ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค์—์„œ ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ์ด๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ ํด๋ž˜์Šค์—์„œ ํ•„์š”์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์ฆ‰, ์œ ์—ฐ์„ฑ๊ณผ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ธ๋‹ค.

์˜ˆ์‹œ ์ฝ”๋“œ

class Family{
    public void hello(){
        System.out.println("Hello everyone"); //๊ฐ€์ƒ๋ฉ”์†Œ๋“œํ™”: ์‹คํ–‰์€ ์•ˆํ•จ
    }
}

class KimFamily extends Family{
	@Override
    public void hello(){
        System.out.println("Hello Kim");
    }
}

class ParkFamily extends Family{
	@Override
    public void hello(){
        System.out.println("Hello Park");
    }
}

public class PolymorphismExample {
    public static void main(String[] args) {
        Family f;
        
        f = new Family();
        f.hello();
        f = new KimFamily();
        f.hello();
        f = new ParkFamily();
        f.hello();
    }
}

console

Hello everyone
Hello Kim
Hello Park

์˜ˆ์‹œ์—์„œ ๋ณด์ด๋“ฏ์ด ๊ฐ™์€ hello ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ์ง€๋งŒ, ๋‹ค๋ฅธ ๊ฐ’์ด ์ถœ๋ ฅ๋˜์—ˆ๋‹ค.

class Animal{
    public void move(){
        System.out.println("Animal is moving");
    }
}

class Human extends Animal {
    @Override
    public void move(){
        System.out.println("Human is walking");
    }
}

class Dog extends Animal {
    @Override
    public void move(){
        System.out.println("Dog is running");
    }
}

class Bird extends Animal {
    @Override
    public void move(){
        System.out.println("Bird is flying");
    }
}

public class PolymorphismExample2 {
    public static void main(String[] args) { //๋ฉ”์ธ ๋ฉ”์†Œ๋“œ๋Š” ํŽธ์˜์ƒ ์–ด๋–ค ํด๋ž˜์Šค ๋‚ด์˜ ๋ฉ”์†Œ๋“œ๋กœ ๋“ฑ๋ก์€ ๋˜์ง€๋งŒ, ๋ฉ”์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ํ’ˆ๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค์™€๋Š” ํ•˜๋“ฑ์˜ ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค๊ณ  ๋ด„
        PolymorphismExample2 animalTest = new PolymorphismExample2();
        animalTest.moveAnimal(new Human());
        animalTest.moveAnimal(new Dog());
        animalTest.moveAnimal(new Bird());
    }

    public void moveAnimal(Animal animal){
        animal.move();
    }
    
}

console

Human is walking
Dog is running
Bird is flying

 


 

4. ์ถ”์ƒํ™”(Abstract)

์ถ”์ƒํ™”๋ณด๋‹ค๋Š” ์š”์•ฝ์ด๋ผ๊ณ  ๋ด์•ผ ํ•œ๋‹ค(์˜ค์—ญ) 

4-1. abstract class (๊ธฐ์กด ํด๋ž˜์Šค + ์„ค๊ณ„๋„)

์˜ˆ์‹œ ์ฝ”๋“œ

abstract class SalesPlan {
    public void companyGoal(){
        System.out.println("2023๋…„ ์ „์‚ฐ ๋ชฉํ‘œ 300์–ต ๋‹ฌ์„ฑ!");
    }
    abstract public void departGoal(); //์ถ”์ƒ ๋ฉ”์†Œ๋“œ(abstract method)
    abstract public void product();
}

class ATeam extends SalesPlan {

    public void manager(){
        System.out.println("A ํŒ€์žฅ: hanav");
    }

    @Override
    public void departGoal() {
        System.out.println("A Team ํŒ๋งค ๋ชฉํ‘œ 70์–ต ๋‹ฌ์„ฑ!");
    }

    @Override
    public void product() {
        System.out.println("A Team ์ฃผ๋ ฅ ์ƒํ’ˆ : TV");
    }
}

public class AbstractClassExample {
    public static void main(String[] args) {
         ATeam aTeam = new ATeam();

        aTeam.manager();
        aTeam.companyGoal();
        aTeam.departGoal();
    }
}

console

A ํŒ€์žฅ: ๊น€๋ฏผ์˜
2023๋…„ ์ „์‚ฐ ๋ชฉํ‘œ 300์–ต ๋‹ฌ์„ฑ!
A Team ํŒ๋งค ๋ชฉํ‘œ 70์–ต ๋‹ฌ์„ฑ!

4-2. interface (์„ค๊ณ„๋„)

์˜ˆ์‹œ ์ฝ”๋“œ

interface SalesPlanInterface { //์™„์ „ํ•œ ์„ค๊ณ„๋„(์š”์•ฝ)
    public void manager();
    public void goal();
    public void product();
}

class ATeam1 implements SalesPlanInterface {

    @Override
    public void manager() {
        System.out.println("A1 ํŒ€์žฅ: ๊น€๋ฏผ์˜");
    }

    @Override
    public void goal() {
        System.out.println("A Team1 ํŒ๋งค ๋ชฉํ‘œ 70์–ต ๋‹ฌ์„ฑ!");
    }

    @Override
    public void product() {
        System.out.println("A Team1 ์ฃผ๋ ฅ ์ƒํ’ˆ : TV");
    }
}

public class InterfaceExample{
    public static void main(String[] args) {
        ATeam1 aTeam = new ATeam1();

        aTeam.manager();
        aTeam.goal();
        aTeam.product();
    }
}

console

A1 ํŒ€์žฅ: ๊น€๋ฏผ์˜
A Team1 ํŒ๋งค ๋ชฉํ‘œ 70์–ต ๋‹ฌ์„ฑ!
A Team1 ์ฃผ๋ ฅ ์ƒํ’ˆ : TV
728x90

"); wcs_do();