객체지향

객체지향프로그래밍

[SOLID 원칙] 5. Dependency Inversion Principle 의존관계 역전 원칙

Dependency Inversion Principle 의존관계 역전 원칙 정의 : 상위 모듈이 하위 모듈에 의존하는게 아니라 상위모듈과 하위모듈 모두 인터페이스(추상화)에 의존해야 한다. 의존관계 역전이란 말이 처음에는 와닿기 힘들다. 따라서 아래의 그림을 비교해서 보면 이해가 조금더 쉬울것 같다. 아래의 그림과 같이 상위모듈이 하위모듈에 의존하는 경우 하나의 하위모듈만 수정을 해도 상위모듈은 영향을 받게 되는 문제점이 있다. 따라서 인터페이스(추상화)를 통해 의존성을 상위모듈->하위모듈 에서 하위모듈->인터페이스 로 역전시켜준다. 이런 식으로 디자인을 변경하면 상위모듈에서 인터페이스를 가지고 있기 때문에 ownership도 가지게 된다. 왜냐하면 인터페이스란 "변하지 않는 것"의 다른말이기 때문에 하..

객체지향프로그래밍

[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 원칙] 1. Single Responsibility Principle 단일 책임 원칙

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

객체지향프로그래밍

객체지향 패러다임

객체지향 패러다임 패러다임이란 한 시대의 사람들의 견해나 사고를 근본적으로 규정하고 있는 인식의 체계. 또는, 사물에 대한 이론적인 틀이나 체계. 을 의미한다. 그러면 객체지향 패러다임은 객체지향적인 사고의 틀을 의미하는데 프로그래밍에서 객체지향은 프로그램의 각 기능과 데이터를 객체로 바라보는 사고를 의미한다. 객체의 기본이 되는 단위는 Class인데 Class는 아래와 같이 정의 된다. Class = ADT(Abstract Data Type) + Inheritance + Polymorphism ADT(Abstract Data Type) ADT 즉, 추상 자료형을 한마디로 정의하면 관련된 데이터와 오퍼레이션을 모은 것이다. 이렇게 했을 때 장점은 1. 관리, 수정 용이 2. 캡슐화로 해당 ADT를 사용하..

자유로운 범고래
'객체지향' 태그의 글 목록