클린코드

OCP: 개방 - 폐쇄 원칙

RE.YEOL 2023. 4. 14. 10:00
Single Responsibility principle : 단일 책임 원칙
Open Close Principle : 개방 폐쇄 원칙
Liscov Substitution Principle : 리스코프 치환 원칙
Interface Sergregation Principle: 인터페이스 분리 원칙
Dependency Inversion Principle : 의존성 역전 원칙

좋은 객체 지향 설계의 5가지 원칙 중 개방 폐쇄 원칙(OCP)에 대해 알아보겠습니다.


Open / Close Principle : 개방 폐쇄 원칙
확장에는 열려 있고, 변경에는 닫혀 있다.

 

회사에서 개발한 마우스는 모델 A와 모델 B가 있었으며, 코드는 다음과 같이 구성되어 있었습니다.

public int Sensitivity(String model){
    if(model.equalse("A"){
        // A 모델 감도 반환
    } else if(model.equalse("B"){
        // B 모델 감도 반환
    }
}

회사는 신제품을 출시할 예정이고 점점 성장하고 있는 추세이기 때문에 모델이 추가될 때마다 계속 if 문을 수정할 경우 문제가 발생할 수 있고 유지보수가 어렵습니다.

이 상황을 OCP를 지키지 않았다 보면됩니다.

 

OCP를 지키기 위해 아래와 같이 코드를 수정하였습니다.

public interfase sensitivity{
    int sensitivity();
}

감도를 의미하는 sensitivity 인터페이스를 구현했습니다.

class ModelA implements sensitivity{
	
    @Override
    public int sensitivity(int sensitivity){
    	// 모델 A 감도 반환
    }
    
}

class ModelB implements sensitivity{
	
    @Override
    public int sensitivity(int sensitivity){
    	// 모델 B 감도 반환
    }
    
}

class ModelC implements sensitivity{
	
    @Override
    public int sensitivity(int sensitivity){
    	// 모델 C 감도 반환
    }
    
}

이와 같이 모델 객체는 sensitivity 인터페이스를 상속받도록 하였습니다.

이렇게 수정하여 기능에 대해 확장 가능하지만,  코드의 변경에는 닫혀 있기 때문에 OCP를 준수했다고 볼 수 있습니다.