인터페이스 분리 원칙 - Kotlin 예시

dev210·2023년 10월 9일
0

SOLID 원칙

목록 보기
4/5

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

- 한 클래스는 자신이 사용하는 인터페이스만 구현해야한다.
- 인터페이스는 해당 인터페이스를 사용하는 클라이언트를 기준으로 잘게 분리되어야한다.

예시

다음과 같이 LocalDatabase와 RemoteDatabase를 추상화하는 DB 인터페이스가 있다고 가정하자.
해당 인터페이스에는 crud와 LocalDatabase에서만 사용할 isSameDataList, RemoteDatabase에서 사용하는 getFirstData 함수를 포함한다.
이 경우, LocalDatabase와 RemoteDatabase는 자신이 사용하지 않는 메소드들도 오버라이딩을 하게된다.
이를 각각의 기능에 맞게 인터페이스를 분리해서 사용하게 하는 것이 인터페이스 분리 원칙이다.

interface DB {  
  
    fun create()  
  
    fun read(data: String)  
  
    fun upload(data:String)  
  
    fun delete(data: String)  
      
    fun getFirstData(data: String)  
      
    fun isSameDataList(list: List<String>)  
  
}

class LocalDatabase : DB{  

	... (crud)

    override fun getFirstData(data: String) {  
        // not use  
    }  
  
    override fun isSameDataList(list: List<String>) {  
		...
    }  
  
}

class RemoteDatabase : DB{  

	... (crud)
  
    override fun getFirstData(data: String) {  
        ...  
    }  
  
    override fun isSameDataList(list: List<String>) {  
        // not use  
    }  
  
}

LocalDB, RemoteDB 인터페이스에서 각자 사용할 함수를 정의하여 사용할 Database의 종류의 맞게 인터페이스를 구현하여 사용하게 된다.

interface DB {  
  
    fun create()  
  
    fun read(data: String)  
  
    fun upload(data:String)  
  
    fun delete(data: String)  
  
}

interface LocalDB {  
    fun isSameDataList(list: List<String>)  
}

interface RemoteDB {  
    fun getFirstData(data: String)  
}

class LocalDatabase : DB, LocalDB{  
    
	... (crud)
  
    override fun isSameDataList(list: List<String>) {  
		...
    }  
  
}

class RemoteDatabase : DB, RemoteDB{  

	... (crud)
  
    override fun getFirstData(data: String) {  
		...
    }  
  
}
profile
안드로이드 개발자

0개의 댓글