고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 된다. 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다. 고수준 모듈 : 의미 있는 단일 기능을 제공하는 모듈 저수준 모듈 : 고수준 모듈 기능을 구현하기 위해 필요한 하위 기능의 실제 구현 예를 들어 상품의 가격을 결정하는 정책을 살펴보자. 고수준 : 쿠폰을 적용해서 가격 할인을 받을 수 있다. 저수준 : 가격 할인을 %로 할 것인가, 고정된 금액으로 할 것인가 등등... 만약 고수준인 '가격계산모듈'이 저소준 모듈(쿠폰 구현)에 의존한다면 어떤 문제가 생길까? 쿠폰 구현이 추가되거나 변경될 때마다 가격계산모듈의 코드에도 변경사항이 생길 것이다. 이러면 기능변경에 따른 프로그램의 변경이 어려워진다. 저소준 모듈이 변경되더라도 고소준 모듈..
인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다. 바꿔 말하면, 클라이언트는 자신이 사용하는 메소드에만 의존해야 한다. 다음 예제를 살펴보자. 게시글과 관련한 UI들이 모두 ArticleService 인터페이스를 구현하고 있다. 겉으로 보기에는 아무런 문제가 없어 보이지만.. 예를 들어 게시글 목록 관련된 메소드가 추가된다고 생각해보자. 그러면 게시글 목록 UI와 관련이 없는 게시글 작성 UI, 게시글 삭제 UI 에도 해당 메소드를 추가로 구현해야 할 것이다. 이는 단일책임원칙(SRP)이 위배된 것과 마찬가지로 한 기능의 변화가 다른 기능에 영향을 주고 있으므로 피해야할 상황이다. 그럼 이 문제를 어떻게 해결할 수 있을까? 위와 같이 인터페이스를 분리하면 된다. 이제 각 인터페이..
상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다. 무슨 말인지 모르겠다. 예제 코드로 살펴보자. 리스코프가 잘 지켜지지 않은 사례 : 직사각형-정사각형 문제 public class Rectangle{ private int width; private int height; public void setWidth(int width){ this.width = width; } public void setHeight(int height){ this.height = height; } public int getWidth(){ return width; } public int getHeight(){ return height; } } public class Square..
클래스는 단 한 개의 책임을 가져야 한다. 단일 책임 원칙이 지켜지지 않은 예 public class DataViewer{ public void display(){ String data = loadHtml(); updateGui(data); } public String loadHtml(){ HttpClient client = new HttpClient(); client.connect(url); return client.getResponse(); } private void updateGui(String data){ GuiData guiModel = parseDataToGuiData(data); tableUI.changeData(guiModel); } private GuidData parseDataToGui..
- Total
- Today
- Yesterday
- 자바
- 코테
- 토비
- java
- c++
- 프록시패턴
- ec2
- SOLID
- OOP
- AOP
- 카카오
- 메서드레퍼런스
- 예외처리
- 코딩테스트
- 프로그래머스
- 템플릿콜백
- 토비의스프링
- 프록시
- 토비의봄TV
- 디자인패턴
- 데코레이터패턴
- 자바스터디
- gracefulshutdown
- 객체지향
- 서비스추상화
- 스프링
- 김영한
- BOJ
- 백기선
- provider
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |