객체지향 3. 객체지향 설계 5원칙 SOLID

min seung moon·2021년 6월 24일
1

Spring

목록 보기
4/50

1. 응집도와 결합도

  • 좋은 소프트웨어 설계를 위해서는 결합도(coupling)는 낮추고 응집도(cohesion)은 높여야 한다
  • 결합도
    • 모듈(클래스)간의 상호 의존 정도를 나타내는 지표로써 결합도가 낮으면 모듈간의 상호 의존성이 줄어들어서 객체의 재사용 및 유지보수가 유리
  • 응집도
    • 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성으로 응집도가 높은 모듈은 하나의 책임에 집중하고 독립성이 높아져, 재사용 및 유지보수가 용이

01. SPR(Single Responsibility Principle)

  • 어떠한 클래스를 변경해야 하는 이유는 한가지 뿐 이어야 한다.


  • 절차지향적 코딩
class Unit {
	private String name;
    private int speed;
    
    public void attack() {
    
    }
    
    public void move() {
    	if (name.equals("저글링")
        	speed += 3;
        else if (name.equals("탱크")) {
        	if ("탱크 모드")
            	speed = 0;
            else
            	speed = 10;
        }else if(name.equals("정찰기")) {
        	speed = 15;
            	충돌 = false;
        }
    }
}
  • 객체지향적 코딩
class 저글링 extends Unit {
	public void move() {
    		this.speed += 3;
    	}
}

class 탱크 extends Unit {
	public void move() {
    		if ("탱크 모드")
        		this.speed = 0;
       		else
        		this.speed = 10;
    	}
}

class 정찰기 extends Unit {
	public void 정찰기() {
    	this.충돌 = false;
    }
	public void move() {
    		this.speed = 15;
    	}
}

02. OCP(Open Closed Principle) 개방 폐쇄 원칙

  • 자신의 확장에는 열려있고, 주변의 변화에 대해서는 닫혀 있어야 한다.
  • 상위 클래스 또는 인터페이스를 중간에 둠으로써, 자신은 변화에 대해서는 폐쇄적이지만, 인터페이스는 외부의 변화에 대해서 확장을 개방해 줄 수 있다
  • 이러한 부분은 JDBC와 Mybatis, Hibernate 등 JAVA에서는 Stream(Input, Out)에서 찾아볼 수 있다

03. LSP(Likkov Substitution Principle) 리스코프 치환 원칙

  • 서브 타입은 언제나 자신의 기반(상위) 타입으로 교체할 수 있어야 한다.

04. ISP(Interface Segregation Principle) 인터페이스 분리 원칙

  • 클라이언트는 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안된다.
  • 프로젝트 요구 사항과 설계에 따라서 SRP(단일책임원칙) / ISP(인터페이스분리원칙)를 선택한다

05. DIP(Dependency Inversion Principle) 의존 역전 원칙

  • 자신보다 변하기 쉬운 것에 의존하지 말아야 한다.
  • 개발 폐쇄 원칙에서도 살펴본 부분이다.
  • SOLID는 객체 지향 4대 특성에 기반함으로써 유사한 모양을 가지고 있다.
profile
아직까지는 코린이!

0개의 댓글