소프트웨어 개발 3대 원칙 (KISS, YAGNI, DRY)

Kkd·2024년 12월 17일
0

매일메일 개념정리

목록 보기
33/93

소프트웨어 개발 3대 원칙

소프트웨어 개발의 3대 원칙은 코드의 간결함과 효율성을 유지하고, 유지보수성과 확장성을 높이기 위한 원칙입니다.


1. KISS (Keep It Simple, Stupid)

  • 의미: 코드는 단순하고 이해하기 쉽게 작성해야 합니다.
  • 목표: 불필요한 복잡성을 제거하여 코드의 가독성, 유지보수성을 높이는 것입니다.
  • 이유: 복잡한 코드는 버그를 유발하기 쉽고, 유지보수가 어렵습니다.

KISS를 지키는 방법

  • 불필요한 조건문, 반복문 제거
  • 함수와 클래스를 작고 단순하게 분리
  • 복잡한 로직을 피하고 단계별로 명확하게 작성

예시

복잡한 코드

if (age >= 18 && age <= 100) {
    System.out.println("성인입니다.");
} else if (age < 18 && age > 0) {
    System.out.println("미성년자입니다.");
} else if (age < 0 || age > 100) {
    System.out.println("유효하지 않은 나이입니다.");
}

단순화된 코드

if (age < 0 || age > 100) {
    System.out.println("유효하지 않은 나이입니다.");
} else if (age < 18) {
    System.out.println("미성년자입니다.");
} else {
    System.out.println("성인입니다.");
}

2. YAGNI (You Aren't Gonna Need It)

  • 의미: 지금 당장 필요하지 않은 기능은 구현하지 말라는 원칙입니다.
  • 목표: 불필요한 기능 추가를 방지하고 개발 시간과 비용을 절약하는 것입니다.
  • 이유: "나중에 필요할 수도 있다"라는 이유로 기능을 미리 추가하면 대부분 필요하지 않고 코드만 복잡해집니다.

YAGNI를 지키는 방법

  • 요구사항에 집중하고 꼭 필요한 기능만 구현
  • 미래의 확장을 고려하되 실제 필요할 때 추가
  • 테스트 가능한 코드를 먼저 작성

예시

불필요한 기능 추가

public class User {
    private String name;
    private String address;      // 나중에 필요할지도 몰라서 추가
    private String phoneNumber;  // 나중에 필요할지도 몰라서 추가
    private String nickname;     // 추가  
}

YAGNI 적용

public class User {
    private String name;  // 현재 필요한 필드만 구현
}

3. DRY (Don't Repeat Yourself)

  • 의미: 중복된 코드를 작성하지 말고 재사용 가능하도록 만들라는 원칙입니다.
  • 목표: 중복을 제거해 코드의 유지보수성일관성을 높이는 것입니다.
  • 이유: 같은 코드를 여러 번 작성하면 수정할 때 모든 부분을 변경해야 하기 때문에 오류 발생 가능성이 높아집니다.

DRY를 지키는 방법

  • 중복된 코드를 함수나 메서드로 분리
  • 상수공통 모듈을 사용해 재사용성 높이기
  • 클래스나 메서드를 재활용하도록 설계

예시

중복된 코드

public boolean validateEmail(String email) {
    if (email == null || !email.contains("@")) {
        System.out.println("이메일 형식이 올바르지 않습니다.");
        return false;
    }
    return true;
}

public boolean validatePassword(String password) {
    if (password == null || password.length() < 8) {
        System.out.println("비밀번호는 최소 8자 이상이어야 합니다.");
        return false;
    }
    return true;
}

public void register(String email, String password) {
    if (email == null || !email.contains("@")) {
        System.out.println("이메일 형식이 올바르지 않습니다.");
        return;
    }
    if (password == null || password.length() < 8) {
        System.out.println("비밀번호는 최소 8자 이상이어야 합니다.");
        return;
    }
    System.out.println("회원가입 성공!");
}

DRY 적용

public boolean validate(String value, Predicate<String> condition, String errorMessage) {
    if (value == null || condition.test(value)) {
        System.out.println(errorMessage);
        return false;
    }
    return true;
}

public void register(String email, String password) {
    if (!validate(email, v -> !v.contains("@"), "이메일 형식이 올바르지 않습니다.") ||
        !validate(password, v -> v.length() < 8, "비밀번호는 최소 8자 이상이어야 합니다.")) {
        return;
    }
    System.out.println("회원가입 성공!");
}

정리: 소프트웨어 개발 3대 원칙

원칙의미목표
KISS단순하게 유지하라코드 복잡도 줄이기, 가독성 높이기
YAGNI지금 당장 필요하지 않으면 구현하지 말라개발 시간 절약, 불필요한 기능 방지
DRY중복을 피하고 재사용 가능하게 만들어라코드 재사용성 증가, 유지보수 용이

SOLID 원칙과의 연관성

1. KISS

  • S (단일 책임 원칙):

    • 하나의 클래스, 모듈, 함수가 하나의 책임만 가지도록 설계하면 코드가 단순해집니다.
    • 한 클래스에 여러 기능이 얽혀 있으면 복잡도가 증가하기 때문에 KISS를 위배하게 됩니다.
  • O (개방-폐쇄 원칙):

    • 코드의 확장은 가능하고 변경은 최소화하라는 원칙입니다.
    • 불필요한 변경을 줄여 단순성을 유지하며, KISS에 부합합니다.
  • D (의존관계 역전 원칙):

    • 추상화된 인터페이스를 사용하면 복잡한 의존관계를 줄이고 더 간결한 설계를 할 수 있습니다.

2. YAGNI

  • S (단일 책임 원칙):

    • 클래스가 하나의 책임만 가지면, 불필요한 기능을 추가하는 유혹을 줄일 수 있습니다.
    • 필요할 때 확장하는 구조를 유지합니다.
  • O (개방-폐쇄 원칙):

    • 새로운 기능이 필요하면 기존 코드를 수정하지 않고 확장만 하면 됩니다.
    • YAGNI를 지키면서도 미래의 변화에 유연하게 대응할 수 있습니다.
  • I (인터페이스 분리 원칙):

    • 클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않도록 하는 원칙입니다.
    • 불필요한 기능을 인터페이스에 포함하지 않아 YAGNI를 지킬 수 있습니다.

3. DRY

  • S (단일 책임 원칙):

    • 하나의 책임만 가지도록 설계하면 중복된 코드가 자연스럽게 제거됩니다.
    • 동일한 기능을 여러 클래스에 구현하지 않도록 도와줍니다.
  • O (개방-폐쇄 원칙):

    • 새로운 기능을 추가할 때 기존 코드를 변경하지 않고 확장할 수 있으므로 중복 코드를 최소화합니다.
  • L (리스코프 치환 원칙):

    • 상위 클래스의 객체를 하위 클래스로 교체해도 정상적으로 동작해야 합니다.
    • 재사용성이 높아져 같은 기능을 여러 번 구현할 필요가 없습니다.
  • D (의존관계 역전 원칙):

    • 인터페이스를 사용해 의존성을 추상화하면 코드 재사용이 더욱 쉬워집니다.

SOLID와 3대 원칙의 시너지

원칙목표SOLID 원칙과 연관
KISS단순하고 명확한 코드 유지단일 책임 원칙(S), 개방-폐쇄 원칙(O)
YAGNI필요하지 않은 기능 미리 구현하지 않기단일 책임 원칙(S), 인터페이스 분리 원칙(I)
DRY중복 코드 제거 및 재사용성 증가단일 책임 원칙(S), 리스코프 치환 원칙(L), 개방-폐쇄 원칙(O)

이 3대 원칙은 복잡한 소프트웨어 개발 과정에서 불필요한 작업을 줄이고 코드 품질을 높이는 데 매우 중요한 역할을 합니다.
지속적으로 이 원칙들을 적용한다면 더 단순하고 효율적인 소프트웨어를 만들 수 있습니다.

추가 학습 자료

profile
🌱

0개의 댓글