📱 Android

[Android] SOLID 원칙

콩드로이드 2023. 1. 8. 14:17

설계원칙으로 유명한 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에 대해 알아봤습니다 

저는 '아키텍처를 알아야 앱 개발이 보인다'라는 책을 참고했고

이 책 진짜 추천드립니다 :)

 

틀린 부분이 있다며느 언제든 댓글로 남겨주세요 :)