목록기술 서적/OOP (13)
개발자는 기록이 답이다
객체지향 프로그래밍의 장점 중 하나는 코드를 재사용하기가 용이하다는 것이다. 전통적인 패러다임 에서 코드를 재사용하는 방법은 코드를 복사한 후 수정하는 것이다. 객체지향은 조금 다른 방법을 취한다. 객체지향에서는 코드를 재사용하기 위해 '새로운 코드를 추가한다. 객체지향에서 코드는 일반적으로 클래스 안에 작성되기 때문에 객체지향에서 클래스를 재사용하는 전통적인 방법은 새로운 클래스를 추가하는 것이다. 클래스를 재사용하기 위해 새로운 클래스를 추가하는 방법 상속 : 재사용 관점에서 클래스 안에 정의된 인스턴스 변수와 메서드를 자동으로 새로운 클래스에 추가하는 방법 합성 : 새로운 클래스의 인스턴스 안에 기존 클래스의 인스턴스를 포함시키는 방법 (11장에서는 합성에 관해 자세히 살펴보고 상속과 합성의 장단점..
8장에서는 유연하고 재사용 가능한 설계를 만들기 위해 적용할 수 있는 다양한 의존성 관리기법을 학습했다. 이번 장에서는 해당 기법들을 원칙이라는 관점에서 정리하고자 한다. 앞 장의 내용이 반복된다는 느낌을 받을 수 있겠지만, 이름을 가진 설계 원칙을 통해 기법들을 정리하는 것은 장황하게 설명된 개념과 매커니즘을 또렷하게 정리할 수 있게 도와줄 뿐만 아니라 설계를 논의할때 사용할 수 있는 공통의 어휘를 익힌다는 점에서도 가치가 있다. 1. 개방-폐쇄 원칙 로버트 마틴은 확장 가능하고 변화에 유연하게 대응할 수 있는 설계를 만들 수 있는 원칙 중 하나로 개방-폐쇄 원칙(Open-Closed Principle, OCP)을 고안했다. 소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려있어야하고, 수..
사람의 기억은 단기 기억과 장기 기억으로 분류할 수 있다 단기 기억 : 보관돼 있는 지식에 직접 접근할 수 있지만 정보를 보관할 수 있는 속도와 공간적 측면이 모두 제약을 받는다 장기 기억 : 경험한 내용을 수개월에서 길게는 평생에 걸쳐 보관하는 장소 일반적으로 장기 기억안에 보관돼 있는 지식은 직접 접근하는 것이 불가능하고, 먼저 단기 기억 영역으로 옮긴 후에 처리해야 한다 실제로 문제를 해결하기 위해 사용하는 저장소는 단기 기억이다. 하지만 문제 해결에 필요한 요소가 단기 기억의 용량을 초과하는 순간 문제 해결 능력은 급격히 떨어지는 인지 과부하(cognitvie overload)현상이 발생한다. 인지 과부하를 방지하기 위해 단기 기억 안에 보관할 정보의 양을 조절한다 한번에 다뤄야 하는 정보와 수를..
4. 자율적인 객체를 향해 캡슐화를 지켜라 캡슐화는 설계의 제 1원리이다. 데이터 중심의 설계가 낮은 응집도와 높은 결합도라는 문제를 가진 것은 캡슐화의 원칙을 위반했기 때문이다. 객체는 자신이 어떤 데이터를 가지고 있는지를 내부에 캡슐화하고 외부에 공개하면 안된다. 스스로의 상태를 책임져야 하며 외부에서는 인터페이스에 정의된 메서드를 통해서만 상태에 접근할 수 있어야 한다. 여기서 메서드란 단순히 속성 하나의 값을 반환하거나 변경하는 접근자나 수정자를 의미하는게 아니다! 객체가 책임져야 하는 무언가를 수행하는 메서드다! 속성의 가시성을 private으로 설정했다고 해도 접근자와 수정자를 통해 속성을 외부로 제공하고 있다면 캡슐화를 위반하는 것이다. 사각형을 표현하는 간단한 클래스를 살펴보자. 아래 클래..