Android 공부/Android 아키텍처

모바일 아키텍처 개론 - 앱 안정성 및 확장성 강화를 위한 Android 아키텍처(1)

Machine_웅 2022. 8. 23. 19:51
728x90
반응형

 

1. 복잡성 제거 - 좋은 설계를 위한 첫 걸음

1)  복잡성을 조장하는 요인 세가지

  - 의존성 

  ( 코드가 독립적으로 이해되고,  수정 될 수 없을때. -> 없앨수는 없으나 최소화해야함. )

 

  - 불명확성

  ( 중요한 정보가 불명확할 때  - 특정 메소드의 인풋 아웃풋이 불명확 , 과정이 불명확 )

 

  - 전술적 프로그래밍 ( <=> 전략적 프로그래밍 )

  ( 빨리 완성하기 - 지금 있는 문제만 고려하고 수정하는 문제 ) 

 

2) 복잡성을 낮추는 방법 

 추상화  - 정보에 대한 간단한 시나리오나, 시놉시스만 알면되는 것

 

깊은 모듈

- 모듈이 있다고 가정할 때에 사용자가 알아야 하는 것은 단순하게 사용할수 있는 메서드나 클래스여야 한다

- 하나의 기능을 사용하기 위해 계속해서 모듈의 메서들을 호출하는 것은 얕은 모듈이고 깊이가 얕고 넓게 된다 

- 좋은 모듈의 예 File IO :  open 만 사용하면 , 파일의 종류나 구조나 포인터 등을 알지 않아도 사용할 수 있음.

- 나쁜 모듈의 예 wraper Class :  인터페이스들만 제공하면서, 원래 감추려고 하는것들을 노출시켜서 얕게 만들어준다. 

 

범용 인터페이스

- 여기저기에서 사용되고, 재사용 될 수 있는것. 

 ( 다른곳에서 사용할 수 있도록 , 세부사항을 감춰주고 public api 줌으로 그걸로 사용할 수있도록 하는 것 )

- 전술적 프로그래밍을 해결할 수 있다. 

 

< 범용 인터페이스인가를 판단하기 위한 질문 >

- 가장 심플한가 ?  => 복잡성을 감출수 있는가?

 

 

 정보은닉

- 불필요한 정보를 감추기 : 사용되지 않는 부분에 대해서는 감춰야 한다. 

 ex 모두 public 으로 되어있거나, 쓸모없이 set 이 있는경우 

 

- 정보노출 : 특정 클래스안서만 사용되어야 하는  정보가 노출되있음으로, 누군가가 사용하게 된다면 엉뚱하게 사용하게 되는 문제가 된다 

- 과다노출

 

 

깔끔한 추상화

끌어내린다 => 숨긴다. 

위에 bad 케이스를 개선하려면

getBufSize() 와 adjustBufSize() 메소드를 private 로 바꾼뒤 

readNext()안에서 호출하여 사용하는 방식으로 개선 

 

* 주의 - 재사용되지 않는 getBufSize() 와 adjustBufSize()  를 나누지 않고 만드는것은 좋은 방법이 아니다. 


2. SOLID 원칙 - 좋은 아키텍처를 위한 원칙

높은 응집도  - 하나의 모듈안에서 일어나는, 필요한 구현들, 책임들은 그안에서 해결이 되어야 한다. 

낮은 결합도  - 하나의 모듈을 만들기위해 다른 클래스의 기능이 가지고 와야한다면  높은 결합도인것이다. 

 

 

1) 단일책임원칙

 

위 클래스를 그럼 수정을 하려면 어떻게 해야할까??    => 퍼사트 패턴을 이용한다. 

 

 

2) 개방 폐쇄원칙

열려있다

 - > 데이터 구조에 새로운 필드나 함수를 추가 할수 있어야 한다. 

 

닫혀 있다 

-  >  내부코드의 변경으로 외부 사용자의 입장에서 사용하는데 바뀌면 안된다.

 

* 클래스 사이에서도 개방 폐쇄 원칙이 유지되어야 한다 ( 의존관계 같은 문제 - 하위계층에 의존하지 않도록  ) 

=> 하위 클래스의 변경이 있어도, 상위에서 변경되지 않도록 

 

 

 

3) 리스코프 치환 원칙

 

 

* 부모에서 정의한 행위가 있다고하면, 상속받은 자식에서도 그 원칙이 유지되어야 한다.

 

4) 인터페이스 분리원칙

* 자신이 사용하는 것에만 의존 해야한다. 

* 제너레이터가 훨씬 하위계층까지 의존성을 가지게된다 사용하지 않음에도....

 

 

 

5) 의존성 역전 원칙

* 의존성의 방향은 상위가 하위에 영향을 받으면 안된다.

* 추상팩토리 패턴

* 생성도 사용도 인터페이스만 알면 할수 있다. 

 

 

 

 

 


출처 : The RED : 강사룡의 앱 안정성 및 확장성 강화를 위한 Android 아키텍처 강의

 

728x90
반응형