
자 마흔 여섯 번째 키워드인 '개방 폐쇄 원칙'을 알아 볼 것이다.
이번 키워드는 이전 키워드인 LSP처럼 SOLID원칙중 하나 이므로
직접 코드로 알아보았다.

개방-폐쇄 원칙(Open-Closed Principle, OCP)은 소프트웨어 설계의 원칙 중 하나로, 소프트웨어의 구성 요소(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하지만, 수정에는 닫혀 있어야 한다는 원칙이다.
이것은 새로운 기능이나 요구 사항이 추가될 때 기존의 코드를 수정하지 않고 새로운 코드를 추가하여 기능을 확장할 수 있어야 함을 의미한다.
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을 많이 열어놓는지
이번 키워드를 통해서 알게 되었다.
일단 내 코드에 적용을 하며 고쳐봐야 할 것 같다..