Skip to content

Latest commit

ย 

History

History
252 lines (177 loc) ยท 9.62 KB

File metadata and controls

252 lines (177 loc) ยท 9.62 KB

๐ŸŽฎOOP

๐Ÿ“š Table of Contents

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

ํด๋ž˜์Šค์™€ ๊ฐ์ฒด

์ƒ์„ฑ์ž

OOP์˜ 4๊ฐ€์ง€ ํŠน์ง•

SOLID ์›์น™



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

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋“ฑ์žฅํ•˜๊ธฐ ์ „์—๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์„ค๊ณ„ ์ˆ˜์ค€์ด๋‚˜ ์ˆ˜์š”์— ๋”ฐ๋ฅธ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•œ ํŽธ์ด ์•„๋‹ˆ์—ˆ๋‹ค. ์ ์  ๋ณต์žกํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ–ˆ๊ณ  ์ด์— ๋”ฐ๋ผ ์‹ค์ œ ์„ธ๊ณ„์™€ ๋น„์Šทํ•œ ๋ชจ๋ธ๋ง ๋ฐฉ์‹์ด ์š”๊ตฌ๋๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜ํƒ€๋‚œ ๊ฒƒ์ด ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object Oriented Programming)์ด๋‹ค. OOP์˜ ํ•ต์‹ฌ์€ ๊ฐ์ฒด์™€ ํด๋ž˜์Šค๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋“ค์€ ์‹ค์ œ ๊ฐœ์ฒด์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ์™€ ํ–‰๋™์ด๋ผ๋Š” 2๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ - ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ์ƒํƒœ
ํ–‰๋™ - ์Šค์Šค๋กœ ๋ณ€ํ•˜๊ณ  ๋‹ค๋ฅธ ๋ฌผ์ฒด์™€ ์†Œํ†ต

ํด๋ž˜์Šค์™€ ๊ฐ์ฒด

๊ฐ์ฒด๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค. ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋Š” ์ƒํƒœ, ํ–‰๋™ ๊ทธ๋ฆฌ๊ณ  ์‹๋ณ„์ž๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค. ๋˜ํ•œ ๊ฐ์ฒด๋“ค์€ ์„œ๋กœ๊ฐ„์˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฅผ message passing์ด๋ผ๊ณ  ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ํ•„์š”๋กœ ํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์ƒ์„ฑ์ž

์ƒ์„ฑ์ž๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†๋Š” ํŠน์ˆ˜ํ•œ ๋ฉ”์„œ๋“œ์ด๋‹ค. ์ƒ์„ฑ์ž์˜ ์ด๋ฆ„์€ ํ•ญ์ƒ ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ๋™์ผํ•˜๊ณ  ์ดˆ๊ธฐ ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ƒ์„ฑ์ž๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ JVM์€ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ• ๋‹นํ•˜๋ฉฐ ์ด๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋–„๋ฌธ์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ƒ์„ฑ์ž๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.


OOP์˜ 4๊ฐ€์ง€ ํŠน์ง•

  • ์ถ”์ƒํ™”(Abstration)
  • ์บก์Аํ™”(Encapsulation)
  • ๋‹คํ˜•์„ฑ(Polymorphism)
  • ์ƒ์†์„ฑ(Inheritance) => ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์œผ๋กœ ์ธํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ์ฆ๊ฐ€ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

์ถ”์ƒํ™”

์ถ”์ƒํ™”๋Š” ์ปจํ…์ŠคํŠธ์™€ ๊ด€๋ จ์ด ์—†๋Š” ์ •๋ณด๋ฅผ ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ๊ด€๋ จ๋œ ์ •๋ณด๋งŒ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ถ”์ƒํ™”๋Š” ๋ฐ์ดํ„ฐ ์ถ”์ƒํ™”, ์ œ์–ด ์ถ”์ƒํ™” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ถ”์ƒํ™”๋Š” ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ž‘์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธ

public class Shape
{
    private Rectangle rec;
    private Circle cir;
    private Triangle tri;
    ...
}
public class changeShape{
    public static circleToTriagle(){
        ...
    }
}

์บก์Аํ™”

์ž๋ฐ”์˜ ์ ‘๊ทผ ์ œ์–ด

  • public
  • protected
  • default
  • private

์ ‘๊ทผ ์ œ์–ด์ž

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

์ •๋ณด์€๋‹‰ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ ‘๊ทผ์ œ์–ด์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋ฉฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„์€๋‹‰์„ ๋‹ฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ตฌํ˜„์€๋‹‰์€ ๊ฐ์ฒด๊ฐ€ ์ฑ…์ž„์„ ์ดํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ž์œ ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋Š” ์„ค๊ณ„๊ฐ€ ๋ณ€๊ฒฝ ๋  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

//์บก์Аํ™” ํด๋ž˜์Šค
package com.encapsulationExample;

public class EncapsulationClass {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

//๋ฉ”์ธ
package com.encapsulationExample;

public class Main {

    public static void main(String[] args) {
	// write your code here
        EncapsulationClass cap = new EncapsulationClass();

        cap.setId(123);
        cap.setName("jay");

        System.out.println(cap.getId());
        System.out.println(cap.getName());
    }
}

//์ถœ๋ ฅ
123
jay

๋‹คํ˜•์„ฑ

๋‹คํ˜•์„ฑ์€ ๊ฐ™์€ ์ž๋ฃŒํ˜•์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฐ์ฒด๋ฅผ ๋Œ€์ž…ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์–ด๋‚ด๋Š” ์„ฑ์งˆ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ™์€ ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. compile time polymorphism, runtime polymorphism ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

compile time์€ ์ปดํŒ”์ผ๋Ÿฌ๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ํ”„๋กœ๊ทธ๋žจ ์ปดํŒŒ์ผ ์ค‘์— ํ˜ธ์ถœํ•  ๋ฐฉ๋ฒ•์„ ์•Œ๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ์ ์ ˆํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ๊ฐ์˜ ๊ฐ์ฒด์— ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

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

class Animal {
    public void sound(){
        System.out.println("Sound...");
    }
}
class Dog extends Animal{
    public void sound(){
        System.out.println("war war");
    }
}
class cat extends Animal{
    ...
}
public static void main(String[] args){
    Animal animal = new Animal();
    animal.sound(); // Sound ...

    Animal animal = new Dog();
    abunal.sound(); // war war
}

์ƒ์†์„ฑ

์ƒ์†์€ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ํ–‰๋™์„ ์–ป๊ฒŒ๋˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒ์†์€ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ์ƒ์†์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” extends ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ์† ๋ฐ›์„ ํด๋ž˜์Šค์— ๋ช…์‹œํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ์†๋˜๋Š” ํด๋ž˜์Šค๋Š” super ํด๋ž˜์Šค๋ผ ๋ถ€๋ฅด๊ณ  ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ํด๋ž˜์Šค๋ฅผ sub ํด๋ž˜์Šค๋ผ ํ•œ๋‹ค.

class ์ž์‹ํด๋ž˜์Šค extends ๋ถ€๋ชจํด๋ž˜์Šค {
	//ํ•„๋“œ
	//์ƒ์„ฑ์ž
	//๋ฉ”์†Œ๋“œ
}
//๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ Extendํ•˜๋Š” ๊ฒƒ์ด์ง€ ์ž์‹ํด๋ž˜์Šค๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ Extendํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹˜.



OOP๋ฅผ ์‹ค์„ธ๊ณ„์— ๋น—๋Œ€์–ด ๋ณด๋ฉด

  1. OOP 4๋Œ€ ํŠน์„ฑ :์ฃผ๋ฐฉ๋„๊ตฌ(utensil)
    • ์ถ”์ƒํ™”, ์ƒ์†, ์บก์Аํ™”, ๋‹คํ˜•์„ฑ
  2. OOD(๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„) 5์›์น™ :์ฃผ๋ฐฉ ๋„๊ตฌ ์„ค๋ช…์„œ
    • SOLID
  3. DP(๋””์ž์ธ ํŒจํ„ด) :๋ ˆ์‹œํ”ผ

SOLID ์›์น™(OOD ์„ค๊ณ„ ์›์น™)

  • SRP(Single Responsibility Principle) ๋‹จ์ผ ์ฑ…์ž„ ์›์น™
  • OCP(Open Close Principle) ๊ฐœ๋ฐœ ํ์‡„์˜ ์›์น™
  • LSP(Liskov Substitution Priciple) ๋ฆฌ์Šค์ฝ”๋ธŒ ์น˜ํ™˜์˜ ์›์น™
  • ISP(Interface Segregation Principle) ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ์˜ ์›์น™
  • DIP(Dependency Inversion Principle) ์˜์กด์„ฑ ์—ญ์ „์˜ ์›์น™

SRP(Single Responsibility Principle) ๋‹จ์ผ ์ฑ…์ž„ ์›์น™

  • ํด๋ž˜์Šค๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ๋งŒ์„ ๊ฐ€์ง„๋‹ค.
  • ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌ์œ ๋Š” ๋‹จ ํ•œ๊ฐ€์ง€์—ฌ์•ผ ํ•œ๋‹ค.

srp

์–ด๋–ค ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฐ๊ฐ€์˜ ์ž์‹์ด๋ฉฐ ์นœ๊ตฌ, ๋ถ€ํ•˜์ง์› ์—ญํ• ์„ ํ•œ๋‹ค. ๋งŒ์•ฝ ์นœ๊ตฌ ์‚ฌ์ด๊ฐ€ ๋ฉ€์–ด์ง€๊ฒŒ ๋œ๋‹ค๋ฉด ๋”์ด์ƒ ๊ฒŒ์ž„๊ณผ ์ˆ ๋จน๋Š” ๊ฒƒ์„ ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋Š”๋ฐ, ๋” ์ด์ƒ ํ•˜์ง€ ์•Š์€ ํ–‰๋™์„ ์ ์–ด ๋†“๋Š”๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค.

OCP(Open Close Principle) ๊ฐœ๋ฐœ ํ์‡„์˜ ์›์น™

  • ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ , ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋ณ€๊ฒฝ์ด ์ƒ๊ฒจ๋„, ๊ธฐ์กด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ , ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‰ฝ๊ฒŒ ํ™•์žฅํ•ด์„œ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ธ ๊ตฌ์กฐ์ด๋‹ค.

ocp ๋™๋ฌผ์ด ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ•์•„์ง€, ๊ณ ์–‘์ด, ๋ผ์ง€๊ฐ€ ๋™๋ฌผ์„ ์ƒ์†ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค๋ฉด OCP์— ์ค€์ˆ˜ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

LSP(Liskov Substitution Priciple) ๋ฆฌ์Šค์ฝ”๋ธŒ ์น˜ํ™˜์˜ ์›์น™

  • ๋” ๋†’์€ ์ˆ˜์ค€์˜ ํด๋ž˜์Šค ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋‚ฎ์€ ์ˆ˜์ค€์˜ ํด๋ž˜์Šค๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.

LSP๋ฅผ ์ค€์ˆ˜ํ•˜์ง€ ์•Š์€ ์˜ˆ์‹œ

lsp

ํ•ด๋‹น ์ฝ”๋“œ์—์„œ ArrayList๋ฅผ LinkedList๋กœ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ ArrayList๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ๋ฉ”์„œ๋“œ๋„ ์ˆ˜์ •์„ ํ•ด์•ผํ•œ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๋Š” sum๋ฉ”์„œ๋“œ ํ•œ ๊ณณ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜์ง€๋งŒ ์—ฌ๋Ÿฌ๊ตฐ๋ฐ์—์„œ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ ๋ชจ๋‘ ์ˆ˜์ •์„ ํ•ด์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค. ํ•˜์œ„ ํƒ€์ž„์ด ์ƒ์œ„ํƒ€์ž…์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก LSP ์›์น™์„ ์ค€์ˆ˜ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•œ๋‹ค.

lsp2

ISP(Interface Segregation Principle) ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ์˜ ์›์น™

  • ํ•˜๋‚˜์˜ ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹Œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ช…ํ™•ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (SRP :'ํด๋ž˜์Šค'์˜ ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ•์กฐ, ISP :'์ธํ„ฐํŽ˜์ด์Šค'์˜ ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ•์กฐ)

ISP

DIP(Dependency Inversion Principle) ์˜์กด์„ฑ ์—ญ์ „์˜ ์›์น™

  • ์‹ค์ œ ์‚ฌ์šฉ ๊ด€๊ณ„๋Š” ์•Š์ง€๋งŒ ์ถ”์ƒ์„ ๋งค๊ฐœ๋กœ ํ˜ธ์ถœํ•จ์œผ๋กœ์„œ ๊ด€๊ณ„๋ฅผ ๋А์Šจํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • ๊ตฌ์ฒด์ ์ธ class๊ฐ€ ์•„๋‹Œ, ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•จ์œผ๋กœ์จ DIP๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

dip1

์•„์ด๋Š” (๊ตฌ์ฒด์ ์ธ)๋ ˆ๊ณ ์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค. ๋งŒ์•ฝ ๋ ˆ๊ณ ๊ฐ€ ์•„๋‹Œ ํผ์ฆ์„ ๊ฐ–๊ณ  ๋†€๊ณ ์‹ถ๋‹ค๋ฉด?

dip2

ํ•ด๋‹น ์˜์กด๊ด€๊ณ„๋ฅผ ์žฅ๋‚œ๊ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ญ์ „์‹œํ‚จ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๋ ˆ๊ณ ์— ์˜์กดํ•˜๋˜ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.



๐Ÿ“š ์ฐธ๊ณ 

OOP

OOP ํŠน์ง•

OOP

SOLID ์›์น™

SOLID


โ‰๏ธ ๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

SOLID ์›์น™์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

SOLID ์›์น™ ๋“ค์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

OOP๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?