객체 지향 설계의 5가지 원칙(SOLID)

2024. 3. 30. 19:19·Spring Framework

 

SOLID 원칙이란?

-> 객체 지향 설계에서 지켜야 할 5개의 소프트웨어 개발 원칙이다.

​

SRP(Single Responsibility Principle): 단일 책임 원칙

OCP(Open Closed Priciple): 개방 폐쇄 원칙

LSP(Listov Substitution Priciple): 리스코프 치환 원칙

ISP(Interface Segregation Principle): 인터페이스 분리 원칙

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

​

좋은 소프트웨어란 변화에 대응을 잘 하는것을 말한다.

SOLID 객체 지향 원칙을 적용하면 코드를 확장하고 유지, 보수, 관리 하기가 더 쉬워지며, 불필요한 복잡성을 제거해 리팩토링에 소요되는 시간을 줄임으로써 프로젝트 개발의 생산성을 높일 수 있다.

​

SOLID는 어떠한 특정 프로그래밍 언어 혹은 프레임 워크를 위해 만든 원칙이 아니다.

​

어떤 프레임워크, 라이브러리의 패턴도 아니먀 특정 기술에 국한되지 않는다. 그래서 TypeScript 또는 Java와 같은 선호하는 프로그래밍 언어나 프레임워크 원칙을 자유럽게 적용할 수도 있다고 한다.

​

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

a. 단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙

b. 하나의 클래스는 하나의 기능 담당하여 하나의 책임을 수행하도록 클래스를 따로따로 설계하라는 원칙이다.

c. 이때 책임의 범위는 딱 정해져 있는것이 아니고 어떤 프로그램을 개발하느냐에 따라 개발자마다 생각 기준이 달라질 수 있다.

​

2. OCP(Open Closed Priciple): 개방 폐쇄 원칙

a. 개발 폐쇄 원칙 클래스는 확장에 열려있어야 하며 수정에는 닫혀있어야 한다라는 원칙

b. 기능 추가 요청이 오면 클래스를 확장을 통해 손쉽게 구현하면서, 확장에 따른 클래스 수정은 최소화 하도록 프로그램을 작성해야 하는 설계 기법이다.

c. 다형성과 확장을 가능케 하는 객체지향의 장점을 극대화 하는 기본적인 설계 원칙

​

3. LSP(Listov Substitution Priciple): 리스코프 치환 원칙

a. 리스코프 치환 원칙은 서브타입은 언제나 부모(기반) 타입으로 교체할 수 있어야 한다는 원칙

b. LSP는 다형성 원리를 이용하기 위한 원칙 개념으로 보면 된다.

c. 다형성의 특징을 이용하기 위해 상위 클래스 타입으로 객체를 선언하여 하위 클래스의 인스턴스를 받으면 업 캐스팅된 부모의 메서드를 사용해도 동작이 의도대로 흘러가야 하는 것을 의미한다.

​

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

a. 인터페이스 분리 원칙은 인터페이스를 각각 사용에 맞게끔 잘 분리해야한다는 설계 원칙

b. 인터페이스를 사용하는 클라이언트 기준으로 분리함으로써, 클라이언트의 목적과 용도에 적합한 인터페이스 만을 제공하는 것이 목표이다.

​

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

a. 의존 역전 원칙은 어떤 클래스를 참조해서 사용해야 하는 상황이 생긴다면 그 클래스를 직접 참조하는 것이 아니라 그 대상의 상위요소(추상 클래스, 인터페이스)로 참조하는 원칙

b. 쉽게 말하면 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻이다.

'Spring Framework' 카테고리의 다른 글

[Spring] Bean Validation (검증) - 1  (4) 2024.10.31
[Spring] 스프링 메시지, 국제화  (1) 2024.10.29
[Spring] Argument Resolver 란?  (0) 2024.10.24
@Transactional을 선언해도 내부 메서드를 실행 시 ROLLBACK이 되지 않는 문제  (0) 2024.08.03
(실습)객체지향 설계 원칙를 지키면서 설계하기  (0) 2024.03.30
'Spring Framework' 카테고리의 다른 글
  • [Spring] 스프링 메시지, 국제화
  • [Spring] Argument Resolver 란?
  • @Transactional을 선언해도 내부 메서드를 실행 시 ROLLBACK이 되지 않는 문제
  • (실습)객체지향 설계 원칙를 지키면서 설계하기
Economy98
Economy98
공부하고 기록하기
  • Economy98
    Economy_Dev
    Economy98
  • 전체
    오늘
    어제
    • 분류 전체보기 (77)
      • Spring Framework (12)
      • BOJ, Programmers (22)
      • Java (6)
      • JDBC (6)
      • JPA (9)
      • Spring Transaction (3)
      • Algorithm (1)
      • Web (5)
      • Projects (2)
        • 쇼핑몰 프로젝트 (0)
        • 열람실 & 도서관 프로젝트 (2)
      • Network (2)
      • 나의 공부방 (5)
      • 끄적끄적 (1)
      • Error Log (3)
      • CS (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • Github
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    자바 문제 풀이
    백준
    Spring
    자바 문제
    스프링
    트랜잭션
    예외 처리
    propagation
    백준 자바 풀이
    자바
    정렬
    jdbc
    스프링부트
    백준 풀이
    java
    다이나믹 프로그래밍
    그리디 알고리즘
    restful api
    브루트포스 알고리즘
    JPA
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Economy98
객체 지향 설계의 5가지 원칙(SOLID)
상단으로

티스토리툴바