개방폐쇄 원칙이 무엇일까?

박승우·2024년 6월 8일


자 마흔 여섯 번째 키워드인 '개방 폐쇄 원칙'을 알아 볼 것이다.

이번 키워드는 이전 키워드인 LSP처럼 SOLID원칙중 하나 이므로
직접 코드로 알아보았다.

개방-폐쇄 원칙(Open-Closed Principle, OCP)이 뭐에요?

개방-폐쇄 원칙(Open-Closed Principle, OCP)은 소프트웨어 설계의 원칙 중 하나로, 소프트웨어의 구성 요소(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하지만, 수정에는 닫혀 있어야 한다는 원칙이다.
이것은 새로운 기능이나 요구 사항이 추가될 때 기존의 코드를 수정하지 않고 새로운 코드를 추가하여 기능을 확장할 수 있어야 함을 의미한다.

예시코드 - Unity

using UnityEngine;

// 부모 클래스
public class Character
{
    protected string name;
    protected int health;

    public Character(string name, int health)
    {
        this.name = name;
        this.health = health;
    }

    public virtual void Move()
    {
        Debug.Log(name + " is moving.");
    }
}

// 자식 클래스
public class NPC : Character
{
    public NPC(string name, int health) : base(name, health)
    {
    }

    public override void Move()
    {
        Debug.Log(name + " is wandering.");
    }
}

코드 설명

  • Character 클래스는 게임 내의 캐릭터를 일반화하였다.
    새로운 캐릭터 타입이 필요하다면, 새로운 클래스를 만들어 Character 클래스를 상속받아 구현할 수 있습니다.
    이때, Character 클래스의 코드를 수정할 필요가 없습니다.

  • 개방-폐쇄 원칙은 소프트웨어 설계에서 변경의 영향을 최소화하고 재사용성을 높이는 데 중점을 둔다. 소프트웨어는 시간이 흐름에 따라 변화하고 발전해야 하지만, 이러한 변화가 코드 전체에 파급되어 다른 부분을 수정해야 한다면 시간과 비용이 증가할 수 있다고 한다.
    따라서 새로운 요구 사항이나 기능을 추가할 때는 가능한 한 기존 코드를 수정하지 않고도 새로운 기능을 추가할 수 있어야 한다.

이렇게 설계된 소프트웨어는 유연하고 확장 가능하며, 새로운 요구 사항이나
변경에 대응하기에 용이하다고 한다.

결론 - 느낀 점

리스코프 치환 원칙과 동일 코드로 개방폐쇄 원칙을 알아보았다. 이렇게 보니까 어떻게
원칙을 지켜야 할지, 왜 개방과 폐쇄를 해야하는지 알게 되었다.

무심코 프로퍼티를 열어놓는 경우가 많은데 왜 Set보다 Get을 많이 열어놓는지
이번 키워드를 통해서 알게 되었다.

일단 내 코드에 적용을 하며 고쳐봐야 할 것 같다..

profile
게임을 좋아하는 사람 입니다!

0개의 댓글