ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OOP 4대 원칙과 SOLID 5대 원칙
    다시한번 개발자도전! 2026. 1. 13. 17:25

    1. OOP 4대 원칙 (Object-Oriented Programming Pillars)

    객체지향 프로그래밍이라면 **"반드시 갖춰야 할 네 가지 성질"**

    캡슐화 (Encapsulation)

    • 의미: 데이터(변수)와 기능을 하나로 묶고, 외부에서 직접 접근하지 못하게 감추는 것임.
    • 목적: 데이터 보호 및 결합도 낮춤.

    상속 (Inheritance)

    • 의미: 부모 클래스의 특성을 자식 클래스가 물려받는 것임.
    • 목적: 코드의 재사용 및 계층 구조 형성.

    다형성 (Polymorphism)

    • 의미: 하나의 이름(메서드)이 상황에 따라 다르게 동작하는 성질임.
    • 목적: 코드의 유연함과 확장성 확보.

    추상화 (Abstraction)

    • 의미: 구체적인 구현보다는 핵심적인 개념(인터페이스)에 집중하는 것임.
    • 목적: 구조 단순화 및 의존성 감소.

     


    2. SOLID 5대 원칙 (Design Principles)

    이건 OOP의 성질을 이용해서 **"어떻게 하면 유지보수가 쉬운 좋은 코드를 짤 것인가?"**에 대한 구체적인 가이드라인임. (설계 지침)

    SRP (Single Responsibility Principle) - 단일 책임 원칙

    • 핵심: "하나의 클래스는 하나의 책임만 가져야 함."
    • 상세: 플레이어 클래스에 이동, 소리, 점수 계산을 다 넣지 말라는 것임. 이동은 Mover, 소리는 AudioPlayer로 쪼개야 함. 그래야 수정할 때 다른 기능이 안 터짐.
    • ex)  player 클래스 안에 이동로직, 사운드 재생 등 모든 걸 때려 넣으면 안 됨! 각 기능 분리

    OCP (Open-Closed Principle) - 개방-폐쇄 원칙

    • 핵심: "확장에는 열려 있고, 수정에는 닫혀 있어야 함."
    • 상세: 새로운 기능을 추가할 때 기존의 코드를 건드리지 않고도 가능하게 설계해야 함. 주로 상속이나 인터페이스를 통해 구현함.
    • ex)  몬스터가 새로 추가될때 마다 플레이어 공격 함수에 코드를 수정하면 안 됨! 추상화나 인터페이스 활용

    LSP (Liskov Substitution Principle) - 리스코프 치환 원칙

    • 핵심: "자식 클래스는 언제나 부모 클래스를 대체할 수 있어야 함."
    • 상세: 부모 클래스를 쓰는 곳에 자식 클래스를 넣어도 프로그램이 문제없이 돌아가야 함. 자식이 부모의 기능을 억지로 막거나 왜곡하면 안 됨.
    • ex)  '새' 클래스를 상속받은 '타조' 클래스. 부모의 Fly() 메서드를 호출했는데 타조는 못 날아서 에러를 뿜음.
    • 부모 클래스에는 공통된 확실한 기능만 넣거나, 인터페이스로 분리함.

    ISP (Interface Segregation Principle) - 인터페이스 분리 원칙

    • 핵심: "사용하지 않는 인터페이스에 의존하도록 강제하면 안 됨."
    • 상세: 너무 큰 인터페이스 하나보다, 작게 쪼개진 여러 개의 인터페이스가 낫다는 뜻임. (예: IMoveable, IAttackable 등으로 분리)
    • ex)  IUnit 인터페이스에 Move(), Attack(), Magic()을 다 넣으면 안 됨, 인터페이스 쪼개서 사용하기.

    DIP (Dependency Inversion Principle) - 의존 역전 원칙

    • 핵심: "추상화에 의존해야지, 구체화에 의존하면 안 됨."
    • 상세: 상위 모듈이 하위 모듈의 구체적인 구현을 직접 알게 하지 말고, 중간에 인터페이스를 둬서 서로 소통하게 만드는 것임.
    • ex) Player가 Sword 클래스를 직접 참조시. 무기를 Gun으로 바꾸려면 Player 코드를 다 뜯어고쳐야 함
    • 중간에 무기 인터페이스를 두어 관계의 결합도를 낮춤 
Designed by Tistory.