추상화

    토비의 스프링 포스팅을 시작하며

    스프링 관련 서적을 추천 받으면 대부분 토비의스프링을 추천한다. 스프링에 대한 원리와 이해를 가장 잘 설명하고 지금까지도 변함이 없기 때문이다. 극소수의 사람은 옛날 스프링3.0 버전이라고 필요없는 내용이라 평가한다. 하지만 직접 읽어보면 단순히 스프링 내용이 아니다. 객체지향 설계에 대한 핵심 내용만 가득찬 좋은 책이다. 이 책은 겉표지 제목인 스프링이란 단어 속에 엄청난 내용들이 숨겨져 있다. 객체지향 개념, 디자인 패턴, 리팩토링, 단위테스트 등의 모든 내용을 스프링이란 단어에 가려져있었다. 토비의스프링은 객체지향 설계를 다양한 측면에서 다루는 내용들이 핵심이다. EJB 시절의 객체지향 설계 예제를 시작으로 어떻게 스프링(IoC/DI, 서비스 추상화, AOP)으로 변해왔는지 변화를 모두 경험한다. ..

    오브젝트 11_ 합성과 유연한 설계

    합성과 유연한 설계에 대한 내용이다 자세한 내용이 궁금하면 오브젝트를 펼쳐보는 걸 추천드립니다.📖 오브젝트 역할, 책임, 협력을 향해 객체지향적으로 프로그래밍하라!객체지향으로 향하는 첫걸음은 클래스가 아니라 객체를 바라보는 것에서부터 시작한다. 객체지향으로 향하는 두번째 걸음은 객체를 www.yes24.com 시작하면서 합성은 구현에 의존하지 않는다는 점에서 상속과 다르다. 상속 관계는 클래스 사이의 '정적인 관계'이고 합성 관계는 객체 사이의 '동적인 관계'다. 정적인 관계는 컴파일시점으로 변경이 불가능하지만 동적인 관계는 실행시점에 동적으로 변경이 가능하다. 객체 합성이 클래스 상속보다 더 좋은 방법이다. 상속은 구현된 코드를 재사용하면 합성은 객체의 퍼블릭 인터페이스를 재사용한다. 서브클래싱(상속)..

    오브젝트 10_ 상속과 코드 재사용

    상속과 코드 재사용에 대한 내용이다 자세한 내용이 궁금하면 오브젝트를 펼쳐보는 걸 추천드립니다.📖 오브젝트 역할, 책임, 협력을 향해 객체지향적으로 프로그래밍하라!객체지향으로 향하는 첫걸음은 클래스가 아니라 객체를 바라보는 것에서부터 시작한다. 객체지향으로 향하는 두번째 걸음은 객체를 www.yes24.com 상속과 중복 코드 중복 코드는 모두를 의심하게 만든다. 이것만으로 제거하기 충분한 이유지만 결정적이 이유는 따로 있다. DRY 원칙 중복 코드는 변경을 방해한다. 이게 중복 코드를 제거해야 하는 가장 큰 이유다. 중복 코드는 수정과 테스트에 드는 비용을 증가시키고 공황상태로 몰아넣을 수 있다. 중복 여부의 판단 기준은 변경이다. 변경이 생겼을 때 두 코드를 수정해야 한다면 중복이다. 함께 수정이 안..

    오브젝트 09_ 유연한 설계

    유연한 설계에 대한 내용이다 자세한 내용이 궁금하면 오브젝트를 펼쳐보는 걸 추천드립니다.📖 오브젝트 역할, 책임, 협력을 향해 객체지향적으로 프로그래밍하라!객체지향으로 향하는 첫걸음은 클래스가 아니라 객체를 바라보는 것에서부터 시작한다. 객체지향으로 향하는 두번째 걸음은 객체를 www.yes24.com 개방-폐쇄 원칙(Open-Closed Principle, OCP) 로버트 마틴은 확장이 가능하고 변화에 유연하게 대응하는 설계 원칙 중 하나로 개방-폐쇄 원칙을 고안했다. 확장에는 열려있고, 수정에는 닫혀야 한다. - 확장에 열려있다 : 새로운 요구사항이 생기면 변경에 맞게 새로운 '동작'을 애플리케이션에 추가할 수 있다. - 수정에 닫혀있다 : 기존의 '코드'를 수정하지 않고 애플리케이션의 동작을 추가 ..

    오브젝트 08_ 의존성 관리하기

    의존성 관리에 대한 내용이다 자세한 내용이 궁금하면 오브젝트를 펼쳐보는 걸 추천드립니다.📖 오브젝트 역할, 책임, 협력을 향해 객체지향적으로 프로그래밍하라!객체지향으로 향하는 첫걸음은 클래스가 아니라 객체를 바라보는 것에서부터 시작한다. 객체지향으로 향하는 두번째 걸음은 객체를 www.yes24.com 시작하면서 객체지향 설계란 의존성을 관리하는 것이고 객체가 변화를 받아들일 수 있게 의존성을 정리하는 기술이라고 할 수 있다 [Metz12] 의존성 이해하기 변경과 의존성 어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이에 의존성이 생기며, 실행 시점과 구현 시점에 서로 다른 의미를 가진다. - 실행 시점 : 의존하는 객체가 동작하기 위해서 실행 시에 의존 객체가 있어야 한다. - 구현 ..

    오브젝트 07_ 객체 분해

    객체 분해에 대한 내용이다 자세한 내용이 궁금하면 오브젝트를 펼쳐보는 걸 추천드립니다.📖 오브젝트 역할, 책임, 협력을 향해 객체지향적으로 프로그래밍하라!객체지향으로 향하는 첫걸음은 클래스가 아니라 객체를 바라보는 것에서부터 시작한다. 객체지향으로 향하는 두번째 걸음은 객체를 www.yes24.com 시작하면서 문제 해결을 위해 사용되는 기억 저장소는 단기 기억이며, 문제 해결에 필요한 요소의 수가 단기 기억의 용량을 초과하면 해결 능력이 급격하게 떨어지는데 이를 인지 과부하(cognitive overload)라 부른다. 이 인지 과부하를 방지하는 방법은 정보의 양을 조절하는 것이다. 문제 해결에 불필요한 세부 내역을 제거하고 핵심만 남기면 되는데, 이 작업을 추상화라 부른다. 일반적인 추상화 방법은 큰..

    오브젝트 03_ 역할, 책임, 협력

    역할, 책임, 협력에 대한 주제로 내용이다. 이전 챕터에서 언급되어 겹치는 내용이 많아 생략된 게 있으니 자세한 내용이 궁금하면 오브젝트를 펼쳐보는 걸 추천드립니다.📖 오브젝트 역할, 책임, 협력을 향해 객체지향적으로 프로그래밍하라!객체지향으로 향하는 첫걸음은 클래스가 아니라 객체를 바라보는 것에서부터 시작한다. 객체지향으로 향하는 두번째 걸음은 객체를 www.yes24.com 객체지향 패러다임의 핵심 3가지 - 협력(collaboration) : 기능을 구현하기 위한 상호작용 - 책임(responsibility) : 객체가 협력을 위해 수행하는 로직 - 역할(role) : 객체가 협력안에서 수행하는 책임 협력 협력은 하나의 객체가 다른 객체에게 도움을 요청할 때 시작된다. 이 협력을 위한 커뮤니케이션 ..

    오브젝트 02_ 객체지향 프로그래밍

    객체지향 프로그래밍에 대한 주제로 내용이다. 자세한 내용이 궁금하면 오브젝트를 펼쳐보는 걸 추천드립니다.📖 오브젝트 역할, 책임, 협력을 향해 객체지향적으로 프로그래밍하라!객체지향으로 향하는 첫걸음은 클래스가 아니라 객체를 바라보는 것에서부터 시작한다. 객체지향으로 향하는 두번째 걸음은 객체를 www.yes24.com 영화 예매 시스템을 구현해보기 시스템을 구현하기 위한 요구사항은 다음과 같다. - 시간대 별로 영화를 예매한다. - 요금할인은 할인 정책(discount policy)과 할인 조건(discount condition) 2가지다. 할인 정책은 금액과 비율로 나눠지고 할인 조건은 기간과 순서로 나눠진다. 객체지향 프로그래밍을 향해 진정한 객체지향 패러다임의 전환은 객체에 초점을 맞춰야 얻는다. ..