SOLID 원칙: 객체 지향 프로그래밍의 5대 기본 원칙

2024. 7. 17. 18:18·개발 노트/etc.
목차
  1. SOLID 원칙
  2. SOLID 원칙이란?
  3. 1. 단일 책임 원칙 (Single Responsibility Principle, SRP)
  4. 2. 개방-폐쇄 원칙 (Open/Closed Principle, OCP)
  5. 3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)
  6. 4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP)
  7. 5. 의존 역전 원칙 (Dependency Inversion Principle, DIP)

SOLID 원칙

SOLID 원칙이란?

SOLID 원칙은 객체 지향 프로그래밍에서 코드의 유지보수성과 확장성을 높이기 위한 다섯 가지 기본 원칙을 의미한다. 이 원칙들은 Robert C. Martin(일명 Uncle Bob)에 의해 제안되었으며, 잘 설계된 소프트웨어 시스템을 구축하는 데 중요한 가이드라인을 제공한다. SOLID는 다음 다섯 가지 원칙의 약자이다: 단일 책임 원칙(Single Responsibility Principle), 개방-폐쇄 원칙(Open/Closed Principle), 리스코프 치환 원칙(Liskov Substitution Principle), 인터페이스 분리 원칙(Interface Segregation Principle), 의존 역전 원칙(Dependency Inversion Principle).

 

1. 단일 책임 원칙 (Single Responsibility Principle, SRP)

정의

클래스는 단 하나의 책임만 가져야 하며, 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는 데 집중되어야 한다.

예시 코드

public class Order {
    private Long id;
    private String description;
    // getter와 setter
}

public class OrderRepository {
    public void save(Order order) {
        // 데이터베이스 저장 로직
    }

    public Order findById(Long id) {
        // 데이터베이스 조회 로직
        return new Order();
    }
}

여기서 Order 클래스는 주문에 대한 데이터만 가지고 있으며, 데이터베이스 작업은 OrderRepository 클래스가 담당한다.

 

2. 개방-폐쇄 원칙 (Open/Closed Principle, OCP)

정의

소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 열려 있어야 하고, 수정에는 닫혀 있어야 한다.

예시 코드

public interface Shape {
    double area();
}

public class Circle implements Shape {
    private double radius;
    public double area() {
        return Math.PI * radius * radius;
    }
}

public class Rectangle implements Shape {
    private double width;
    private double height;
    public double area() {
        return width * height;
    }
}

여기서 Shape 인터페이스를 구현한 Circle과 Rectangle 클래스는 새로운 도형 클래스를 추가하더라도 기존 코드를 수정할 필요가 없다.

 

3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)

정의

서브타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다.

예시 코드

public class Bird {
    public void fly() {
        // 나는 로직
    }
}

public class Sparrow extends Bird {
    // 참새에 대한 추가 행동
}

여기서 Sparrow 클래스는 Bird 클래스의 모든 기능을 포함하고 있으며, Bird 타입으로 대체되어도 문제 없이 동작한다.

 

4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP)

정의

특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

예시 코드

public interface Printer {
    void print(Document d);
}

public interface Scanner {
    void scan(Document d);
}

public class MultiFunctionPrinter implements Printer, Scanner {
    public void print(Document d) {
        // 인쇄 로직
    }

    public void scan(Document d) {
        // 스캔 로직
    }
}

여기서 Printer와 Scanner 인터페이스는 각각의 클라이언트에 맞게 분리되어 있다.

 

5. 의존 역전 원칙 (Dependency Inversion Principle, DIP)

정의

고수준 모듈은 저수준 모듈에 의존해서는 안 된다. 둘 다 추상화에 의존해야 한다.

예시 코드

public interface Repository {
    void save(Object obj);
}

public class DatabaseRepository implements Repository {
    public void save(Object obj) {
        // 데이터베이스에 저장 로직
    }
}

public class Service {
    private Repository repository;
    public Service(Repository repository) {
        this.repository = repository;
    }

    public void saveObject(Object obj) {
        repository.save(obj);
    }
}

여기서 Service 클래스는 Repository 인터페이스에 의존하고, 구체적인 구현인 DatabaseRepository 클래스에 의존하지 않는다.

'개발 노트 > etc.' 카테고리의 다른 글

객체지향과 절차지향 무엇이 더 좋을까?  (0) 2024.07.26
객체지향 패러다임 이해하기 - OOP의 기본 개념과 원칙  (0) 2024.07.26
Hexagonal Architecture란?  (3) 2024.07.23
유닛 테스트(Unit Test)란?  (1) 2024.07.21
Git Flow VS GitHub Flow  (1) 2024.07.17
  1. SOLID 원칙
  2. SOLID 원칙이란?
  3. 1. 단일 책임 원칙 (Single Responsibility Principle, SRP)
  4. 2. 개방-폐쇄 원칙 (Open/Closed Principle, OCP)
  5. 3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)
  6. 4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP)
  7. 5. 의존 역전 원칙 (Dependency Inversion Principle, DIP)
'개발 노트/etc.' 카테고리의 다른 글
  • 객체지향 패러다임 이해하기 - OOP의 기본 개념과 원칙
  • Hexagonal Architecture란?
  • 유닛 테스트(Unit Test)란?
  • Git Flow VS GitHub Flow
악덕
악덕
우당탕탕 개발 블로그
  • 악덕
    버그와 함께 춤을
    악덕
  • 전체
    오늘
    어제
    • 전체 (26)
      • TIL (2)
      • 개발 노트 (19)
        • Java (5)
        • JavaScript (1)
        • Spring (4)
        • Linux (1)
        • DevOps (1)
        • etc. (7)
      • 문제 풀이 (0)
      • 삽질 로그 (3)
      • 기타 (2)
  • 링크

    • GitHub
    • Project.zip
    • 밀로(millo)
  • 태그

    mysql
    OOP
    ssl
    java
    DevOps
    Til
    solid 원칙
    객체지향 프로그래밍
    springboot
    프로그래밍
    프로그래밍언어
    컨테이너
    gdg
    웹개발
    자료형
    자바기초
    java persistence api
    Spring Data JPA
    JPA
    Docker
  • hELLO· Designed By정상우.v4.10.3
악덕
SOLID 원칙: 객체 지향 프로그래밍의 5대 기본 원칙
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.