티스토리 뷰

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