cgy12306

[JAVA] 객체 지향의 설계 5원칙 - SOLID 본문

Programming/JAVA

[JAVA] 객체 지향의 설계 5원칙 - SOLID

cgy12306 2022. 1. 3. 04:13

SRP

SRP(Single reponsibility principle, 단일 책임 원칙) : 한 클래스는 하나의 책임만 가져야 한다.

  • SRP 위배되는 예
class 사람 {
    final static Boolean 남성 = true;
    final static Boolean 여성 = false;
    boolean 성별;

    void 군대(){
        if(this.성별 == 남성) {
            // 군대를 간다
        }
        else{
            // 군대를 가지 않는다.
        }
    }
}
  • SRP 원칙 위배하지 않는 경우
abstract class 사람 {
    abstract void 군대();
}
class 남성 extends 사람{
    void 군대(){
        // 군대를 간다.
    }
}
class 여성 extends 사람{
    void 군대(){
        // 군대를 가지 않는다.
    }
}

OCP

OCP(Open/closed principle,개방 폐쇄 원칙) : 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.

  • OCP 위배되는 경우

  • OCP 원칙 적용

상위 클래스 또는 인터페이스를 중간에 둠으로써 다양한 객체가 생긴다 해도 행위에는 영향을 미치지 않음

 

LSP

LSP(Liskov subsititution principle, 리스코프 치환 원칙) : 서브 타입은 언제나 자신의 기반 타입(base type)으로 교체할 수 있어야 한다. 즉, 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는 데 문제가 없어야 한다.

  • LSP 원칙 위배 (계층도/조직도)

  • LSP 원칙 적용(분류도)

ISP

ISP(Interface segregation principle, 인터페이스 분리 원칙) : 클라이언트는 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안된다.

  • ISP 원칙 위배
public interface sports {
    void swimmming();
    void throwing();
}

public class swim implements sports {
    public void swimming() {}
    public void throwing() {}
}

swimming()만 하고 싶지만 sports에 throwing()도 구현해줘야 함.

  • ISP 원칙 적용
public interface Swim {
    void swimmming();
}
public interface Throw{
    void throwing();
}

public class swim implements Swim {
    void swim(){}
}

DIP

  • DIP 원칙 위배

 

  • DIP 원칙 적용

스노우타이어는 계절이 바뀌면 일반 타이어로 바꿔야 하는데 교체할 때 자동차는 그 영향에 노출돼 있음. 그래서 추상화된 타이어 인터페이스에만 의존하게 함으로써 스노우타이어가 다른 타이어로 변경돼도 자동차는 영향을 받지 않는 형태로 구성됨

 

출처 : 스프링 입문을 위한 자바 객체 지향의 원리와 이해

'Programming > JAVA' 카테고리의 다른 글

[JAVA] 객체 지향의 4대 특성  (0) 2022.01.03
[JAVA] JAVA 작동 원리  (0) 2022.01.03
Comments