소프트웨어 개발 및 설계

소프트웨어 설계 원칙

♠디지털 모험일지♠ 2024. 12. 5. 10:34
728x90
반응형
SMALL

1. 의존성 역전 원칙(DIP: Dependency Inversion Principle)

의미

의존성 역전 원칙은 "상위 수준의 모듈(중요한 역할을 하는 부분)이 하위 수준의 모듈(세부적인 부분)에 의존하지 않도록 설계하는 것"입니다. 대신 둘 다 인터페이스(공통 규칙)에 의존하도록 설계합니다.

쉽게 말하면

  1. 큰 그림을 그리는 관리자(상위 수준 모듈)는 세부적인 일을 하는 사람(하위 수준 모듈)에 직접 의존하지 않습니다.
  2. 대신, "일하는 규칙(인터페이스)"을 정하고, 관리자와 일꾼 모두 이 규칙을 따르게 합니다.
    • 즉, 큰 그림세부 사항이 서로 독립적으로 움직일 수 있도록 설계합니다.

왜 중요한가?

  • 세부적인 내용이 바뀌어도 큰 그림(상위 수준 모듈)에 영향을 주지 않기 때문에 코드의 유지보수성이 좋아집니다.

예제 코드 (Java)

// 인터페이스 (공통 규칙)
interface Worker {
    void doWork();
}

// 세부적인 일꾼 (하위 수준 모듈)
class Developer implements Worker {
    public void doWork() {
        System.out.println("Writing code...");
    }
}

// 관리자 (상위 수준 모듈)
class Manager {
    private Worker worker;

    // 인터페이스에 의존 (Developer가 아니라 Worker를 사용)
    public Manager(Worker worker) {
        this.worker = worker;
    }

    public void manage() {
        worker.doWork();
    }
}

// 사용
public class Main {
    public static void main(String[] args) {
        Worker developer = new Developer();
        Manager manager = new Manager(developer);
        manager.manage(); // "Writing code..." 출력
    }
}
쉽게 풀어서 설명
  • 잘못된 경우: 관리자(Manager)가 특정 일꾼(Developer)에 직접 의존하면, 일꾼이 바뀌면 관리자도 수정해야 합니다.
  • DIP 적용: 일꾼이 누구든(Developer든 다른 Worker든) 관리자는 규칙(인터페이스)을 통해 관리하므로 수정할 필요가 없습니다.

2. DRY 원칙 (Don’t Repeat Yourself)

의미

DRY는 "똑같은 코드를 반복하지 말자"는 원칙입니다.

  • 한 번 작성한 코드를 여러 곳에서 재사용할 수 있도록 설계합니다.
  • 코드 중복을 없애면 유지보수가 쉬워지고, 실수를 줄일 수 있습니다.

쉽게 말하면

  1. 같은 기능을 여러 번 작성하지 말고, 한 곳에 모아서 필요할 때마다 호출해서 사용하자는 뜻입니다.
  2. "복사 붙여넣기 대신, 재사용 가능한 도구를 만들자"입니다.

왜 중요한가?

  • 코드 중복이 많으면 한 곳에서 문제가 생길 때 모든 복사본을 고쳐야 해서 작업이 번거로워집니다.
  • 중복을 제거하면 코드가 간결해지고 수정하기 쉬워집니다.

예제 코드 (Python)

중복이 있는 코드 (나쁜 예):

def calculate_area_circle(radius):
    return 3.14 * radius * radius

def calculate_area_square(side):
    return side * side

DRY 원칙을 적용한 코드 (좋은 예):

def calculate_area(shape, dimension):
    if shape == "circle":
        return 3.14 * dimension * dimension
    elif shape == "square":
        return dimension * dimension

# 재사용
print(calculate_area("circle", 5))  # 원의 넓이
print(calculate_area("square", 4)) # 정사각형의 넓이
쉽게 풀어서 설명
  • 잘못된 경우: 원과 정사각형의 넓이를 각각 계산하는 함수를 따로 만든다면 중복 코드가 생깁니다.
  • DRY 적용: 공통된 계산 규칙을 하나의 함수로 만들어 재사용하면 중복을 없앨 수 있습니다.

3. KISS 원칙 (Keep It Simple, Stupid)

의미

KISS는 "단순하게 유지하라"는 뜻입니다.

  • 코드는 최대한 이해하기 쉽게 작성해야 한다는 원칙입니다.
  • 복잡하고 화려한 코드는 오류를 만들기 쉽고, 다른 사람이 유지보수하기 어렵습니다.

쉽게 말하면

  1. 코드를 작성할 때 "복잡하게 만들 필요가 없다"는 뜻입니다.
  2. "읽기 쉽고, 직관적으로 작성하자"는 메시지입니다.

왜 중요한가?

  • 복잡한 코드는 나중에 수정하거나 다른 사람이 이해하기 어렵습니다.
  • 단순한 코드는 읽고 유지보수하기 쉬워집니다.

예제 코드 (JavaScript)

복잡한 코드 (나쁜 예):

function calculate(x, y, operator) {
    if (operator === "+") {
        return x + y;
    } else if (operator === "-") {
        return x - y;
    } else if (operator === "*") {
        return x * y;
    } else if (operator === "/") {
        return x / y;
    } else {
        return null;
    }
}

단순한 코드 (좋은 예):

function calculate(x, y, operator) {
    const operations = {
        "+": (a, b) => a + b,
        "-": (a, b) => a - b,
        "*": (a, b) => a * b,
        "/": (a, b) => a / b,
    };
    return operations[operator] ? operations[operator](x, y) : null;
}
쉽게 풀어서 설명
  • 잘못된 경우: 길고 복잡한 조건문이 있으면 수정하거나 이해하기 어려워집니다.
  • KISS 적용: 단순한 데이터 구조와 함수를 사용해 코드를 간결하고 직관적으로 만듭니다.

요약

  1. 의존성 역전 원칙(DIP): 큰 그림을 그리는 관리자(상위 수준 모듈)는 세부적인 일을 하는 일꾼(하위 수준 모듈)에 직접 의존하지 말고, 공통 규칙(인터페이스)을 통해 의사소통하자.
  2. DRY 원칙: 같은 코드를 반복하지 말고, 한 번만 작성해서 재사용하자.
  3. KISS 원칙: 코드는 최대한 단순하고 읽기 쉽게 작성하자.
반응형
SMALL