Solid

객체지향프로그래밍

[SOLID 원칙] 3. Liskov Substitution Principle 리스코프 치환 원칙

Liskov Substitution Principle 리스코프 치환 원칙 정의 : Derived class는 Base class로 반드시 대체 될 수 있어야 한다. 예를 들어 아래와 같은 관계의 클래스가 있을 때 Base myBase = new Derived(); myBase.funcA(); myBase.funcB(); myBase.funcC(); myBase.funcD(); 리스코프 치환 원칙을 위반한 예 Base로 치환된 new Derived가 코드가 문제 없이 모든 메소드를 호출할 수 있어야 한다. 위의 코드가 안되는 경우가 있을까? 아마 java나 c++에서는 컴파일 에러를 발생시키기 때문에 코드 실행이 안되는 경우는 없을 것이다. 그러나 논리적으로 안되게 하는 방법이 있는데 그 예는 java.u..

객체지향프로그래밍

[SOLID 원칙] 2. Open Closed Principle 개방-폐쇄 원칙

Open Closed Principle 개방-폐쇄 원칙 정의 : SW entities(클래스, 모듈, 함수등)의 확장에는 열려있고 코드 수정에는 닫혀있어야 하는 원칙 조금 더 직관적으로 말하면 기존의 코드 수정없이 새로운 클래스등을 프로그램에 추가하는 것을 의미한다. 개방-폐쇄 원칙을 지키지 않은 경우에는 클래스가 추가 될 때마다 기존 코드의 수정이 발생하게 되는 문제가 있다. 클래스가 한두개 추가된다면 문제가 없겠지만 수십개가 추가되는 경우라면 OCP 원칙을 기억하면 좋겠다. 개방-폐쇄 원칙을 위반한 예 예를들어 HRManager에서 모든 Employee의 Salary를 계산해야 한다고 가정하자. 아래와 같이 디자인한 경우 각자의 Employee(Developer, Staff, Marketer)의 sa..

객체지향프로그래밍

[SOLID 원칙] 1. Single Responsibility Principle 단일 책임 원칙

OOP에서 SOLID와 같은 원칙은 왜 필요할까? 원칙이 필요한 이유는 바록 나쁜 디자인을 예방하거나 고치기 위함이다. 그러면 나쁜 디자인이란 어떤것일까? 여러가지가 있겠지만 우선 아래와 같은 항목들로 정리해볼 수 있다. 유연하게 변화하지 못하는 경직성(Rigidity), 코드를 수정할 때 다른 코드까지 영향을 주는 취약성(Fragility), 모듈간 커플링이 높아 재사용이 어려운 부동성(Immobility), 나쁜 코드가 쉽게 추가될 수 있는 점착성(Viscosity), 불필요한 복잡성(Needless Complexity), 불필요한 반복(Needless Repetition), 불투명성등이 있겠다. 따라서 위와 같은 문제를 예방하거나 고치기 위해서는 개발 원칙을 준수하며 설계를 하는게 바람직하다. 그 ..

자유로운 범고래
'Solid' 태그의 글 목록