DIP(Dependency Inversion Principle)는 의존관계역전의 원칙이다. A라는 객체가 B라는 객체를 포함하고 있는 경우, B가 A객체를 호출해야 하는 일이 필요할 수 있다. 즉, 하이 레벨 모듈이 로우 레벨 모듈을 의존하는 구조, 추상이 상세를 의존하는 구조적 디자인, 이런 경우 의존관계연전 이라고 하게 된다. 이를 해결하기 위해서는 단순 컨크리트 클래스를 참조하기 보다는 참조하는 것을 추상화시켜서 참조하는 것이 좋다. 즉, 인터페이스에 의존해야한다. 이유는 자주 변경되는 컨크리트 클래스보다 추상클래스, 인터페이스가 의존을 느슨하게 하기 때문이다.
ISP( Interface Segregation Principle ) : 많은 클라이언트 고유의 인터페이스는 하나의 범용 인터페이스보다 우수하다. 즉, 거대한 클래스가 있다면, 그것을 쪼개라. 다음과 같은 코드가 있다. public interface Worker { public void work(); public void eat(); } public class Staff implements Worker { @Override public void work() { System.out.println("Staff가 일한다."); } @Override public void eat() { System.out.println("Staff가 먹는다."); } } 위 코드는 일하는 사람이라는 Worker인터페이스를 Sta..
LSP(Liskov Substitution Principle)원칙은 서브타입은 언제나 기반타입으로 교체할 수 있어야한다는 원칙이다. SOLID에서 가장 이해하기 힘든 원칙이었다. (지금도... ) public class Rectangle { protected double width; protected double height; public double getWidth() { return width; } public void setWidth(double width) { this.width = width; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } publ..
SRP(Single Responsibility Principle)는 단일 책임의 원리로써, 한 클래스는 오직 하나의 책임만을 가진다는 것이다. 클래스를 만들다보면, 클래스가 여러기능을 하는 경우가 많다. 이런경우는 객체지향적 관점에서 좋지 않다. 다음과 같은 코드가 있다. public class Student { private String penColor; private int penThick; public Student(String penColor, int penThick) { this.penColor = penColor; this.penThick = penThick; } public String getPenColor() { return penColor; } public void setPenColor(..
OCP(Open Closed Principle)는 확장에는 열려있되, 수정에는 닫혀있어야한다는 디자인 원칙이다. 게임 캐릭터에서 궁수라는 캐릭터를 예를들어 설명해보겠다. 아래 클래스는 아처(캐릭터) 클래스와 활(무기) 클래스이다. public class Archer { private Bow bow; private int level; public Archer(int level) { bow = new Bow(); this.level = level; } public void Attack(){ StringBuilder sb = new StringBuilder(); sb.append("Archer가 데미지 "); sb.append(getPower()); sb.append("을(를) 입혔습니다."); System...
- Total
- Today
- Yesterday