티스토리 뷰
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(String penColor) { this.penColor = penColor; } public int getPenThick() { return penThick; } public void setPenThick(int penThick) { this.penThick = penThick; } public void write(){ StringBuilder sb = new StringBuilder(); sb.append("사용자가 "); sb.append(penColor); sb.append("펜으로 글을 씁니다."); System.out.println(sb.toString()); } public void getPenInfo(){ StringBuilder sb = new StringBuilder(); sb.append("색 : "); sb.append(penColor); sb.append("두께 : "); sb.append(penThick); System.out.println(sb.toString()); } }
이 클래스는 SRP에 어긋난다. Student클래스가 Pen을 만들기 때문이다. 현실에서 학생은 원하는 펜을 사서 쓰지, 직접 만들지 않듯이 이도 분리해서 구현해야한다.
public class Pen { private String penColor; private int penThick; public Pen(String penColor, int penThick) { this.penColor = penColor; this.penThick = penThick; } public String getPenColor() { return penColor; } public void setPenColor(String penColor) { this.penColor = penColor; } public int getPenThick() { return penThick; } public void setPenThick(int penThick) { this.penThick = penThick; } public void getPenInfo(){ StringBuilder sb = new StringBuilder(); sb.append("색 : "); sb.append(penColor); sb.append(", 두께 : "); sb.append(penThick); System.out.println(sb.toString()); } }
위 처럼 펜이라는 클래스를 구현해보았다.
public class Student { private Pen pen; public void getPen(Pen pen){ this.pen = pen; } public void write(){ StringBuilder sb = new StringBuilder(); sb.append("사용자가 "); sb.append(pen.getPenColor()); sb.append("펜으로 글을 씁니다."); System.out.println(sb.toString()); } public void HasPen(){ pen.getPenInfo(); } }
이렇게 펜과 학생의 기능을하는 클래스를 구현하여 SRP를 지켰다.
'Paradigm > OOP' 카테고리의 다른 글
[OOP] Interface Segregation Principle (0) | 2013.10.29 |
---|---|
[OOP] Liskov Substitution Principle (0) | 2013.10.29 |
[OOP] Open-Closed Principle (0) | 2013.10.28 |
[OOP] 객제지향, 디자인 원리 (0) | 2013.09.27 |
[OOP] SRP 확인하기 (0) | 2013.09.27 |
최근에 올라온 글
최근에 달린 댓글
글 보관함
- Total
- Today
- Yesterday