티스토리 뷰
*공부 기록용으로 하는 블로그입니다.잘못된 개념이나 오타가 있을 수 있습니다. 잘못된 정보알려주시면 수정하겠습니다!*
SOLID원칙이란?
-객체 지향 프로그래밍(OOP)에서 다섯가지 설계 원칙의 약어 입니다.코드를 더 읽기 쉽고 유지보수하기 쉽도록 만들기 위한 원칙이며 총 5가지의 설계원칙이 있습니다.
1. SRP (Single Responsibility Principle) - 단일 책임 원칙
-각 클래스는 하나의 책임만을 가져야하며 그 클래스는 그 하나의 책임을 수행하는데 집중되어야 한다는 원칙입니다. 이 SRP는 클래스의 응집도를 높이고 결합도를 낮추는데 도움이 됩니다.
예를 들어, 한 클래스에서 데이터베이스 관리, 스레드 통신, 결제 처리 등등의 기능을 다 포함하고 있따면 유지보수도 어려워지고 코드의 가독성도 떨어지게 됩니다. 따라서 데이터 베이스관리, 스레드통신, 결제처리 를 각각의 클래스로 나눠서 처리해야 SRP를 만족합니다.
2.OCP (Open/Closed Principle) - 개방/ 폐쇄 원칙
-소프트웨어 객체는 확장에는 열려 있고 변경에는 닫혀 있어야한다는 원칙입니다.이 OCP는 기존 코드를 변경하지 않고 기능 확장이 가능해지는데 도움이 됩니다.
예를 들어, 도형을 그리는 프로그램을 만들때 원,사각형,삼각형,오각형 등의 다양한 도형을 그려야 하는데, 이걸만약 인터페이스 없이 클래스로만 구현을 하게되면 도형을 그릴때마다 아예 새로운 클래스를 만들어 구현을 해야합니다. 하지만 도형이라는 인터페이스를 구현을 한 뒤 각 도형을 그릴때마다 인터페이스를 상속한 클래스를 만들면 OCP를 만족하여 유지보수가 용이해 집니다.
3.LSP (Liskov Substitution Principle) - 리스코프 치환 원칙
-하위 타입은 상위 타입을 대체할 수 있어야 한다는 원칙입니다.이는 상속 관계에서의 호환성을 보장하며 코드의 유연성과 재사용성 증가에 도움이 됩니다.
예를 들어, 도형이라는 클래스가 있고 이를 상속받은 사각형 클래스가 있고, 도형 클래스에는 draw(), rotate()의 메소드가 있다고 가정을 했을때, 사각형 클래스의 메소드들을 도형 클래스의 메소드로 대체해도 문제가 없어야 LSP를 만족하는 것입니다.
4.ISP (Interface Segregation Principle) - 인터페이스 분리 원칙
-인터페이스는 자신이 제공하는 메서드들만을 클라이언트가 사용하도록 해야 한다는것을 의미하는 원칙입니다.이는 클라이언트와 서버간의 의존성을 줄펴주고 인터페이스의 복잡도를 낮춰줍니다.
예를 들어, smartphone 이라는 인터페이스가 있다고 가정을 하겠습니다 이 인터페이스는 전화를 걸 수 있는 call() 메서드만 제공을 한다고 가정을 할게요. 그런데 이 smartphone을 구현하는 다양한 클래스들 중에서 카메라를 사용하는 camera()메서드, 인터넷을 사용하는 Internet() 메소드 등을 제공하는 클래스 들도 있을겁니다. 이런경우에는 인터페이스를 하나로 두는게 아닌 smartphone_camera,smartphone_internet과같은 인터페이스로 분리해서 구현을 해야 ISP를 만족하는 것 입니다.
5.DIP (Dependency Inbersion Principle) - 의존관계 역전 원칙
-의존성 역전 원칙이라고 불리고 상위모듈은 하위모듈에 의존하지 않도록 해야한다는 것을 의미하는 원칙입니다. 이는 시스템을 더 유연하고 변경에 대한 영향을 최소화 할 수 있습니다.즉, 의존관계를 맺을때 구체화된 클래스에 의존하기 보다는 추상적인 클래스,인터페이스에 의존을 해야한다는 원칙입니다.
예를들어, 무슨 API를 가져와서 코드를 작성을 한다고 가정을 하겠습니다.이렇게 작성된 코드는 이 API에 의존을 하게 됩니다. 여기서 갑자기 API 내부코드가 변경되거나 다른 API로 교체를 해야할 경우 모든 코드를 변경해야합니다. 이런 상황을 막기위해 이 API를 인터페이스를 활용해 만들어 인터페이스가 API에 의존하게 만듭니다. 이러면 API 내부코드가 변경되거나 교체해야 될때 전체코드가아닌 인터페이스 코드만 바꾸면 되기에 DIP를 만족하는 것 입니다.
'자바' 카테고리의 다른 글
자바 예외처리 (try-catch) (0) | 2023.05.12 |
---|---|
객체지향이란? (2) | 2023.05.08 |
- Total
- Today
- Yesterday
- 컴퓨터구조
- 인공지능
- 쿼리
- 배포
- 깃
- 테이블
- 데이터베이스
- IP주소
- 메세지큐
- 포트포워딩
- sql
- 데이터
- 웹소켓
- 프로토콜
- 자동화
- 자바
- 스프링
- 보안
- DB
- 소프트웨어공학
- nat
- 깃허브
- 문법
- 컨테이너
- 네트워크
- 파인튜닝
- 도커
- 클라우드
- JPA
- 서버
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |