설계원칙으로 유명한 SOLID 원칙에 대해 하나씩 알아보겠습니다
단일 책임 원칙 (Single Responsibility Principle)
• 어떤 클래스나 모듈 , 메서드가 하나의 기능을 가져야 한다는 의미
• 모든 클래스는 단 하나의 책임만 가짐 -> 변경사항 발생 시 그 변경사항에 책임이 있는 부분만 수정
ex) A 모듈 : 특정 데이터를 분석 , 서버에 전송
A 모듈은 2가지 이유로 변경될 수 있다
1. 특정 데이터 분석 알고리즘 변경
2. 서버에 전송하는 형식 변경
실제로는 분리된 책임이며, 따라서 분리된 클래스 모듈로 나눠야한다
🔍 왜 이렇게까지 한 클래스에 한 책임만 가져야하는가
클래스를 더욱 튼튼하게 한다 (변경사항이 다른 책임에 영향을 주지 않으므로, 유지보수 용이)
개방 - 폐쇄 원칙 (Open Closed Principle)
• 확장에는 열려있어야하고, 수정에 대해서는 닫혀있어야한다는 원칙
• 변경사항이 발생하더라도 다른 코드, 모듈엔 영향이 없도록 (즉 코드 확장은 OK, 그 코드 자체 수정은 X)
• 객체지향 프로그래밍의 핵심 원칙, 이 원칙을 따르지 않는다면 객체지향의 장점인 유연성, 재사용성, 유지보수성을 얻을 수 없다
리스코프 치환 원칙 (Liskov Substitution Principle)
• 다운캐스팅된 인스턴스가 제대로 수행될 수 있어야한다
• 즉, 부모클래스를 자식클래스로 치환해도 제대로 수행되어야 한다
인터페이스 분리 원칙 (Interface Segregation Principle)
• 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙
• 큰 기능의 인터페이스들을 구체적이고 작은 단위들로 분리함으로써 클래스들이 꼭 필요한 메서드만 이용할 수 있게 한다
• 시스템 내부 의존성을 약화해 리팩토링, 수정, 재배포가 쉽게 될 수 있다
abstract class Bird {
abstract fun fly()
abstract fun cry()
}
class Eagle : Bird {
@Override
fun fly() {}
@Override
fun cry() {}
}
class Penguin : Bird {
@Override
fun cry() {}
}
Penguin은 날지못하므로, fly를 가지면 ISP에 어긋나기 때문에
fly()를 interface로 분리하고 날 수 있는 새에만 구현 시키므로 ISP 원칙을 지킬 수 있다
의존 역전 원칙 (Dependency Inversion Principle)
• 상위 계층이 하위계층에 의존하는 관계를 역전 시킴으로써 상위 계층이 하위계층의 구현으로부터 독립
• 객체는 추상클래스, 인터페이스에 의존해야함
• 즉, 변화가 없는 것에 의존해야한다
객체 지향 프로그래밍 설계 원칙에 해당하는 SOLID에 대해 알아봤습니다
저는 '아키텍처를 알아야 앱 개발이 보인다'라는 책을 참고했고
이 책 진짜 추천드립니다 :)
틀린 부분이 있다며느 언제든 댓글로 남겨주세요 :)
'📱 Android' 카테고리의 다른 글
[Hilt] Hilt 익히기 #2 - Dagger 복습하기 (주요 Annotation) (0) | 2023.01.30 |
---|---|
[Android] Clean Architecture (0) | 2023.01.08 |
[Hilt] 코드랩으로 Hilt 익히기 # 1 (0) | 2023.01.07 |
DI (Dependency Injection) 의존성 주입 (0) | 2022.12.05 |
[Android] Custom Spinner (0) | 2022.08.09 |