[OOP/SOLID] 02. 개방 폐쇄 원칙(OCP)

Seoeun Park·2024년 6월 9일
0

OOP

목록 보기
2/3
post-thumbnail


🎭 객체지향 5원칙 (SOLID)

  1. 단일 책임 원칙(Single Responsibility Principle)
  2. 개방-폐쇄 원칙(Open-Closed Principle)
  3. 리스코프 치환 원칙(Liskov Substitution Principle)
  4. 인터페이스 분리 원칙(Interface Segregation Principle)
  5. 의존성 역전 원칙(Dependency Inversion Principle)

🎭 개방 폐쇄 원칙(OCP)란?

클래스, 모듈, 함수 등 소프트웨어 엔티티는 기존의 코드를 변경하지 않고도 새로운 기능이나 동작을 추가할 수 있어야하며, 기존의 코드는 안전하게 동작하고 있는 상태를 유지하면서 새로운 기능이나 변경이 필요한 경우에는 해당 부분만을 수정하고 나머지 코드에는 영향을 주지 않아야 한다.
즉, 확장은 개방되고, 변경에는 폐쇄되어야 한다.

객체 지향의 특징인 추상화다형성을 사용하면 해당 원칙을 지킬 수 있으며, 이를 주로 인터페이스(Interface)로 다룬다.


🎭 C# 예시

class Character
{
	protected string name;
    public string Name { get => name; set => name = value; } 
    
    public Character(string name, float hp)
    {
        //this.name = name;
        //this.hp = hp;

        Name = name;
        Hp = hp;
    }


    public override string ToString() => $"{name}, {hp}";
    
    public virtual void Move() //[추상성 - 가상화] 부모가 가상화 되어야 오버라이딩 가능.  키워드 : virtual
    {
        Debug.Log("Charater : 우측 방향 > 10만큼 이동");
    }
}

class Player : Character
{
    public Player()
        : base("None", -1) //base() : 부모 클래스
    {
        Debug.Log(ToString()); //부모한테 상속받음

    }

    public Player(string name, float hp)
        : base(name, hp) //base() : 부모 클래스
    {
        Debug.Log(ToString());
    }

    public override void Move() //자식의 필요에 의해서 재정의. 키워드 : override
    {
        base.Move(); //부모의 Move() 사용
        
        Debug.Log("Player : 전진 > 30만큼 이동");
    }
}

class Monster : Character
{
    public Monster(string name, float hp)
        :base(name, hp)
    {
        Debug.Log($"Monster  {ToString()}");
    }

    public override void Move() //Move() 재정의
    {
        Debug.Log("Monster : 후진 > 50만큼 이동");
        
    }
}

출처 :

profile
게임 개발 공부 시작!

0개의 댓글