OOP๋ž€?(Object-Oriented Programming)

๋ฐ˜์‘ํ˜•
SMALL
๐Ÿ’กOOP๋ž€ ์ž๋ฐ”์˜ ์ฃผ์š” ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ์ฒด๋ผ๋Š” ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๊ฐœ๋ฐœํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์ด๋‹ค.
์—ฌ๊ธฐ์„œ ๊ฐ์ฒด๋ž€ ๋ฐ์ดํ„ฐ(์†์„ฑ)๊ณผ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜(๋™์ž‘)์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ๋†“๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž๋™์ฐจ๋ฅผ ๊ฐ์ฒด๋กœ ๋‘๋ฉด ๋ฐ์ดํ„ฐ๋Š” ์ž๋™์ฐจ์˜ ์ƒ‰์ƒ, ๋ธŒ๋žœ๋“œ, ์†๋„ ๋“ฑ์ด๋ฉฐ ํ•จ์ˆ˜๋Š” ์ถœ๋ฐœํ•˜๋‹ค(), ๋ฉˆ์ถ”๋‹ค() ๊ฐ™์€ ๋™์ž‘๋“ค์ด ์žˆ๋‹ค.

 

oop์˜ 4๋Œ€ ํ•ต์‹ฌ ํŠน์ง•

1. ์บก์Šํ™”(Encapsulation): ๋ฐ์ดํ„ฐ์™€ ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜์˜ ๋‹จ์œ„(๊ฐ์ฒด)๋กœ ๋ฌถ๊ณ , ์™ธ๋ถ€์—์„œ๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ ‘๊ทผํ•˜๋„๋ก ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ

// ์บก์Šํ™” ์˜ˆ์ œ
class BankAccount {
    private double balance; // ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผ ๋ถˆ๊ฐ€

    public BankAccount(double initialBalance) {
        balance = initialBalance;
    }
   // ์™ธ๋ถ€์—์„œ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ balance ์ ‘๊ทผ ๊ฐ€๋Šฅ

    public void deposit(double amount) {
        balance += amount;
    }

    public void withdraw(double amount) {
        if (balance >= amount) {
            balance -= amount;
        } else {
            System.out.println("์ž”์•ก ๋ถ€์กฑ");
        }
    }

    public double getBalance() {
        return balance;
    }
}

public class Main {
    public static void main(String[] args) {
        BankAccount account = new BankAccount(1000);
        account.deposit(500);
        account.withdraw(300);
        System.out.println("ํ˜„์žฌ ์ž”์•ก: " + account.getBalance());
    }
}
ํ˜„์žฌ ์ž”์•ก: 1200.0

 

2. ์ƒ์†(Inheritance): ๋ถ€๋ชจ ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๋™์ž‘์„ ์ž์‹ ๊ฐ์ฒด๊ฐ€ ๋ฌผ๋ ค๋ฐ›์•„ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

// ๋ถ€๋ชจ ํด๋ž˜์Šค
class Animal {
    public void sound() {
        System.out.println("๋™๋ฌผ์ด ์†Œ๋ฆฌ๋ฅผ ๋‚ธ๋‹ค");
    }
}
// ์ž์‹ ํด๋ž˜์Šค
class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("๋ฉ๋ฉ");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.sound();
    }
}
๋ฉ๋ฉ

 

3. ๋‹คํ˜•์„ฑ(Polymorphism): ๊ฐ™์€ ํ•จ์ˆ˜ ์ด๋ฆ„์ด๋ผ๋„ ๊ฐ์ฒด์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ

class Animal {
    public void sound() {
        System.out.println("๋™๋ฌผ์ด ์†Œ๋ฆฌ๋ฅผ ๋‚ธ๋‹ค");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("๋ฉ๋ฉ");
    }
}

class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("์•ผ์˜น");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal;

        animal = new Dog();
        animal.sound(); // ๋‹คํ˜•์„ฑ ์ ์šฉ - Dog

        animal = new Cat();
        animal.sound(); // ๋‹คํ˜•์„ฑ ์ ์šฉ - Cat
    }
}
๋ฉ๋ฉ
์•ผ์˜น

 

 

4. ์ถ”์ƒํ™”(Abstraction): ๊ผญ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๊ณต๊ฐœํ•˜๊ณ , ์„ธ๋ถ€์‚ฌํ•ญ์€ ์ˆจ๊ธฐ๋Š” ๊ฒƒ

abstract class Animal {
    abstract void sound();
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("๋ฉ๋ฉ");
    }
}

class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("์•ผ์˜น");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.sound();

        Animal cat = new Cat();
        cat.sound();
    }
}
๋ฉ๋ฉ
์•ผ์˜น

 

oop๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ข‹์€์ 

1. ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค.

2. ํ™•์žฅ์„ฑ์ด ์ข‹์•„์ง„๋‹ค.

3. ํ˜‘์—…์— ์œ ๋ฆฌํ•˜๋‹ค.

 

์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ vs ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๋Š” ์ ˆ์ฐจ ์ค‘์‹ฌ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์ด๋‹ค.

ํ•ญ๋ชฉ ์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Procedural Programming) ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (OOP)
๊ธฐ๋ฐ˜ ํ•จ์ˆ˜(์ ˆ์ฐจ, ํ”„๋กœ์„ธ์Šค)๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑ ๊ฐ์ฒด(๋ฐ์ดํ„ฐ+ํ•จ์ˆ˜)๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑ
๊ตฌ์กฐ ์ˆœ์ฐจ์ ์ธ ํ๋ฆ„์— ๋งž์ถฐ ํ•จ์ˆ˜๋“ค์„ ํ˜ธ์ถœํ•˜๋ฉฐ ์ฒ˜๋ฆฌ ๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ๋™์ž‘
์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ  ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ์ƒ๋Œ€์ ์œผ๋กœ ์–ด๋ ค์›€(๊ฐ™์€ ๊ธฐ๋Šฅ์ด๋ผ๋„ ๋ฐ˜๋ณต ์ž‘์„ฑ ๊ฐ€๋Šฅ์„ฑ) ์ƒ์†, ์บก์Šํ™” ๋“ฑ์„ ํ†ตํ•ด ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์Œ
์œ ์ง€๋ณด์ˆ˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€(์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ) ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์‰ฌ์›€
๋Œ€ํ‘œ ์–ธ์–ด C. Pascal๋“ฑ Java, C++ ๋“ฑ
์˜ˆ์‹œ ๋ ˆ์‹œํ”ผ(์ˆœ์„œ๋Œ€๋กœ ๋‹จ๊ณ„ ์‹คํ–‰) ์ž๋™์ฐจ(์†์„ฑ: ์ƒ‰์ƒ, ๋ชจ๋ธ/ ๊ธฐ๋Šฅ: ์šด์ „, ์ •์ง€)

 

์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ˆ์ œ ์ฝ”๋“œ

// ์ ˆ์ฐจ ์ง€ํ–ฅ ์ฝ”๋“œ - ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ํ•จ์ˆ˜๋กœ ์ฒ˜๋ฆฌ
public class Main {
    public static void main(String[] args) {
        String[] names = {"์ฒ ์ˆ˜", "์˜ํฌ", "๋ฏผ์ˆ˜"};
        int[] ages = {25, 23, 30};
        String[] jobs = {"๊ฐœ๋ฐœ์ž", "๋””์ž์ด๋„ˆ", "PM"};

        for (int i = 0; i < names.length; i++) {
            printPerson(names[i], ages[i], jobs[i]);
        }
    }

    public static void printPerson(String name, int age, String job) {
        System.out.println("์ด๋ฆ„: " + name);
        System.out.println("๋‚˜์ด: " + age);
        System.out.println("์ง์—…: " + job);
        System.out.println("------------");
    }
}
์ด๋ฆ„: ์ฒ ์ˆ˜
๋‚˜์ด: 25
์ง์—…: ๊ฐœ๋ฐœ์ž
------------
์ด๋ฆ„: ์˜ํฌ
๋‚˜์ด: 23
์ง์—…: ๋””์ž์ด๋„ˆ
------------
์ด๋ฆ„: ๋ฏผ์ˆ˜
๋‚˜์ด: 30
์ง์—…: PM
------------

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ˆ์ œ ์ฝ”๋“œ

// ๊ฐ์ฒด ์ง€ํ–ฅ ์ฝ”๋“œ - ๋ฐ์ดํ„ฐ + ๊ธฐ๋Šฅ์„ ๊ฐ์ฒด๋กœ ๋ฌถ์Œ
class Person {
    String name;
    int age;
    String job;

    public Person(String name, int age, String job) {
        this.name = name;
        this.age = age;
        this.job = job;
    }

    public void introduce() {
        System.out.println("์ด๋ฆ„: " + name);
        System.out.println("๋‚˜์ด: " + age);
        System.out.println("์ง์—…: " + job);
        System.out.println("------------");
    }
}

public class Main {
    public static void main(String[] args) {
        Person[] people = {
            new Person("์ฒ ์ˆ˜", 25, "๊ฐœ๋ฐœ์ž"),
            new Person("์˜ํฌ", 23, "๋””์ž์ด๋„ˆ"),
            new Person("๋ฏผ์ˆ˜", 30, "PM")
        };

        for (Person person : people) {
            person.introduce(); // ๊ฐ์ฒด๊ฐ€ ์Šค์Šค๋กœ ํ–‰๋™
        }
    }
}
์ด๋ฆ„: ์ฒ ์ˆ˜
๋‚˜์ด: 25
์ง์—…: ๊ฐœ๋ฐœ์ž
------------
์ด๋ฆ„: ์˜ํฌ
๋‚˜์ด: 23
์ง์—…: ๋””์ž์ด๋„ˆ
------------
์ด๋ฆ„: ๋ฏผ์ˆ˜
๋‚˜์ด: 30
์ง์—…: PM
------------
๋ฐ˜์‘ํ˜•
LIST

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

JVM, JDK, JRE  (0) 2025.03.18
JAVA ๊ฐœ๋…๊ณผ ํŠน์ง•  (0) 2025.03.17