이 책의 1장에서는 객체지향을 실제 세계를 직접적이고, 직관적으로 모델링할 수 있는 패러다임 이라는 문장에 아래와 같이 해석하고 있다. 실세계의 모방이라는 객체지향의 개념은 훌륭한 프로그램을 설계하고 구현하는 실무적인 관점에서는 부적합하지만, 객체지향이라는 용어에 담긴 기본 사상을 이해라고 학습하는데 매우 효과적이다. 왜 훌륭한 프로그램의 설계에는 적합하지 않을까?! 하지만, 1장에서는 위 질문에 대한 대답은 주고 있지 않다. 오히려 실세계의 모방을 통해 객체지향의 개념에 대해 설명하고 있다. 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고, 객체를 이용해 시스템을 분할하는 방법이다. 1. 자율적인 객체란, 상태를 직접 관리하고, 상태 가반으로 스스로 판단하고 행동할 수 있음을 의미..
캐시 웹 캐시는 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치이다. 웹 요청이 캐시에 도착했을 때, 캐시된 로컬 사본이 존재한다면, 그 문서는 웹 서버가 아니라 캐시로부터 제공된다. - 불필요한 데이터 전송 감소 - 네트워크 병목 감소시킴으로써, 대역폭을 늘리지 않고도 페이지를 빠르게 로딩 - 웹 서버에 대한 요청을 감소시킴으로써 서버는 부하를 감소시킬 수 있고, 빠르게 응답 가능 - 물리적인 거리로 인한 지연 감소 1. 불필요한 데이터 전송 감소 자주 사용하는 페이지에 대해 여러 클라이언트에서 요청이 온다고 하자. 캐시가 없다면 각각의 클라이언트에게 페이지를 모두 제공해야만 한다. 하지만 캐시가 존재한다면첫번째 클라이언트의 요청이 올때, 페이지를 캐시에 저장하고, 뒤이은 요청에 대해서는 캐..
스트트래티지 패턴은 알고리즘 군을 정의하고 각각을 캡슐화여 교환하고 재사용할 수 있도록 만드는 전략이다. 스트래티지 패턴을 활용하면 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 이 내용만 봐서는 다소 이해하기 힘들 수 있다. 아래 다이어그램을 보자! 현재 Duck 클래스가 있고, Duck 클래스를 상속받는 MallardDuck, RedheadDuck 두 클래스가 존재한다. 두 클래스는 Duck 의 특성과 동일하기 때문에 상속을 통해구현이 되어 있다. 상속을 사용했기 때문에 상위 클래스의 메소드를 그대로 사용할 수 있어, 코드의 중복성 제거 및 코드의 재사용을 기대할 수 있다.그러나 만약에 아래 다이어그램과 같이 고무오리에 해당하는 RubberDuck 클래스가 새로 추가가 된다면, 어떻게 될까? ..
옵저버 패턴은 한 객체(Subject)의 상태가 변할 때, 그 객체에 의존하는 다른 객체들에 자동으로 데이터가 갱신되는 1 : n 의 의존성 관계를 갖는 형태를 의미한다. 아래 클래스 다이어그램을 보자 주제 인터페이스는 옵저버를 등록, 삭제, 상태 변경을 옵저버에게 전달하는 메소드를 추상메소드로 가지고 있다. 그렇기 때문에 주제 클래스를 구현해야 사용할 수 있다. 옵저버 클래스도 인터페이스이를 구현해야만 옵저버로서 사용이 가능하다.그 이유는, 주제 클래스는 옵저버 인터페이스를 구현하고 있는 클래스만을 옵저버로 인식하고 등록할 수 있기 때문이다. 옵저버 인터페이스만 구현한다면 어떤 객체든 옵저버가 될 수 있다. 이 부분이 정말 중요하다! 주제 객체가 옵저버에 대해 아는 정보는 오직, 옵저버 인터페이스를 구..
객체지향 설계의 5원칙 - SOLID 1. SRP (Single Responsibility Principle) : 단일 책임 원칙 2. OCP (Open Closed Principle) : 개방 폐쇄 원칙 3. LSP (Liskov Subsitution Principle) : 리스코프 치환 원칙 4. ISP (Interface Segregation Principle) : 인터페이스 분리 원칙 5. DIP (Dependency Inversion Principle) : 의존 역전 원칙 이 원칙들은 응집도는 높이고, 결합도는 낮추는 객체지향의 설계를 재정립한 원칙들이다. 결합도는 응집도는 모듈간의 관계를 표현하는 개념이다.여기서 모듈은 하나의 기능을 수행하는 단위로서, 프로그램 기능의 독립적인 단위라고 할 수..